Unverified Commit 959eed1f authored by Wolfgang Walther's avatar Wolfgang Walther
Browse files

workflows/{pr,push}: init

Those two workflows bundle all the main jobs in two event-specific
wrapper workflows. This enables us to do two things later on:
- Synchronize the merge commits between most of the jobs run in a PR.
- Create a single "required" job to be targeted by GitHub's "required
status checks to pass" feature.
parent 485f3b2a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ Thus, it is important how to construct the group keys:

- We don't want workflows of different Pull Requests to cancel each other, so we include `github.event.pull_request.number`. The [GitHub docs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/control-the-concurrency-of-workflows-and-jobs#example-using-a-fallback-value) show using `github.head_ref` for this purpose, but this doesn't work well with forks: Different users could have the same head branch name in their forks and run CI for their PRs at the same time.

- Sometimes, there is no `pull_request.number`. That's the case for `push` or `workflow_run` events. To ensure non-PR runs are never cancelled, we add a fallback of `github.run_id`. This is a unique value for each workflow run.
- Sometimes, there is no `pull_request.number`. To ensure non-PR runs are never cancelled, we add a fallback of `github.run_id`. This is a unique value for each workflow run.

- Of course, we run multiple workflows at the same time, so we add `github.workflow` to the key. Otherwise workflows would cancel each other.

+4 −8
Original line number Diff line number Diff line
name: Build

on:
  pull_request:
    paths:
      - .github/workflows/build.yml
  pull_request_target:

concurrency:
  group: build-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
  cancel-in-progress: true
  workflow_call:
    secrets:
      CACHIX_AUTH_TOKEN:
        required: true

permissions: {}

+1 −8
Original line number Diff line number Diff line
name: Check

on:
  pull_request:
    paths:
      - .github/workflows/check.yml
  pull_request_target:

concurrency:
  group: check-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
  cancel-in-progress: true
  workflow_call:

permissions: {}

+8 −21
Original line number Diff line number Diff line
name: Eval

on:
  pull_request:
    paths:
      - .github/workflows/eval.yml
      - .github/workflows/reviewers.yml # needs eval results from the same event type
  pull_request_target:
  push:
    # Keep this synced with ci/request-reviews/dev-branches.txt
    branches:
      - master
      - staging
      - release-*
      - staging-*
      - haskell-updates
      - python-updates

concurrency:
  group: eval-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
  cancel-in-progress: true
  workflow_call:
    secrets:
      OWNER_APP_PRIVATE_KEY:
        required: false

permissions: {}

@@ -109,12 +95,12 @@ jobs:
              run_id = (await github.rest.actions.listWorkflowRuns({
                owner: context.repo.owner,
                repo: context.repo.repo,
                workflow_id: 'eval.yml',
                workflow_id: 'push.yml',
                event: 'push',
                head_sha: targetSha
              })).data.workflow_runs[0].id
            } catch {
              throw new Error(`Could not find an eval.yml workflow run for ${targetSha}.`)
              throw new Error(`Could not find an push.yml workflow run for ${targetSha}.`)
            }

            core.setOutput('targetRunId', run_id)
@@ -265,4 +251,5 @@ jobs:
    needs: [prepare, outpaths]
    if: needs.prepare.outputs.targetSha
    uses: ./.github/workflows/reviewers.yml
    secrets: inherit
    secrets:
      OWNER_APP_PRIVATE_KEY: ${{ secrets.OWNER_APP_PRIVATE_KEY }}
+1 −1
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ jobs:

                  const run_id = (await github.rest.actions.listWorkflowRuns({
                    ...context.repo,
                    workflow_id: 'eval.yml',
                    workflow_id: 'pr.yml',
                    event: 'pull_request_target',
                    // For PR events, the workflow run is still in progress with this job itself.
                    status: prEventCondition ? 'in_progress' : 'success',
Loading