# Copyright (c) the JPEG XL Project Authors. All rights reserved. # # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # Workflow for running conformance tests. name: Conformance on: push: branches: - main - v*.*.x pull_request: types: [opened, reopened, labeled, synchronize] env: LIBJXL_VERSION: 0.8.0 LIBJXL_ABI_VERSION: 0.8 concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: warmup: # If necessary, fetch files just once, before tests are run. name: Warmup caches runs-on: ubuntu-latest steps: - name: Checkout the conformance source uses: actions/checkout@v2 with: repository: libjxl/conformance # TODO(eustas): move ref to a global variable / file? ref: 43d8135b50e53167ee6fee0b842b9eb15cfc4aa2 path: conformance - name: Cache uses: actions/cache@v2 with: path: ${{ github.workspace }}/conformance/.objects key: conformance-refs - name: Download and link conformance files run: | ${{ github.workspace }}/conformance/scripts/download_and_symlink.sh build: name: Conformance Build ${{ matrix.name }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - name: AVX3 cflags: -DHWY_DISABLED_TARGETS=HWY_AVX3-1 - name: AVX2 cflags: -DHWY_DISABLED_TARGETS=HWY_AVX2-1 - name: SSE4 cflags: -DHWY_DISABLED_TARGETS=HWY_SSE4-1 - name: SSSE3 cflags: -DHWY_DISABLED_TARGETS=HWY_SSSE3-1 - name: EMU128 cflags: -DHWY_COMPILE_ONLY_EMU128=1 - name: SCALAR cflags: -DHWY_COMPILE_ONLY_SCALAR=1 - name: SCALAR_ASAN cflags: -DHWY_COMPILE_ONLY_SCALAR=1 build_type: asan env: CCACHE_DIR: ${{ github.workspace }}/.ccache steps: - name: Install build deps run: | sudo apt update sudo apt install -y \ ccache \ clang-7 \ cmake \ doxygen \ libbenchmark-dev \ libbenchmark-tools \ libbrotli-dev \ libgdk-pixbuf2.0-dev \ libgif-dev \ libgtest-dev \ libgtk2.0-dev \ libjpeg-dev \ libopenexr-dev \ libpng-dev \ libwebp-dev \ ninja-build \ pkg-config \ xvfb \ ${{ matrix.apt_pkgs }} \ # echo "CC=clang-7" >> $GITHUB_ENV echo "CXX=clang++-7" >> $GITHUB_ENV - name: Checkout the jxl source uses: actions/checkout@v2 with: submodules: true fetch-depth: 2 - name: Git environment id: git-env run: | echo "::set-output name=parent::$(git rev-parse ${{ github.sha }}^)" shell: bash - name: ccache uses: actions/cache@v2 with: path: ${{ env.CCACHE_DIR }} # When the cache hits the key it is not updated, so if this is a rebuild # of the same Pull Request it will reuse the cache if still around. For # either Pull Requests or new pushes to main, this will use the parent # hash as the starting point from the restore-keys entry. key: conformance-${{ runner.os }}-${{ github.sha }}-${{ matrix.name }} restore-keys: | conformance-${{ runner.os }}-${{ steps.git-env.outputs.parent }}-${{ matrix.name }} - name: Build run: | mkdir -p ${CCACHE_DIR} echo "max_size = 200M" > ${CCACHE_DIR}/ccache.conf CMAKE_FLAGS="${{ matrix.cflags }}" \ ./ci.sh ${{ matrix.build_type || 'release' }} -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DBUILD_TESTING=OFF # Flatten the artifacts directory structure cp tools/conformance/conformance.py build/tools/conformance cp tools/conformance/lcms2.py build/tools/conformance cp build/tools/djxl build/tools/conformance cp build/libjxl.so.${{ env.LIBJXL_VERSION }} build/tools/conformance cp build/libjxl_threads.so.${{ env.LIBJXL_VERSION }} build/tools/conformance env: SKIP_TEST: 1 - uses: actions/upload-artifact@v2 with: name: conformance_binary-${{ matrix.name }} path: | build/tools/conformance/conformance.py build/tools/conformance/lcms2.py build/tools/conformance/djxl build/tools/conformance/libjxl.so.${{ env.LIBJXL_VERSION }} build/tools/conformance/libjxl_threads.so.${{ env.LIBJXL_VERSION }} - name: ccache stats run: ccache --show-stats run: name: Conformance Test ${{ matrix.name }} on ${{ matrix.target }} needs: [warmup, build] runs-on: ubuntu-latest strategy: fail-fast: false matrix: name: [main_level5, main_level10] target: [AVX3, AVX2, SSE4, SSSE3, EMU128, SCALAR, SCALAR_ASAN] steps: - name: Install deps run: | pip install numpy - name: Checkout the conformance source uses: actions/checkout@v2 with: repository: libjxl/conformance ref: 43d8135b50e53167ee6fee0b842b9eb15cfc4aa2 path: conformance - name: Cache uses: actions/cache@v2 with: path: ${{ github.workspace }}/conformance/.objects key: conformance-refs - name: Download and link conformance files run: | ${{ github.workspace }}/conformance/scripts/download_and_symlink.sh - uses: actions/download-artifact@v2 with: name: conformance_binary-${{ matrix.target }} - name: Run conformance tests run: | chmod +x djxl ln -s libjxl.so.${{ env.LIBJXL_VERSION }} libjxl.so.${{ env.LIBJXL_ABI_VERSION }} ln -s libjxl_threads.so.${{ env.LIBJXL_VERSION }} libjxl_threads.so.${{ env.LIBJXL_ABI_VERSION }} export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` python conformance.py \ --decoder=`pwd`/djxl \ --corpus=`pwd`/conformance/testcases/${{ matrix.name }}.txt