-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[workflow/rebase-on-upstream] Avoid moving nightly-specific commits
* replace rebase-on-upstream workflow action from ytdl-patched with local workflow * rebase upstream onto nightly, so appending new upstream commits * local workflow also avoids deprecated 3rd-party actions.
- Loading branch information
Showing
2 changed files
with
71 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Use git rebase to append new upstream commits | ||
# inverted logic from imba-tjd/rebase-on-upstream | ||
name: Reverse Rebase from Upstream | ||
on: | ||
workflow_call: | ||
inputs: | ||
upstream: | ||
type: string | ||
description: <user>/<repo> or the full HTTP URL | ||
required: false | ||
branch: | ||
type: string | ||
description: The upstream branch that is rebased from | ||
required: false | ||
default: master | ||
push: | ||
type: boolean | ||
description: Do the force push in this action | ||
required: false | ||
default: true | ||
token: | ||
type: string | ||
description: GitHub Access Token | ||
required: true | ||
default: ${{ github.token }} | ||
|
||
permissions: | ||
contents: write | ||
|
||
jobs: | ||
rebaser: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Main | ||
shell: bash | ||
run: | | ||
set -ex | ||
# Starting with current git branch (TARGET), get the UPSTREAM branch | ||
# as a temporary branch; rebase TARGET onto it; if that differs from TARGET, | ||
# make it the TARGET and push the result, if the remote hasn't changed. | ||
# Effect: commits specific to the TARGET repo stay in place; new UPSTREAM | ||
# commits are appended | ||
TARGET_SHA=$(git rev-parse HEAD) | ||
TARGET=$(git name-rev --name-only "$TARGET_SHA") | ||
if [ -z "$TARGET" ]; then echo "Can't find current branch" >&2; exit 1; fi | ||
UPSTREAM=${{ inputs.upstream }} | ||
if [ -z "$UPSTREAM" ]; then | ||
echo "${{ inputs.token }}" | gh auth login --with-token | ||
UPSTREAM=$(gh api repos/:owner/:repo --jq .parent.full_name | ||
if [ -z "$UPSTREAM" ]; then echo "Can't find upstream" >&2 && exit 1; fi | ||
fi | ||
if ! echo "$UPSTREAM" | grep -E '^(http|git@)'; then | ||
UPSTREAM=https://github.com/$UPSTREAM.git | ||
fi | ||
git remote add -f -t "${{ inputs.branch }}" --tags upstream "$UPSTREAM" | ||
REBASE=${TARGET}-rebase | ||
trap '{ git checkout "$TARGET"; git branch -D "$REBASE"; }' EXIT | ||
git checkout -B "$REBASE" --no-track "upstream/${{ inputs.branch }}" | ||
git config --local user.email "rebaser+github-actions[bot]@users.noreply.github.com" | ||
git config --local user.name "GitHub Actions" | ||
# rebase new UPSTREAM commits onto TARGET | ||
UPSTREAM_SHA=$(git rev-parse HEAD) | ||
git rebase "refs/heads/${TARGET}" | ||
if [ -n "$(git log --max-count 1 --oneline "HEAD...${TARGET}")" ]; then | ||
git branch -M "$REBASE" "$TARGET" | ||
if [ "${{ inputs.push }}" = true ]; then | ||
# rebase changed TARGET: push if remote TARGET unchanged | ||
git push origin --force-with-lease="${TARGET}" | ||
fi | ||
fi |