Sync from fork #23479
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 from fork | |
on: | |
schedule: | |
# * is a special character in YAML so you have to quote this string | |
- cron: "0 * * * *" | |
workflow_dispatch: | |
jobs: | |
check-for-changes: | |
runs-on: ubuntu-latest | |
env: | |
FILES_TO_CHECK: "assets/assets.json|assets/resources/scriptlets.js|web_accessible_resources/|js/redirect-resources.js" | |
UPSTREAM_URL: "https://github.com/gorhill/ublock.git" | |
outputs: | |
changes: ${{ steps.git-check.outputs.changes-present }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Fetch release version | |
run: | | |
git remote add upstream ${UPSTREAM_URL} | |
git fetch upstream && git diff --name-only --diff-filter AM HEAD..remotes/upstream/master > updatedfiles.txt | |
- name: Check for modified files | |
id: git-check | |
run: echo changes-present=$(if grep -qE "${FILES_TO_CHECK}" updatedfiles.txt; then echo 'true'; else echo 'false'; fi) >> $GITHUB_OUTPUT | |
- name: Show files | |
run: cat updatedfiles.txt | |
- name: Have files changed | |
if: steps.check-for-changes.outputs.changes-present == 'false' | |
run: echo "No changes needed to be synchronised" | |
sync: | |
if: ${{ needs.check-for-changes.outputs.changes == 'true' }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
needs: check-for-changes | |
runs-on: ubuntu-latest | |
steps: | |
- name: Create mirror branch | |
run: | | |
git clone "https://github.com/gorhill/${GITHUB_REPOSITORY#$GITHUB_REPOSITORY_OWNER/}" | |
cd ${GITHUB_REPOSITORY#$GITHUB_REPOSITORY_OWNER/} | |
git checkout -b mirror | |
git remote add github "https://$GITHUB_ACTOR:[email protected]/$GITHUB_REPOSITORY.git" | |
git push -u github mirror | |
create-pr: | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
needs: sync | |
runs-on: ubuntu-latest | |
steps: | |
- name: Create PR | |
run: | | |
gh pr create --title "Fork Sync: Update from parent repository" --body "This PR was automatically created by a GitHub Action triggered by a cron schedule. Please review the changes and merge if appropriate." --base master --head mirror --repo ${GITHUB_REPOSITORY} || true | |
update-pr: | |
needs: create-pr | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
UPSTREAM_URL: "https://github.com/gorhill/ublock.git" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Collate Changes | |
run: | | |
git remote add upstream ${UPSTREAM_URL} | |
git fetch upstream | |
FILES_TO_CHECK=("assets/assets.json" "assets/resources/scriptlets.js" "src/web_accessible_resources" "src/js/redirect-resources.js") | |
for files in ${FILES_TO_CHECK[*]}; do | |
echo '```diff' >> changes.txt; | |
git diff --diff-filter AM HEAD..remotes/upstream/master -- $files >> changes.txt; | |
echo -e '```\n' >> changes.txt; | |
done; | |
git remote remove upstream | |
- name: Set PR Number to env | |
run: echo "PR_NUMBER=`gh pr list | grep 'Fork Sync' | awk {'print $1'}`" >> $GITHUB_ENV | |
- name: Update PR Description | |
run: gh pr edit $PR_NUMBER -b "`cat "changes.txt"`" | |
- name: Run puLL-Merge | |
uses: brave/pull-merge@main | |
with: | |
owner: ${{ github.repository_owner }} | |
repo: ${{ github.event.repository.name }} | |
prnum: ${{ env.PR_NUMBER }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} | |
filterdiff_args: --include=**/assets/assets.json --include=**/assets/resources/scriptlets.js --include=**/web_accessible_resources/ --include=**/js/redirect-resources.js | |
on-failure: | |
runs-on: ubuntu-latest | |
if: ${{ always() && (needs.sync.result == 'failure' || needs.create-pr.result == 'failure' || needs.update-pr.result == 'failure') }} | |
needs: | |
- sync | |
- create-pr | |
- update-pr | |
steps: | |
- uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
with: | |
author_name: "Github Actions" | |
status: failure | |
fields: repo,message,commit,author,eventName,ref,workflow,pullRequest |