# Some workflows depend on the base branch of the PR, but changing the base branch is not included in the default trigger events, which would be `opened`, `synchronize` or `reopened`. # Instead it causes an `edited` event. # Since `edited` is also triggered when PR title/body is changed, we use this wrapper workflow, to run the other workflows conditionally only. # There are already feature requests for adding a `base_changed` event: # - https://github.com/orgs/community/discussions/35058 # - https://github.com/orgs/community/discussions/64119 # # Instead of adding this to each workflow's pull_request_target event, we trigger this in a separate workflow. # This has the advantage, that we can actually skip running those jobs for simple edits like changing the title or description. # The actual trigger happens by closing and re-opening the pull request, which triggers the default pull_request_target events. # This is much simpler and reliable than other approaches. name: "Edited base branch" on: pull_request_target: types: [edited] concurrency: group: edited-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }} cancel-in-progress: true permissions: {} defaults: run: shell: bash jobs: base: name: Trigger jobs runs-on: ubuntu-24.04 if: github.event.changes.base.ref.from && github.event.changes.base.ref.from != github.event.pull_request.base.ref timeout-minutes: 2 steps: # Use a GitHub App to create the PR so that CI gets triggered # The App is scoped to Repository > Contents and Pull Requests: write for Nixpkgs # We only need Pull Requests: write here, but the app is also used for backports. - uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0 id: app-token with: app-id: ${{ vars.NIXPKGS_CI_APP_ID }} private-key: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }} permission-pull-requests: write - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: github-token: ${{ steps.app-token.outputs.token }} script: | function changeState(state) { return github.rest.pulls.update({ owner: context.repo.owner, repo: context.repo.repo, pull_number: context.payload.pull_request.number, state }) } await changeState('closed') await changeState('open')