mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-06-05 21:03:40 +00:00
87 lines
3.0 KiB
YAML
87 lines
3.0 KiB
YAML
# This action periodically merges base branches into staging branches.
|
||
# This is done to
|
||
# * prevent conflicts or rather resolve them early
|
||
# * make all potential breakage happen on the staging branch
|
||
# * and make sure that all major rebuilds happen before the staging
|
||
# branch get’s merged back into its base branch.
|
||
|
||
name: "Periodic Merges (24h)"
|
||
|
||
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: {}
|
||
|
||
defaults:
|
||
run:
|
||
shell: bash
|
||
|
||
jobs:
|
||
periodic-merge:
|
||
if: github.repository_owner == 'NixOS' || github.event_name == 'workflow_dispatch'
|
||
strategy:
|
||
# don't fail fast, so that all pairs are tried
|
||
fail-fast: false
|
||
# certain branches need to be merged in order, like master->staging-next->staging
|
||
# and disabling parallelism ensures the order of the pairs below.
|
||
max-parallel: 1
|
||
matrix:
|
||
pairs:
|
||
- from: release-25.11
|
||
into: staging-next-25.11
|
||
- from: staging-next-25.11
|
||
into: staging-25.11
|
||
- from: release-25.11
|
||
into: staging-nixos-25.11
|
||
- from: release-26.05
|
||
into: staging-next-26.05
|
||
- from: staging-next-26.05
|
||
into: staging-26.05
|
||
- from: release-26.05
|
||
into: staging-nixos-26.05
|
||
- name: merge-base(master,staging) → haskell-updates
|
||
from: master staging
|
||
into: haskell-updates
|
||
uses: ./.github/workflows/periodic-merge.yml
|
||
with:
|
||
from: ${{ matrix.pairs.from }}
|
||
into: ${{ matrix.pairs.into }}
|
||
name: ${{ matrix.pairs.name || format('{0} → {1}', matrix.pairs.from, matrix.pairs.into) }}
|
||
secrets:
|
||
NIXPKGS_CI_APP_PRIVATE_KEY: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }}
|
||
|
||
# Resets the target branch of the current haskell-updates PR.
|
||
# This makes GitHub hide all the commits that are already part of staging and gives us a much clearer PR view.
|
||
haskell-updates:
|
||
needs: periodic-merge
|
||
runs-on: ubuntu-slim
|
||
permissions:
|
||
pull-requests: write
|
||
steps:
|
||
- name: Find PR and update target branch
|
||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||
with:
|
||
script: |
|
||
// There will at most be a single haskell-updates PR anyway, so no need to paginate.
|
||
await Promise.all(
|
||
(
|
||
await github.rest.pulls.list({
|
||
...context.repo,
|
||
state: 'open',
|
||
head: `${context.repo.owner}:haskell-updates`,
|
||
})
|
||
).data.map((pr) =>
|
||
github.rest.pulls.update({
|
||
...context.repo,
|
||
pull_number: pr.number,
|
||
// Just updating to the same branch to trigger a UI update.
|
||
// This is staging most of the time, but could be staging-next in rare cases.
|
||
base: pr.base.ref,
|
||
}),
|
||
),
|
||
)
|