Commit b825981c authored by sagnowski's avatar sagnowski
Browse files

Merge branch 'main' into...

Merge branch 'main' into 264-change-cmakelists-txt-to-closer-match-visualstudio-dependency-structure
parents 720c9938 a45b753e
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -29,5 +29,6 @@
*.mat filter=lfs diff=lfs merge=lfs -text
*.met filter=lfs diff=lfs merge=lfs -text
*.pcm filter=lfs diff=lfs merge=lfs -text
*.sofa filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
+8 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ scripts/td_object_renderer/object_renderer_standalone/renderer_standalone.exe
.cache
*.log
*.bak
.\#*
scripts/c-code_instrument/
scripts/ifdef_instrument.list
scripts/ref/
@@ -65,3 +66,9 @@ __pycache__/

# history
.history/

#externals
Externals/

# coan output files that are created when cleaning out switches
coan_out_*
+61 −71
Original line number Diff line number Diff line
@@ -10,6 +10,10 @@ variables:
  EXIT_CODE_NON_BE: 123
  EXIT_CODE_FAIL: 1

default:
  interruptible: true # Make all jobs by default interruptible
  artifacts:
    expire_in: 2 weeks

# This sets when pipelines are created. Jobs have more specific rules to restrict them.
workflow:
@@ -23,6 +27,7 @@ workflow:
    - if: $CI_PIPELINE_SOURCE == 'web' # for testing

stages:
  - .pre
  - maintenance
  - build
  - test
@@ -168,6 +173,31 @@ stages:
      - 123



# ---------------------------------------------------------------
# .pre jobs for setting up things
# ---------------------------------------------------------------

# See: https://gitlab.com/gitlab-org/gitlab/-/issues/194023
# Solution to make main branch pipelines uninterruptible while all other
# pipelines can be interrupted by default. This works because all jobs
# after uninterruptible jobs will be uninterruptible. Resource group
# setting avoids rare case where two fast merges could still interrupt
# pipeline. This should be revisited if there are updates to Gitlab.
uninterruptible:
  stage: .pre
  interruptible: false
  resource_group: uninterruptible
  script:
    - echo "$CI_COMMIT_BRANCH is uninterruptible"
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: always
  tags:
    - ivas-linux



# ---------------------------------------------------------------
# Validation jobs
# ---------------------------------------------------------------
@@ -201,26 +231,6 @@ build-codec-linux-make:
    # need to use the "|| exit $?" suffix to get the allowed_failure return code, otherwise the job fails with code 1...<
    - ci/check_for_warnings.py $BUILD_OUTPUT || exit $?

build-unittests-linux:
  extends:
    - .build-job-with-check-for-warnings
    - .rules-basis
  script:
    - *print-common-info
    - make unittests -j 2>&1 | tee $BUILD_OUTPUT
    # need to use the "|| exit $?" suffix to get the allowed_failure return code, otherwise the job fails with code 1...<
    - ci/check_for_warnings.py $BUILD_OUTPUT || exit $?

build-td-object-renderer-standalone-linux:
  extends:
    - .build-job-with-check-for-warnings
    - .rules-basis
  script:
    - *print-common-info
    - make -C scripts/td_object_renderer/object_renderer_standalone -j 2>&1 | tee $BUILD_OUTPUT
    # need to use the "|| exit $?" suffix to get the allowed_failure return code, otherwise the job fails with code 1...<
    - ci/check_for_warnings.py $BUILD_OUTPUT || exit $?

build-codec-linux-cmake:
  extends:
    - .build-job-with-check-for-warnings
@@ -270,18 +280,19 @@ codec-smoke-test:
    ### analyze for failures
    - if cat smoke_test_output.txt | grep -c "failed"; then echo "Smoke test without PLC failed"; exit 1; fi
    - if cat smoke_test_output_plc.txt | grep -c "failed"; then echo "Smoke test with PLC failed"; exit 1; fi
    - if cat smoke_test_output_jbm_noEXT.txt | grep -c "failed"; then echo "Smoke test with PLC failed"; exit 1; fi
    - if cat smoke_test_output_jbm_noEXT.txt | grep -c "failed"; then echo "Smoke test JBM part failed"; exit 1; fi
    - if cat smoke_test_output_hrtf.txt | grep -c "failed"; then echo "Smoke test with external hrtf files failed"; exit 1; fi
  artifacts:
    name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results"
    paths:
      - out/logs/
      - smoke_test_output.txt
      - smoke_test_output_plc.txt
      - smoke_test_output_jbm_noEXT.txt
      - smoke_test_output_hrtf.txt
    expose_as: "Smoke test results"

