name: post-weekly-release run-name: Build, test, generate signed artifacts and optionally prepare release on: workflow_dispatch: push: branches: - main tags: - '*' schedule: - cron: '17 2 * * 1' jobs: coverity: if: ${{ (!startsWith(github.event.ref, 'refs/tags/')) && (github.repository_owner == 'Arm-software') }} name: Run Coverity static analysis runs-on: [self-hosted-ubuntu-latest-x64] steps: - name: Clean workspace uses: AutoModality/action-clean@v1 - name: Git checkout uses: actions/checkout@v4 with: submodules: 'true' - name: Coverity preparation run: | export PATH=$PATH:/usr/local/cov-analysis/bin mkdir build_cov cd build_cov cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../ -DASTCENC_ISA_AVX2=ON .. cov-configure --config ${GITHUB_WORKSPACE}/coverity.conf --template --compiler cc --comptype gcc cov-configure --config ${GITHUB_WORKSPACE}/coverity.conf --template --compiler c++ --comptype g++ - name: Coverity build run: | export PATH=$PATH:/usr/local/cov-analysis/bin cd build_cov cov-build --config ${GITHUB_WORKSPACE}/coverity.conf --dir ${GITHUB_WORKSPACE}/intermediate make install - name: Coverity analyze run: | export PATH=$PATH:/usr/local/cov-analysis/bin cd build_cov cov-analyze --dir ${GITHUB_WORKSPACE}/intermediate - name: Coverity upload env: COVERITY_KEY: ${{ secrets.COVERITY_KEY }} run: | export PATH=$PATH:/usr/local/cov-analysis/bin echo "${COVERITY_KEY}" > coverity.key chmod 400 coverity.key cd build_cov cov-commit-defects \ --dir ${GITHUB_WORKSPACE}/intermediate \ --stream astcenc-master \ --url https://coverity.cambridge.arm.com \ --auth-key-file ../coverity.key \ --strip-path ${GITHUB_WORKSPACE} build-ubuntu-arm64: name: Ubuntu arm64 runs-on: ubuntu-24.04-arm steps: - name: Git checkout uses: actions/checkout@v4 with: submodules: 'true' - name: Update apt packages run: sudo apt-get update - name: Install ImageMagick run: sudo apt-get install imagemagick - name: Build release run: | export CXX=clang++ mkdir build_rel cd build_rel cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../ -DASTCENC_ISA_NEON=ON -DASTCENC_ISA_SVE_128=ON -DASTCENC_ISA_SVE_256=ON -DASTCENC_PACKAGE=arm64 .. make install package -j4 - name: Upload binaries uses: actions/upload-artifact@v4 with: name: astcenc-linux-arm64 path: | build_rel/*.zip build_rel/*.zip.sha256 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Get Python modules run: | python -m pip install --upgrade pip pip install numpy Pillow - name: Run system tests # Disable SVE testing for now run: | python ./Test/astc_test_functional.py --encoder neon python ./Test/astc_test_image.py --encoder neon --test-set Small build-ubuntu-x64: name: Ubuntu x64 runs-on: ubuntu-22.04 steps: - name: Git checkout uses: actions/checkout@v4 with: submodules: 'true' - name: Build release run: | export CXX=clang++ mkdir build_rel cd build_rel cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../ -DASTCENC_ISA_AVX2=ON -DASTCENC_ISA_SSE41=ON -DASTCENC_ISA_SSE2=ON -DASTCENC_PACKAGE=x64 .. make install package -j4 - name: Upload binaries uses: actions/upload-artifact@v4 with: name: astcenc-linux-x86_64 path: | build_rel/*.zip build_rel/*.zip.sha256 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Get Python modules run: | python -m pip install --upgrade pip pip install numpy Pillow - name: Run system tests run: | python ./Test/astc_test_functional.py python ./Test/astc_test_image.py --encoder all-x86 --test-set Small build-macos-universal: name: macOS universal runs-on: macos-14 steps: - name: Git checkout uses: actions/checkout@v4 with: submodules: 'true' - name: Build release run: | mkdir build_rel cd build_rel cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../ -DASTCENC_PACKAGE=universal .. make install package -j4 - name: Upload binaries uses: actions/upload-artifact@v4 with: name: astcenc-macos-universal path: | build_rel/*.zip build_rel/*.zip.sha256 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Get Python modules run: | python -m pip install --upgrade pip pip install numpy Pillow - name: Run system tests run: | python ./Test/astc_test_image.py --test-set Small --encoder universal build-windows-multi: name: Windows multi runs-on: windows-2022 steps: - name: Git checkout uses: actions/checkout@v4 with: submodules: 'true' - name: Setup Visual Studio x86_64 uses: ilammy/msvc-dev-cmd@v1 - name: Build release x64 run: | mkdir build_rel cd build_rel cmake -G "Visual Studio 17 2022" -T ClangCL -DCMAKE_INSTALL_PREFIX=../ -DASTCENC_ISA_AVX2=ON -DASTCENC_ISA_SSE41=ON -DASTCENC_ISA_SSE2=ON -DASTCENC_PACKAGE=x64 .. msbuild astcencoder.sln -property:Configuration=Release msbuild PACKAGE.vcxproj -property:Configuration=Release msbuild INSTALL.vcxproj -property:Configuration=Release shell: cmd - name: Setup Visual Studio arm64 uses: ilammy/msvc-dev-cmd@v1 with: arch: x86_arm64 - name: Build release arm64 run: | mkdir build_rel_arm64 cd build_rel_arm64 cmake -G "Visual Studio 17 2022" -A ARM64 -T ClangCL -DCMAKE_INSTALL_PREFIX=../ -DASTCENC_ISA_NEON=ON -DASTCENC_PACKAGE=arm64 .. msbuild astcencoder.sln -property:Configuration=Release msbuild PACKAGE.vcxproj -property:Configuration=Release msbuild INSTALL.vcxproj -property:Configuration=Release shell: cmd - name: Upload binaries uses: actions/upload-artifact@v4 with: name: astcenc-windows-multi-cl path: | build_rel/*.zip build_rel/*.zip.sha256 build_rel_arm64/*.zip build_rel_arm64/*.zip.sha256 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.10' - name: Get Python modules run: | python -m pip install --upgrade pip pip install numpy Pillow shell: cmd - name: Run system tests run: | python ./Test/astc_test_image.py --test-set Small shell: cmd sign-binaries: if: github.repository_owner == 'Arm-software' name: Sign Windows and macOS runs-on: [self-hosted-ubuntu-latest-x64] needs: [build-macos-universal, build-windows-multi] steps: - name: Clean workspace uses: AutoModality/action-clean@v1 - name: Checkout signing code env: SIGNING_REPO_URL: ${{ secrets.SIGNING_REPO_URL }} run: | git clone --depth 1 ${SIGNING_REPO_URL} - name: Install code sign v2 client env: ARTIFACTORY_USER: ${{ secrets.ARTIFACTORY_USER }} ARTIFACTORY_APIKEY: ${{ secrets.ARTIFACTORY_APIKEY }} ARTIFACTORY_FQDN: ${{ secrets.ARTIFACTORY_FQDN }} run: | python3.11 -m venv cs . ./cs/bin/activate pip install -i https://${ARTIFACTORY_USER}:${ARTIFACTORY_APIKEY}@${ARTIFACTORY_FQDN}/artifactory/api/pypi/dsgcore.pypi/simple code-signer-client - name: Download macOS binaries uses: actions/download-artifact@v4 with: name: astcenc-macos-universal path: mac - name: Download Windows binaries uses: actions/download-artifact@v4 with: name: astcenc-windows-multi-cl path: windows - name: Sign macOS binaries env: CODESIGNER_USER: ${{ secrets.CODESIGNER_USER }} run: | . ./cs/bin/activate cd mac python3 ${GITHUB_WORKSPACE}/signing/macos-client-wrapper.py ${CODESIGNER_USER} *.zip - name: Sign Windows binaries env: ARTIFACTORY_APIKEY: ${{ secrets.ARTIFACTORY_APIKEY }} run: | . ./cs/bin/activate cd windows for FILENAME in */*; do mv ${FILENAME} .; done for ZIPFILE in *.zip; do python3 ../signing/windows-client-wrapper.py -b ${GITHUB_RUN_NUMBER} -t ${ARTIFACTORY_APIKEY} ${ZIPFILE}; done - name: Upload signed binaries uses: actions/upload-artifact@v4 with: name: signed-binaries path: | windows/* mac/* - name: Tidy intermediate artifacts uses: geekyeggo/delete-artifact@v5 with: name: | astcenc-windows-multi-cl astcenc-macos-universal prepare-release: if: ${{ (startsWith(github.event.ref, 'refs/tags/')) && (github.repository_owner == 'Arm-software') }} name: Prepare release runs-on: ubuntu-22.04 needs: [sign-binaries, build-ubuntu-x64] steps: - name: Git checkout uses: actions/checkout@v4 - name: Download signed binaries uses: actions/download-artifact@v4 with: name: signed-binaries path: prepare-release - name: Download Linux x86_64 binaries uses: actions/download-artifact@v4 with: name: astcenc-linux-x86_64 path: prepare-release - name: Download Linux arm64 binaries uses: actions/download-artifact@v4 with: name: astcenc-linux-arm64 path: prepare-release - name: Flatten file structure run: | cd prepare-release for FILENAME in */*; do mv ${FILENAME} .; done rmdir windows rmdir mac - name: Create checksum file run: | cd prepare-release cat *.sha256 > release-sha256.txt rm *.sha256 - name: Create release body run: | export STATUS_DATE=$(date "+%B %Y") GITHUB_REF=${{ github.ref }} ; export RELEASE_VERSION=${GITHUB_REF##*/} export SHA_CHECKSUMS=$(cat prepare-release/release-sha256.txt) envsubst < .github/workflows/release_body_template.md > prepare-release/release_body.md - name: Create release id: create_release uses: comnoco/create-release-action@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: ${{ github.ref }} body_path: prepare-release/release_body.md draft: true - name: Attach artifacts uses: AButler/upload-release-assets@v3.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} release-id: ${{ steps.create_release.outputs.id }} files: "prepare-release/astcenc-*-*-*.zip;prepare-release/release-sha256.txt"