diff --git a/LICENSE b/LICENSE index f1b3852..74f75fa 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 谭九鼎 +Copyright (c) 2021 IMBA-TJD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..09ba584 --- /dev/null +++ b/Readme.md @@ -0,0 +1,43 @@ +# Rebase Upstream Action + +This Action is suitable if you: + +* are maintaining a fork +* have changes that are not going to be merged into upstream +* want to keep changes based on the latest upstream + +Basically this is doing `git rebase upstream master`. If there are conflicts, it simply fails. + +## Typical usage + +```yml +# .github/workflows/sync.yml +name: Rebase Upstream +on: + schedule: + - cron: "0 0 * * *" + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + with: + fetch-depth: 10 # larger than the number of commits you made + - uses: imba-tjd/rebase-upstream-action@master + id: rebase + with: + upstream: https://github.com//.git + - uses: ad-m/github-push-action@master + if: steps.rebase.outputs.needs-push + with: + force: true + github_token: ${{ github.token }} +``` + +## Comparison + +* tgymnich/fork-sync and apps/pull: I don't want PRs. Besides there is not way to do a `git rebase` on GitHub website +* repo-sync/github-sync: It's not using rebase or merge. It completely mirrors the upstream. And it can't sync current branch +* wei/git-sync: Very complicated and have the same issue as github-sync. After all its aim is "syncing between two independent repo" +* This one: Not widely tested. Use with caution diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..a8d55c7 --- /dev/null +++ b/action.yml @@ -0,0 +1,46 @@ +name: Rebase Upstream +description: Use git rebase to sync with upstream +author: imba-tjd +branding: + icon: git-pull-request + color: red + +inputs: + upstream: + description: The full HTTPS upstream URL. + required: true + branch: + description: The upstream branch that is rebased on. + required: false + default: master + depth: + description: The fetch depth + required: false + default: 100 +outputs: + needs-push: + description: Whether push is needed. + value: ${{ steps.set-output.outputs.needs-push }} +runs: + using: composite + steps: + - run: | + echo adding ${{ inputs.upstream }} && \ + git remote add upstream ${{ inputs.upstream }}; + + echo fetching... && \ + git fetch upstream --depth=${{ inputs.depth }}; + + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"; + git config --local user.name "GitHub Action"; + + echo rebasing... && \ + git rebase upstream/${{ inputs.branch }}; + shell: bash + - id: set-output + shell: bash + run: | + if [ "$(git status | grep diverged)" ]; then + echo push is needed. + echo ::set-output name=needs-push::1 + fi;