Add sync-upstream workflows #13
Workflow file for this run
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
name: Sync with Upstream (create) | |
on: | |
schedule: | |
- cron: "0 0 1 * *" # Runs at 00:00 on the first day of every month | |
workflow_dispatch: | |
# TODO: Remove this trigger once the workflow is ready | |
pull_request: | |
branches: | |
- main | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
sync: | |
runs-on: ubuntu-latest | |
# TODO: Remove this condition once the workflow is ready | |
if: github.event.pull_request.user.login != 'github-actions[bot]' | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
fetch-depth: 0 | |
ref: main | |
- name: Create new branch from main | |
run: | | |
git checkout -b sync-upstream-${{ github.run_number }} | |
- name: Configure Git | |
run: | | |
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
#TODO: Remove this step once the workflow is ready | |
- name: Merge the feature branch for the workflow | |
run: | | |
git merge --squash origin/gc/sync-upstream | |
git commit -m "Add sync-upstream.yml workflow (#7)" | |
- name: Pull changes from upstream and merge | |
id: merge | |
run: | | |
git remote add upstream https://github.com/actions/runner-images.git | |
git fetch upstream | |
SHA="$(git rev-parse upstream/main)" | |
echo "upstream-sha=$SHA" >> $GITHUB_OUTPUT | |
if ! git merge -m "Merge commit '$SHA' from actions/runner-images" "${SHA}"; then | |
echo "conflicts=true" >> $GITHUB_OUTPUT | |
fi | |
- name: Handle conflicts with empty commit | |
if: steps.merge.outputs.conflicts == 'true' | |
run: | | |
git merge --abort | |
git commit --allow-empty -m "Empty commit due to merge conflicts" | |
- name: Push changes to new branch | |
run: | | |
git push --force-with-lease origin sync-upstream-${{ github.run_number }} | |
- name: Set PR body | |
id: pr-body | |
run: | | |
PR_BODY_CONFLICTS='# :warning: UPSTREAM CHANGES. DO NOT MERGE MANUALLY. | |
This automated pull request was created by the [Sync from Upstream (create)](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) workflow. | |
There are updates from upstream to be merged, but our local changes conflict with the upstream changes so we need to resolve the merge manually. | |
To merge the changes manually, use the following commands: | |
``` | |
# Checkout the branch | |
git checkout sync-upstream-${{ github.run_number }} | |
# Reset the branch to main | |
git reset --hard origin/main | |
# Pull changes from upstream | |
git remote add upstream https://github.com/actions/runner-images.git | |
git fetch upstream | |
# Merge the changes | |
git merge -m "Merge commit '${{ steps.merge.outputs.upstream-sha }}' from actions/runner-images" ${{ steps.merge.outputs.upstream-sha }} | |
# Solve the conflicts and continue the merge | |
git merge --continue | |
# Push the changes to the branch | |
git push --force-with-lease origin sync-upstream-${{ github.run_number }} | |
``` | |
Once you have merged the changes successfully, please get somebody else to review and approve this pull request. The bot will then handle merging the changes to `main`. Do not merge manually. | |
### :x: CONFLICTS DURING MERGE. PLEASE HANDLE THE CONFLICTS APPROPRIATELY.' | |
PR_BODY_NO_CONFLICTS='# :warning: UPSTREAM CHANGES. DO NOT MERGE MANUALLY. | |
This is an automated PR to merge updates from upstream. Please review the changes and approve. The bot will be responsible for pushing the changes to main. | |
This pull request was created by the [Sync from Upstream (create)](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) workflow. | |
### :white_check_mark: NO CONFLICTS DURING MERGE.' | |
echo 'body<<EOF' >> $GITHUB_OUTPUT | |
if [ "${{ steps.merge.outputs.conflicts }}" == "true" ]; then | |
echo "$PR_BODY_CONFLICTS" >> $GITHUB_OUTPUT | |
else | |
echo "$PR_BODY_NO_CONFLICTS" >> $GITHUB_OUTPUT | |
fi | |
echo EOF >> $GITHUB_OUTPUT | |
# TODO: Change base branch once the workflow is ready | |
- name: Create pull request | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
gh pr create --title 'Update from upstream' \ | |
--body '${{ steps.pr-body.outputs.body }}' \ | |
--base gc/test --head sync-upstream-${{ github.run_number }} \ | |
--repo ${{ github.repository }} \ | |
|| \ | |
gh pr edit sync-upstream-${{ github.run_number }} \ | |
--repo ${{ github.repository }} \ | |
--body '${{ steps.pr-body.outputs.body }}' |