# code selftest testvectors with memory-sanitizer binaries
msan-on-merge-request-linux:
codec-msan:
  extends:
    - .test-job-linux
    - .rules-merge-request
@@ -300,10 +311,10 @@ msan-on-merge-request-linux:
    paths:
      - scripts/ref/logs/
      - test_output.txt
    expose_as: "Msan selftest results"
    expose_as: "msan selftest results"

# code selftest testvectors with address-sanitizer binaries
asan-on-merge-request-linux:
codec-asan:
  extends:
    - .test-job-linux
    - .rules-merge-request
@@ -322,10 +333,10 @@ asan-on-merge-request-linux:
    paths:
      - scripts/ref/logs/
      - test_output.txt
    expose_as: "Asan selftest results"
    expose_as: "asan selftest results"

# test external renderer executable
external-renderer-make-pytest:
# test renderer executable
renderer-smoke-test:
  extends:
    - .test-job-linux
    - .rules-merge-request
@@ -333,21 +344,19 @@ external-renderer-make-pytest:
  stage: test
  script:
    - make -j IVAS_rend
    - make -j unittests
    - make -j --directory scripts/td_object_renderer/object_renderer_standalone
    - python3 -m pytest -q -n auto -rA --junit-xml=report-junit.xml tests/renderer/test_renderer.py
  artifacts:
    name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
    when: always
    paths:
      - report-junit.xml
    expose_as: "external renderer make pytest results"
    expose_as: "renderer make pytest results"
    reports:
      junit:
        - report-junit.xml

# test external renderer executable with cmake + asan
external-renderer-cmake-asan-pytest:
# test renderer executable with cmake + asan
renderer-asan:
  extends:
    - .test-job-linux
    - .rules-merge-request
@@ -364,13 +373,13 @@ external-renderer-cmake-asan-pytest:
    when: always
    paths:
      - report-junit.xml
    expose_as: "external renderer cmake asan pytest results"
    expose_as: "renderer asan pytest results"
    reports:
      junit:
        - report-junit.xml

# test external renderer executable with cmake + msan
external-renderer-cmake-msan-pytest:
# test renderer executable with cmake + msan
renderer-msan:
  extends:
    - .test-job-linux
    - .rules-merge-request
@@ -387,35 +396,13 @@ external-renderer-cmake-msan-pytest:
    when: always
    paths:
      - report-junit.xml
    expose_as: "external renderer cmake msan pytest results"
    reports:
      junit:
        - report-junit.xml

# test external renderer executable with cmake vs decoder renderer
# TODO @tmu @knj @sgi -> converted to script, decide whether to re-enable later
.external-renderer-cmake-vs-decoder-pytest:
  extends:
    - .test-job-linux
    - .rules-merge-request
  needs: ["build-codec-linux-cmake"]
  stage: test
  script:
    - cmake -B cmake-build -G "Unix Makefiles" -DCOPY_EXECUTABLES_FROM_BUILD_DIR=true -DDEC_TO_REND_FLOAT_DUMP=true
    - cmake --build cmake-build -- -j
    - python3 -m pytest -q -n 1 -rA --junit-xml=report-junit.xml tests/renderer/test_renderer_vs_decoder.py
  artifacts:
    name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
    when: always
    paths:
      - report-junit.xml
    expose_as: "external renderer cmake vs decoder results"
    expose_as: "renderer msan pytest results"
    reports:
      junit:
        - report-junit.xml

# compare external renderer bitexactness between target and source branch
external-renderer-pytest-on-merge-request:
# compare renderer bitexactness between target and source branch
renderer-pytest-on-merge-request:
  extends:
    - .test-job-linux
    - .rules-merge-request
@@ -463,7 +450,7 @@ external-renderer-pytest-on-merge-request:
    paths:
      - report-junit.xml
      - report.html
    expose_as: "pytest external renderer results"
    expose_as: "pytest renderer results"
    reports:
      junit:
        - report-junit.xml
@@ -839,7 +826,7 @@ sanitizer-test-masa:
.sanitizer-test-schedule-B:
  extends:
    - .sanitizer-test-template
  timeout: 3 hours
  timeout: 4 hours

sanitizer-test-mc-5_1:
  extends: .sanitizer-test-schedule-B
@@ -854,7 +841,7 @@ sanitizer-test-mc-5_1_2:
  rules:
    - if: $SANITIZER_SCHEDULE_B
      when: delayed
      start_in: 3 hours
      start_in: 4 hours
  script:
    - *update-ltv-repo
    - python3 ci/run_scheduled_sanitizer_test.py 5_1_2 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL --tests $SANITIZER_TESTS
