diff --git a/.github/workflows/rebase.yaml b/.github/workflows/rebase.yaml new file mode 100644 index 0000000000000..5dce8fe93a5ec --- /dev/null +++ b/.github/workflows/rebase.yaml @@ -0,0 +1,59 @@ +name: Rebase upstream + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" + +permissions: + contents: write + +jobs: + rebase: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + include: + - target: "nixpkgs-unstable" + upstream: "nixpkgs-unstable" + - target: "master" + upstream: "master" + + steps: + - uses: actions/cache@v4 + with: + path: .git + key: ${{ matrix.target }}-git-${{ hashFiles('.git') }} + restore-keys: | + ${{ matrix.target }}-git- + + - uses: actions/checkout@v4 + with: + ref: ${{ matrix.target }} + fetch-depth: 0 + token: ${{ secrets.GH_TOKEN_FOR_UPDATES }} + + - name: git setup + run: | + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + + - name: fetch upstream + run: | + # might already be there if the cache was used + git remote add upstream https://github.com/NixOS/nixpkgs.git || true + git fetch --no-tags --prune --no-recurse-submodules --depth 2000 upstream ${{ matrix.upstream }} + + - name: rebase + run: | + git rebase upstream/${{ matrix.upstream }} + + - name: push + run: | + git push --force-with-lease origin ${{ matrix.target }} + + - name: collect garbage + run: | + git gc