Sync PocketMine-MP primary branches #34
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 PocketMine-MP primary branches | |
on: | |
workflow_dispatch: | |
inputs: | |
branch: | |
description: 'Branch to update' | |
required: true | |
type: choice | |
options: | |
- "*" | |
- minor-next | |
- major-next | |
schedule: | |
- cron: "0 0 * * *" | |
jobs: | |
cron-keepalive: | |
name: Prevent GitHub from disabling cron workflow | |
runs-on: ubuntu-latest | |
permissions: | |
actions: write | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: gautamkrishnar/keepalive-workflow@v2 | |
merge: | |
name: Sync branches | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get sync option | |
id: choice | |
run: | | |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then | |
echo "branch=${{ github.event.inputs.branch }}" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.event_name }}" == "schedule" ]]; then | |
echo "branch=*" >> $GITHUB_OUTPUT | |
else | |
echo "::error Unexpected event type ${{ github.event_name }}" | |
exit 1 | |
fi | |
- name: Generate access token | |
id: token | |
uses: actions/create-github-app-token@v1 | |
with: | |
app-id: ${{ vars.RESTRICTED_ACTIONS_APP_ID }} | |
private-key: ${{ secrets.RESTRICTED_ACTIONS_APP_KEY }} | |
owner: ${{ github.repository_owner }} | |
repositories: PocketMine-MP | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ github.repository_owner }}/PocketMine-MP # to allow testing on forks without editing the workflow | |
fetch-depth: 0 | |
token: ${{ steps.token.outputs.token }} | |
- name: Get GitHub App User ID | |
id: get-user-id | |
run: echo "user-id=$(gh api "/users/${{ steps.token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" | |
env: | |
GH_TOKEN: ${{ steps.token.outputs.token }} | |
- name: Set Git config | |
run: | | |
git config user.name '${{ steps.token.outputs.app-slug }}[bot]' | |
git config user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.token.outputs.app-slug }}[bot]@users.noreply.github.com' | |
- name: Merge "stable" into "minor-next" and push changes | |
if: contains(fromJSON('["minor-next", "*"]'), steps.choice.outputs.branch) | |
run: | | |
LOWER_BRANCH="stable" | |
TARGET_BRANCH="minor-next" | |
git checkout -f "$TARGET_BRANCH" | |
git pull --no-commit --ff origin "$LOWER_BRANCH" | |
git commit \ | |
-m "Merge '$LOWER_BRANCH' into '$TARGET_BRANCH'" \ | |
-m "Automatic merge performed by: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ | |
|| true # suppress error in case of fast-forward merge | |
git push | |
- name: Merge "minor-next" into "major-next" and push changes | |
if: contains(fromJSON('["major-next", "*"]'), steps.choice.outputs.branch) | |
run: | | |
LOWER_BRANCH="minor-next" | |
TARGET_BRANCH="major-next" | |
git checkout -f "$TARGET_BRANCH" | |
git pull --no-commit --ff origin "$LOWER_BRANCH" | |
git commit \ | |
-m "Merge '$LOWER_BRANCH' into '$TARGET_BRANCH'" \ | |
-m "Automatic merge performed by: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ | |
|| true # suppress error in case of fast-forward merge | |
git push |