Commit f9f5325a authored by sternenseemann's avatar sternenseemann
Browse files

workflows/periodic-merge: merge merge-base into haskell-updates

Since haskell-updates is based on master, but merges into staging, we
need to base it on a merge-base of staging and master. See #361143.

I'm a bit worried that the information GitHub uses for displaying
Pull-Requests becomes stale and this will “add” commits to the PR
compared to the base anyways. We'll find out, I suppose.
parent 8ec53b95
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ jobs:
      max-parallel: 1
      matrix:
        pairs:
          - from: master
            into: haskell-updates
          - from: release-24.11
            into: staging-next-24.11
          - from: staging-next-24.11
+59 −0
Original line number Diff line number Diff line
# This action periodically merges a merge base of master and staging into haskell-updates.
#
# haskell-updates is based on master (so there are little unrelated failures and the cache
# is already prepopulated), but needs to target staging due to the high amount of rebuilds
# it typically causes. To prevent unrelated commits clattering the GitHub UI, we need to
# take care to only merge the merge-base of master and staging into haskell-updates.
#
# See also https://github.com/NixOS/nixpkgs/issues/361143.

name: "Periodic Merges (haskell-updates)"


on:
  schedule:
    # * is a special character in YAML so you have to quote this string
    # Merge every 24 hours
    - cron:  '0 0 * * *'
  workflow_dispatch:

permissions:
  contents: read

jobs:
  periodic-merge:
    permissions:
      contents: write  # for devmasx/merge-branch to merge branches
      pull-requests: write  # for peter-evans/create-or-update-comment to create or update comment
    if: github.repository_owner == 'NixOS'
    runs-on: ubuntu-latest
    name: git merge-base master staging → haskell-updates
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 0

      # Note: If we want to do something similar for more branches, we can move this into a
      # separate job, so we can use the matrix strategy again.
      - name: Find merge base of master and staging
        id: find_merge_base_step
        run: |
          merge_base="$(git merge-base refs/remotes/origin/master refs/remotes/origin/staging)"
          echo "Found merge base: $merge_base" >&2
          echo "merge_base=$merge_base" >> "$GITHUB_OUTPUT"

      - name: git merge-base master staging → haskell-updates
        uses: devmasx/merge-branch@854d3ac71ed1e9deb668e0074781b81fdd6e771f # 1.4.0
        with:
          type: now
          head_to_merge: ${{ steps.find_merge_base_step.outputs.merge_base }}
          target_branch: haskell-updates
          github_token: ${{ secrets.GITHUB_TOKEN }}

      - name: Comment on failure
        uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
        if: ${{ failure() }}
        with:
          issue-number: 367709
          body: |
            Periodic merge from `${{ steps.find_merge_base_step.outputs.merge_base }}` into `haskell-updates` has [failed](https://github.com/NixOS/nixpkgs/actions/runs/${{ github.run_id }}).