@@ -864,7 +851,7 @@ sanitizer-test-mc-5_1_4:
  rules:
    - if: $SANITIZER_SCHEDULE_B
      when: delayed
      start_in: 6 hours
      start_in: 8 hours
  script:
    - *update-ltv-repo
    - python3 ci/run_scheduled_sanitizer_test.py 5_1_4 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL --tests $SANITIZER_TESTS
@@ -874,7 +861,7 @@ sanitizer-test-mc-7_1:
  rules:
    - if: $SANITIZER_SCHEDULE_B
      when: delayed
      start_in: 9 hours
      start_in: 12 hours
  script:
    - *update-ltv-repo
    - python3 ci/run_scheduled_sanitizer_test.py 7_1 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL --tests $SANITIZER_TESTS
@@ -884,7 +871,7 @@ sanitizer-test-mc-7_1_4:
  rules:
    - if: $SANITIZER_SCHEDULE_B
      when: delayed
      start_in: 12 hours
      start_in: 16 hours
  script:
    - *update-ltv-repo
    - python3 ci/run_scheduled_sanitizer_test.py 7_1_4 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL --tests $SANITIZER_TESTS
@@ -928,18 +915,21 @@ coverage-test-on-main-scheduled:
  script:
    - *print-common-info
    - make GCOV=1 -j
    - cp IVAS_rend IVAS_rend_ref # Copy exec to be able to run external renderer script  
    - cp IVAS_rend IVAS_rend_ref # Copy exec to be able to run renderer script  
    - python3 tests/create_short_testvectors.py
    - python3 -m pytest tests -v -n 0 --update_ref 1 -m create_ref --ref_encoder_path ./IVAS_cod --ref_decoder_path ./IVAS_dec
    - python3 -m pytest tests -v -n 0 --update_ref 1 -m create_ref_part2 --ref_encoder_path ./IVAS_cod --ref_decoder_path ./IVAS_dec
    - python3 -m pytest tests/test_param_file.py -v -n 0 --update_ref 1 -m create_ref --param_file scripts/config/self_test_evs.prm --ref_encoder_path ./IVAS_cod --ref_decoder_path ./IVAS_dec
    - bash ci/smoke_test.sh coverage
    - python3 -m pytest -q -n auto tests/renderer/test_renderer_be_comparison.py
    - bash ci/ivas_voip_be_test.sh coverage
    - lcov -c -d obj -o coverage.info
    - genhtml coverage.info -o coverage
    - commit_sha=$(git rev-parse HEAD)
    - genhtml coverage.info -o coverage -t "Coverage on main @ $commit_sha"
  artifacts:
    name: "main-coverage-sha-$CI_COMMIT_SHORT_SHA"
    when: always
    expire_in: 1 week
    paths:
      - coverage.info
      - coverage
@@ -972,8 +962,8 @@ coverage-test-on-main-scheduled:
  - mv -f wmops/log_*_all.txt wmops/*.js ${public_dir}/
  # move logfiles for links
  - mkdir $public_dir/logs
  # first move logs for "native" sampling rate
  - log_files=$(cat $public_dir/graphs_wmops_flc.js | grep logFile | sed "s/.*\(wmops_newsletter_.*\.csv\).*/\1/g")
  # first move logs
  - log_files=$(cat $public_dir/graphs*.js | grep logFile | sed "s/.*\(wmops_newsletter_.*\.csv\).*/\1/g")
  - echo $log_files
  - ls wmops/logs
  - for f in $log_files; do [ -f wmops/logs/$f ] && mv wmops/logs/$f $public_dir/logs/$f; done
+39 −0
Original line number Diff line number Diff line
### Basic info

- Commit SHA: 

### Bug description

Clang (msan/asan?) sanitizer test in pipeline found an error:

<!--- Copy sanitizer traceback from command line here -->
```

```

<!--- Copy test job URL here -->
Link to test pipeline: XXX

### Ways to reproduce

Using the [scripts](https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/wikis/Software-development/pyivastest-howto#how-to-reproduce-tests):
<!--- check correct sanitizer type -->
<!--- add error pattern if needed -->
```
python3 scripts/IvasBuildAndRunChecks.py --checks CLANGX -m MODE -p /path/to/my/local/ci_linux_ltv_local.json
```
or directly:

```
make clean
make -j CLANG=X
./IVAS_cod ...
eid-xor -vbr -fer bit ep_015.g192 bit_fer
./IVAS_dec ...
```

<!--- Below are labels that will be added but are not shown in description. This is a template to help fill them.
      Add further information to the first row and remove and add labels as necessary.  -->

/label ~"Priority::Critical" ~Company: ~Subpart:
/label ~Type:Bug ~Status::ToDo
Loading