diff --git a/.github/workflows/periodic-merge-24h.yml b/.github/workflows/periodic-merge-24h.yml index 813d6a988efde..81c0bade02500 100644 --- a/.github/workflows/periodic-merge-24h.yml +++ b/.github/workflows/periodic-merge-24h.yml @@ -33,8 +33,6 @@ jobs: max-parallel: 1 matrix: pairs: - - from: master - into: haskell-updates - from: release-24.05 into: staging-next-24.05 - from: staging-next-24.05 diff --git a/.github/workflows/periodic-merge-haskell-updates.yml b/.github/workflows/periodic-merge-haskell-updates.yml new file mode 100644 index 0000000000000..46011d66061c7 --- /dev/null +++ b/.github/workflows/periodic-merge-haskell-updates.yml @@ -0,0 +1,59 @@ +# 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 }}).