| # Copyright 2023 Google Inc. All Rights Reserved. |
| # |
| # Distributed under MIT license. |
| # See file LICENSE for detail or copy at https://opensource.org/licenses/MIT |
| |
| # Workflow for building the release binaries. |
| |
| name: Release build / deploy |
| on: |
| push: |
| branches: |
| - master |
| - v*.*.* |
| release: |
| types: [ published ] |
| pull_request: |
| types: [opened, reopened, labeled, unlabeled, synchronize] |
| |
| permissions: |
| contents: read |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} |
| |
| jobs: |
| windows_build: |
| name: Windows Build (vcpkg / ${{ matrix.triplet }}) |
| runs-on: ${{ matrix.runs_on }} |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - triplet: x86-windows-dynamic |
| arch: '-A Win32' |
| build_shared_libs: 'ON' |
| runs_on: windows-latest |
| - triplet: x64-windows-dynamic |
| arch: '-A x64' |
| build_shared_libs: 'ON' |
| runs_on: windows-latest |
| - triplet: arm64-windows-dynamic |
| arch: '-A ARM64' |
| build_shared_libs: 'ON' |
| runs_on: windows-11-arm |
| - triplet: x86-windows-static |
| arch: '-A Win32' |
| build_shared_libs: 'OFF' |
| runs_on: windows-latest |
| - triplet: x64-windows-static |
| arch: '-A x64' |
| build_shared_libs: 'OFF' |
| runs_on: windows-latest |
| - triplet: arm64-windows-static |
| arch: '-A ARM64' |
| build_shared_libs: 'OFF' |
| runs_on: windows-11-arm |
| |
| env: |
| VCPKG_VERSION: '2022.11.14' |
| VCPKG_ROOT: vcpkg |
| VCPKG_DISABLE_METRICS: 1 |
| |
| steps: |
| |
| - name: Harden Runner |
| uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 |
| with: |
| egress-policy: audit |
| |
| - name: Checkout the source |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| with: |
| submodules: false |
| fetch-depth: 1 |
| |
| - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 |
| id: cache-vcpkg |
| with: |
| path: vcpkg |
| key: release-${{ runner.os }}-vcpkg-${{ env.VCPKG_VERSION }}-${{ matrix.triplet }} |
| |
| - name: Download vcpkg |
| if: steps.cache-vcpkg.outputs.cache-hit != 'true' |
| shell: 'powershell' |
| run: | |
| Invoke-WebRequest -Uri "https://github.com/microsoft/vcpkg/archive/refs/tags/${{ env.VCPKG_VERSION }}.zip" -OutFile "vcpkg.zip" |
| |
| - name: Bootstrap vcpkg |
| if: steps.cache-vcpkg.outputs.cache-hit != 'true' |
| shell: 'bash' |
| run: | |
| set -x |
| unzip -q vcpkg.zip |
| rm -rf ${VCPKG_ROOT} |
| mv vcpkg-${VCPKG_VERSION} ${VCPKG_ROOT} |
| ${VCPKG_ROOT}/bootstrap-vcpkg.sh |
| |
| - name: Configure |
| shell: 'bash' |
| run: | |
| set -x |
| mkdir out |
| cmake -Bout -H. ${{ matrix.arch }} \ |
| -DBUILD_TESTING=OFF \ |
| -DBUILD_SHARED_LIBS=${{ matrix.build_shared_libs }} \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DCMAKE_INSTALL_PREFIX=`pwd`/prefix \ |
| -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake \ |
| -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \ |
| # |
| |
| - name: Build |
| shell: 'bash' |
| run: | |
| set -x |
| cmake --build out --config Release |
| |
| - name: Install |
| shell: 'bash' |
| run: | |
| set -x |
| cmake --build out --config Release --target install |
| cp LICENSE prefix/bin/LICENSE.brotli |
| |
| - name: Package release zip |
| shell: 'powershell' |
| run: | |
| Compress-Archive -Path prefix\bin\* ` |
| -DestinationPath brotli-${{matrix.triplet}}.zip |
| |
| - name: Upload package |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| with: |
| name: brotli-${{matrix.triplet}} |
| path: brotli-${{matrix.triplet}}.zip |
| compression-level: 0 |
| |
| testdata_upload: |
| name: Upload testdata |
| runs-on: 'ubuntu-latest' |
| defaults: |
| run: |
| shell: bash |
| steps: |
| |
| - name: Harden Runner |
| uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 |
| with: |
| egress-policy: audit |
| |
| - name: Checkout the source |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| with: |
| submodules: false |
| fetch-depth: 1 |
| |
| - name: Compress testdata |
| run: | |
| tar cvfJ testdata.txz tests/testdata |
| |
| - name: Upload archive |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| with: |
| name: testdata |
| path: testdata.txz |
| compression-level: 0 |
| |
| publish_release_assets: |
| name: Publish release assets |
| needs: [windows_build, testdata_upload] |
| if: github.event_name == 'release' |
| runs-on: [ubuntu-latest] |
| permissions: |
| contents: write |
| |
| steps: |
| - name: Checkout the source |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| with: |
| submodules: false |
| fetch-depth: 1 |
| |
| - name: Download all artifacts |
| uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 |
| with: |
| path: release_assets |
| merge-multiple: true |
| |
| - name: Publish assets |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| run: | |
| gh release upload ${{ github.event.release.tag_name }} ./release_assets/* |
| |
| archive_build: |
| needs: testdata_upload |
| name: Build and test from archive |
| needs: [publish_release_assets] |
| runs-on: 'ubuntu-latest' |
| defaults: |
| run: |
| shell: bash |
| steps: |
| |
| - name: Harden Runner |
| uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 |
| with: |
| egress-policy: audit |
| |
| - name: Checkout the source |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| with: |
| submodules: false |
| fetch-depth: 1 |
| |
| - name: Archive |
| run: | |
| git archive HEAD -o archive.tgz |
| |
| - name: Pick tag |
| run: | |
| echo "BROTLI_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV |
| |
| - name: Extract |
| run: | |
| mkdir archive |
| cd archive |
| tar xvzf ../archive.tgz |
| |
| - name: Download testdata |
| run: | |
| cd archive |
| scripts/download_testdata.sh |
| |
| - name: Configure and Build |
| run: | |
| cd archive |
| cmake -B out . |
| cmake --build out |
| |
| - name: Test |
| run: | |
| cd archive |
| cd out |
| ctest |