forked from obytes/react-native-template-obytes
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
136 additions
and
39 deletions.
There are no files selected for viewing
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# 🔗 Links: | ||
# Source file: https://github.com/rootstrap/react-native-template/blob/master/.github/workflows/sync-with-upstream.yml | ||
|
||
# ✍️ Description: | ||
# This workflow is used to keep the template up to date with the another version of the upstream repository. | ||
|
||
# 🚨 GITHUB SECRETS REQUIRED: | ||
# - UPDATE_FROM_UPSTREAM_PAT: A fine-grained Personal Access Token. | ||
# This token is used to commit and push to the template repository. | ||
# You can generate one from here: https://github.com/settings/tokens?type=beta | ||
# Set the Repository access to "Only select repositories" and select the template repository. | ||
# Set the following Repo permissions: | ||
# - Contents: Read & write (to commit and push the update branch to the template repository) | ||
# - Metadata: Read-only (mandatory by GitHub) | ||
# - Workflows: Read and write (to create, update and delete workflows in the template repository) | ||
# Make sure to add it to the repo secrets with the name UPDATE_FROM_UPSTREAM_PAT: | ||
# - Go to Repository Settings > Secrets and variables > Actions > New repository secret | ||
# - Name: UPDATE_FROM_UPSTREAM_PAT | ||
# - Value: The Personal Access Token you created | ||
|
||
# ℹ️ Environment variables: | ||
# - UPSTREAM_REPOSITORY: Repository to sync with | ||
# - DIFF_EXCLUDED_ROUTES: List of files or directories to exclude from the diff. | ||
# Any changes in these files or directories will be ignored | ||
# and won't be incorporated to the Pull Request. | ||
|
||
name: 🔄 Sync with upstream | ||
|
||
on: | ||
schedule: | ||
- cron: '0 12 * * 1-5' # At 12:00 UTC on every day-of-week from Monday through Friday | ||
workflow_dispatch: | ||
inputs: | ||
upstream-version: | ||
type: string | ||
description: 'Upstream release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release.' | ||
required: false | ||
default: '' | ||
|
||
env: | ||
UPSTREAM_REPOSITORY: obytes/react-native-template-obytes | ||
DIFF_EXCLUDED_ROUTES: | | ||
ios | ||
android | ||
jobs: | ||
sync: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
actions: write | ||
contents: read | ||
pull-requests: write | ||
|
||
steps: | ||
- name: Check if Personal Access Token exists | ||
env: | ||
PAT: ${{ secrets.UPDATE_FROM_UPSTREAM_PAT }} | ||
if: env.PAT == '' | ||
run: | | ||
echo "UPDATE_FROM_UPSTREAM_PAT secret not found. Please create a fine-grained Personal Access Token following the instructions in the workflow file." | ||
exit 1 | ||
- name: Checkout template repository | ||
uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
token: ${{ secrets.UPDATE_FROM_UPSTREAM_PAT }} | ||
- name: Set upstream version to sync with | ||
run: | | ||
if [ -z "${{ inputs.upstream-version }}" ]; then | ||
UPSTREAM_UPDATE_VERSION=$(curl -s https://api.github.com/repos/${{ env.UPSTREAM_REPOSITORY }}/releases/latest | jq '.tag_name' | sed 's/\"//g') | ||
else | ||
UPSTREAM_UPDATE_VERSION=${{ inputs.upstream-version }} | ||
fi | ||
echo $UPSTREAM_UPDATE_VERSION | ||
- name: Check if branch already exists | ||
run: | | ||
git fetch origin | ||
BRANCH_NAME=update-upstream-${{ env.UPSTREAM_UPDATE_VERSION }} | ||
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV | ||
git branch -r | grep -q "origin/$BRANCH_NAME" && echo "BRANCH_EXISTS=true" >> $GITHUB_ENV || echo "BRANCH_EXISTS=false" >> $GITHUB_ENV | ||
- name: Check if PR already exists | ||
run: | | ||
prs=$(gh pr list \ | ||
--head "$BRANCH_NAME" \ | ||
--json title \ | ||
--jq 'length') | ||
if ((prs > 0)); then | ||
echo "PR_EXISTS=true" >> $GITHUB_ENV | ||
else | ||
echo "PR_EXISTS=false" >> $GITHUB_ENV | ||
fi | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
- name: Checkout latest release of upstream | ||
if: ${{ env.BRANCH_EXISTS == 'false' }} | ||
run: | | ||
git remote add upstream https://github.com/${{ env.UPSTREAM_REPOSITORY }}.git | ||
git fetch upstream $UPSTREAM_UPDATE_VERSION | ||
- name: Merge latest release of upstream | ||
if: ${{ env.BRANCH_EXISTS == 'false' }} | ||
run: | | ||
UPSTREAM_UPDATE_VERSION_HASH=$(git rev-parse --short FETCH_HEAD) | ||
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | ||
git config --global user.name "github-actions[bot]" | ||
git merge $UPSTREAM_UPDATE_VERSION_HASH | ||
continue-on-error: true | ||
- name: Remove excluded files from the merge | ||
if: ${{ env.BRANCH_EXISTS == 'false' }} | ||
run: | | ||
for route in $DIFF_EXCLUDED_ROUTES; do | ||
git reset -- $route | ||
done | ||
- name: Commit and push changes to the update branch | ||
if: ${{ env.BRANCH_EXISTS == 'false' }} | ||
run: | | ||
git add . | ||
git commit -m "chore: update upstream to ${{ env.UPSTREAM_UPDATE_VERSION }}" | ||
git checkout -b ${{ env.BRANCH_NAME }} | ||
git push origin ${{ env.BRANCH_NAME }} | ||
git remote rm upstream | ||
echo "BRANCH_EXISTS=true" >> $GITHUB_ENV | ||
- name: 🎉 Create PR with changes | ||
if: ${{ env.BRANCH_EXISTS == 'true' && env.PR_EXISTS == 'false' }} | ||
run: | | ||
gh pr create --title "chore: update upstream to ${{ env.UPSTREAM_UPDATE_VERSION }}" --body "Integrating latest changes from [obytes/react-native-template-obytes@${{ env.UPSTREAM_UPDATE_VERSION }}](https://github.com/obytes/react-native-template-obytes/releases/tag/${{ env.UPSTREAM_UPDATE_VERSION }})" --head ${{ env.BRANCH_NAME }} | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
This file was deleted.
Oops, something went wrong.
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