105 lines · yaml
1name: Release Binaries All2 3permissions:4 contents: read # Default everything to read-only5 6on:7 workflow_dispatch:8 inputs:9 release-version:10 description: 'Release Version'11 required: true12 type: string13 upload:14 description: 'Upload binaries to the release page'15 required: true16 default: false17 type: boolean18 19 workflow_call:20 inputs:21 release-version:22 description: 'Release Version'23 required: true24 type: string25 upload:26 description: 'Upload binaries to the release page'27 required: true28 default: false29 type: boolean30 secrets:31 RELEASE_TASKS_USER_TOKEN:32 description: "Secret used to check user permissions."33 required: false34 35 pull_request:36 types:37 - opened38 - synchronize39 - reopened40 # When a PR is closed, we still start this workflow, but then skip41 # all the jobs, which makes it effectively a no-op. The reason to42 # do this is that it allows us to take advantage of concurrency groups43 # to cancel in progress CI jobs whenever the PR is closed.44 - closed45 paths:46 - '.github/workflows/release-binaries-all.yml'47 - '.github/workflows/release-binaries.yml'48 - '.github/workflows/release-binaries-setup-stage/*'49 - '.github/workflows/release-binaries-save-stage/*'50 - 'clang/cmake/caches/Release.cmake'51 52concurrency:53 group: ${{ github.workflow }}-${{ github.event.pull_request.number || 'dispatch' }}54 cancel-in-progress: True55 56jobs:57 setup-variables:58 if: >-59 (github.event_name != 'pull_request' || github.event.action != 'closed')60 runs-on: ubuntu-24.0461 outputs:62 release-version: ${{ steps.vars.outputs.release-version }}63 upload: ${{ steps.vars.outputs.upload }}64 steps:65 - shell: bash66 id: vars67 run: |68 upload="${{ inputs.upload }}"69 release_version="${{ inputs.release-version }}"70 if [ "${{ github.event_name }}" = "pull_request" ]; then71 upload="false"72 release_version=""73 fi74 echo "release-version=$release_version" >> "$GITHUB_OUTPUT"75 echo "upload=$upload" >> "$GITHUB_OUTPUT"76 77 release-binaries-all:78 name: Build Release Binaries79 needs:80 - setup-variables81 permissions:82 contents: write # For release uploads83 id-token: write # For artifact attestations84 attestations: write # For artifact attestations85 strategy:86 fail-fast: false87 matrix:88 # We use ubuntu-22.04 rather than the latest version to make the built89 # binaries more portable (eg functional aginast older glibc).90 runs-on:91 - ubuntu-22.0492 - ubuntu-22.04-arm93 - macos-1494 95 uses: ./.github/workflows/release-binaries.yml96 with:97 release-version: "${{ needs.setup-variables.outputs.release-version }}"98 upload: ${{ needs.setup-variables.outputs.upload == 'true'}}99 runs-on: "${{ matrix.runs-on }}"100 secrets:101 # This will be empty for pull_request events, but that's fine, because102 # the release-binaries workflow does not use this secret for the103 # pull_request event.104 RELEASE_TASKS_USER_TOKEN: ${{ secrets.RELEASE_TASKS_USER_TOKEN }}105