Skip to content

Add sync-upstream workflows #12

Add sync-upstream workflows

Add sync-upstream workflows #12

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 }}'