Skip to content

Create or update branch and pull request from APG trigger #995

Create or update branch and pull request from APG trigger

Create or update branch and pull request from APG trigger #995

Workflow file for this run

name: Create or update branch and pull request from APG trigger
on:
workflow_dispatch:
inputs:
apg_branch:
description: 'Name of branch to be created'
required: true
apg_sha:
description: 'Commit SHA to look for from source'
required: true
apg_pr_number:
description: 'PR number from aria-practices that triggered this workflow'
required: true
fork_path:
description: 'Available when the triggering PR is from a fork'
required: false
jobs:
pr-create:
runs-on: ubuntu-latest
steps:
- name: Get current job and log url
uses: Tiryoh/gha-jobid-action@v1
id: jobs
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
job_name: pr-create
- uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v4
with:
cache: npm
cache-dependency-path: scripts/pre-build/package-lock.json
- name: Set up Ruby 3.3
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.3
- name: Update git submodules
run: |
git submodule update --recursive --remote
cd _external/aria-practices
if [ -n "${{ github.event.inputs.fork_path }}" ] && [ "${{ github.event.inputs.fork_path }}" != 'false' ]; then
echo "Found fork: ${{ github.event.inputs.fork_path }}"
git remote add fork https://github.com/${{ github.event.inputs.fork_path }}.git
git fetch fork
fi
git checkout ${{ github.event.inputs.apg_sha }}
- name: Switch to and create or update branch
run: |
# switch to branch if exists or create branch
git switch apg/${{ github.event.inputs.apg_branch }} 2>/dev/null || git switch -c apg/${{ github.event.inputs.apg_branch }}
- name: Force rebase the switched branch onto main
run: |
git config --global user.name "w3cgruntbot"
git config --global user.email "[email protected]"
git fetch origin main
git rebase --force-rebase origin/main || true
# Handle cases where the aria-practices submodule has conflicts to be handled;
# _external/data shouldn't have conflicting changes
if [ -d "_external/aria-practices" ] && { [ -f ".git/rebase-apply" ] || [ -d ".git/rebase-merge" ]; }; then
echo "Handling submodule conflicts..."
cd _external/aria-practices
# Resolve the conflict
git fetch origin
git merge origin/main
# Add resolved submodule from project root
cd -
git add _external/aria-practices
# Continue the rebase
GIT_EDITOR=true git rebase --continue || true
# Resolve conflicts for all other conflicting files automatically using 'theirs' from project root
git diff --name-only --diff-filter=U | while read -r file; do
git checkout --theirs "$file"
git add "$file"
done
# Continue the rebase
GIT_EDITOR=true git rebase --continue || true
else
echo "No submodule conflicts detected or no rebase in progress."
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update site files
id: update_site_files
working-directory: ./
run: |
bundle install
npm install -C scripts/pre-build
node ./scripts/pre-build
continue-on-error: true
- name: Commit changed files and submodule updates
if: steps.update_site_files.outcome == 'success'
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: w3cgruntbot
commit_user_email: [email protected]
commit_author: w3cgruntbot <[email protected]>
commit_message: 'chore: Update branch with latest `${{ github.event.inputs.apg_branch }}` changes and submodule updates'
branch: apg/${{ github.event.inputs.apg_branch }}
push_options: '--force'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create or update pull request
working-directory: ./
run: |
set -e
npm install -C scripts/pr-create
node ./scripts/pr-create
env:
GH_TOKEN: ${{ secrets.W3CGRUNTBOT_TOKEN }}
APG_SHA: ${{ github.event.inputs.apg_sha }}
APG_BRANCH: ${{ github.event.inputs.apg_branch }}
APG_PR_NUMBER: ${{ github.event.inputs.apg_pr_number }}
REPO_OWNER: ${{ github.repository_owner }}
OUTCOME: ${{ steps.update_site_files.outcome }}
JOB_ID: ${{ steps.jobs.outputs.job_id }}