Skip to content

Commit 0cce31b

Browse files
committed
build: add workflows for rebasing and merging changes to PRs
1 parent 35d6c55 commit 0cce31b

File tree

2 files changed

+230
-0
lines changed

2 files changed

+230
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#/
2+
# @license Apache-2.0
3+
#
4+
# Copyright (c) 2024 The Stdlib Authors.
5+
#
6+
# Licensed under the Apache License, Version 2.0 (the "License");
7+
# you may not use this file except in compliance with the License.
8+
# You may obtain a copy of the License at
9+
#
10+
# http://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
#/
18+
19+
# Workflow name:
20+
name: pr_merge_develop
21+
22+
# Workflow triggers:
23+
on:
24+
25+
# Allow the workflow to be triggered by other workflows
26+
workflow_call:
27+
# Define the input parameters for the workflow:
28+
inputs:
29+
pull_request_number:
30+
description: 'PR number'
31+
required: true
32+
type: number
33+
34+
# Define the secrets accessible by the workflow:
35+
secrets:
36+
STDLIB_BOT_GITHUB_TOKEN:
37+
description: 'GitHub token for stdlb-bot'
38+
required: true
39+
REPO_GITHUB_TOKEN:
40+
description: 'GitHub token for accessing the repository'
41+
required: true
42+
STDLIB_BOT_GPG_PRIVATE_KEY:
43+
description: 'GPG private key for stdlb-bot'
44+
required: true
45+
STDLIB_BOT_GPG_PASSPHRASE:
46+
description: 'GPG passphrase for stdlb-bot'
47+
required: true
48+
49+
# Workflow jobs:
50+
jobs:
51+
merge:
52+
# Define a display name:
53+
name: 'Merge Develop into PR Branch'
54+
55+
# Define the type of virtual host machine:
56+
runs-on: ubuntu-latest
57+
58+
# Define the job's steps:
59+
steps:
60+
# Get PR details:
61+
- name: 'Get PR details'
62+
id: pr-details
63+
run: |
64+
pr_response=$(curl -s \
65+
-H "Accept: application/vnd.github.v3+json" \
66+
-H "Authorization: Bearer ${{ secrets.STDLIB_BOT_GITHUB_TOKEN }}" \
67+
"https://api.github.com/repos/stdlib-js/stdlib/pulls/${{ inputs.pull_request_number }}")
68+
69+
# Escape control characters:
70+
pr_response=$(echo "$pr_response" | tr -d '\000-\031')
71+
72+
# Extract the needed details:
73+
pr_branch=$(echo "$pr_response" | jq -r '.head.ref')
74+
pr_repo_full_name=$(echo "$pr_response" | jq -r '.head.repo.full_name')
75+
76+
echo "branch=$pr_branch" >> $GITHUB_OUTPUT
77+
echo "repository=$pr_repo_full_name" >> $GITHUB_OUTPUT
78+
79+
# Checkout the repository:
80+
- name: 'Checkout repository'
81+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
82+
with:
83+
ref: ${{ steps.pr-details.outputs.branch }}
84+
repository: ${{ steps.pr-details.outputs.repository }}
85+
token: ${{ secrets.REPO_GITHUB_TOKEN }}
86+
fetch-depth: 0
87+
88+
# Disable Git hooks:
89+
- name: 'Disable Git hooks'
90+
run: |
91+
rm -rf .git/hooks
92+
93+
# Import GPG key to sign commits:
94+
- name: 'Import GPG key to sign commits'
95+
# Pin action to full length commit SHA
96+
uses: crazy-max/ghaction-import-gpg@cb9bde2e2525e640591a934b1fd28eef1dcaf5e5 # v6.2.0
97+
with:
98+
gpg_private_key: ${{ secrets.STDLIB_BOT_GPG_PRIVATE_KEY }}
99+
passphrase: ${{ secrets.STDLIB_BOT_GPG_PASSPHRASE }}
100+
git_user_signingkey: true
101+
git_commit_gpgsign: true
102+
103+
# Merge the develop branch into the PR branch:
104+
- name: 'Merge develop branch'
105+
env:
106+
REPO_GITHUB_TOKEN: ${{ secrets.REPO_GITHUB_TOKEN }}
107+
USER_NAME: stdlb-bot
108+
BRANCH_NAME: ${{ steps.pr-details.outputs.branch }}
109+
REPO_NAME: ${{ steps.pr-details.outputs.repository }}
110+
run: |
111+
git config --local user.email "82920195+stdlib-bot@users.noreply.github.com"
112+
git config --local user.name "stdlib-bot"
113+
git fetch origin develop:develop
114+
git merge develop --no-edit
115+
git push "https://$USER_NAME:$REPO_GITHUB_TOKEN@github.com/$REPO_NAME.git" $BRANCH_NAME
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#/
2+
# @license Apache-2.0
3+
#
4+
# Copyright (c) 2024 The Stdlib Authors.
5+
#
6+
# Licensed under the Apache License, Version 2.0 (the "License");
7+
# you may not use this file except in compliance with the License.
8+
# You may obtain a copy of the License at
9+
#
10+
# http://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
#/
18+
19+
# Workflow name:
20+
name: pr_rebase_develop
21+
22+
# Workflow triggers:
23+
on:
24+
25+
# Allow the workflow to be triggered by other workflows
26+
workflow_call:
27+
# Define the input parameters for the workflow:
28+
inputs:
29+
pull_request_number:
30+
description: 'PR number'
31+
required: true
32+
type: number
33+
34+
# Define the secrets accessible by the workflow:
35+
secrets:
36+
STDLIB_BOT_GITHUB_TOKEN:
37+
description: 'GitHub token for stdlb-bot'
38+
required: true
39+
REPO_GITHUB_TOKEN:
40+
description: 'GitHub token for accessing the repository'
41+
required: true
42+
STDLIB_BOT_GPG_PRIVATE_KEY:
43+
description: 'GPG private key for stdlb-bot'
44+
required: true
45+
STDLIB_BOT_GPG_PASSPHRASE:
46+
description: 'GPG passphrase for stdlb-bot'
47+
required: true
48+
49+
# Workflow jobs:
50+
jobs:
51+
rebase:
52+
# Define a display name:
53+
name: 'Rebase PR Branch onto Develop'
54+
55+
# Define the type of virtual host machine:
56+
runs-on: ubuntu-latest
57+
58+
# Define the job's steps:
59+
steps:
60+
# Get PR details:
61+
- name: 'Get PR details'
62+
id: pr-details
63+
run: |
64+
pr_response=$(curl -s \
65+
-H "Accept: application/vnd.github.v3+json" \
66+
-H "Authorization: Bearer ${{ secrets.STDLIB_BOT_GITHUB_TOKEN }}" \
67+
"https://api.github.com/repos/stdlib-js/stdlib/pulls/${{ inputs.pull_request_number }}")
68+
69+
# Escape control characters:
70+
pr_response=$(echo "$pr_response" | tr -d '\000-\031')
71+
72+
# Extract the needed details:
73+
pr_branch=$(echo "$pr_response" | jq -r '.head.ref')
74+
pr_repo_full_name=$(echo "$pr_response" | jq -r '.head.repo.full_name')
75+
76+
echo "branch=$pr_branch" >> $GITHUB_OUTPUT
77+
echo "repository=$pr_repo_full_name" >> $GITHUB_OUTPUT
78+
79+
# Checkout the repository:
80+
- name: 'Checkout repository'
81+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
82+
with:
83+
ref: ${{ steps.pr-details.outputs.branch }}
84+
repository: ${{ steps.pr-details.outputs.repository }}
85+
token: ${{ secrets.REPO_GITHUB_TOKEN }}
86+
fetch-depth: 0
87+
88+
# Disable Git hooks:
89+
- name: 'Disable Git hooks'
90+
run: |
91+
rm -rf .git/hooks
92+
93+
# Import GPG key to sign commits:
94+
- name: 'Import GPG key to sign commits'
95+
# Pin action to full length commit SHA
96+
uses: crazy-max/ghaction-import-gpg@cb9bde2e2525e640591a934b1fd28eef1dcaf5e5 # v6.2.0
97+
with:
98+
gpg_private_key: ${{ secrets.STDLIB_BOT_GPG_PRIVATE_KEY }}
99+
passphrase: ${{ secrets.STDLIB_BOT_GPG_PASSPHRASE }}
100+
git_user_signingkey: true
101+
git_commit_gpgsign: true
102+
103+
# Rebase on develop branch:
104+
- name: 'Rebase on develop branch'
105+
env:
106+
REPO_GITHUB_TOKEN: ${{ secrets.REPO_GITHUB_TOKEN }}
107+
USER_NAME: stdlb-bot
108+
BRANCH_NAME: ${{ steps.pr-details.outputs.branch }}
109+
REPO_NAME: ${{ steps.pr-details.outputs.repository }}
110+
run: |
111+
git config --local user.email "82920195+stdlib-bot@users.noreply.github.com"
112+
git config --local user.name "stdlib-bot"
113+
git fetch origin develop:develop
114+
git rebase develop
115+
git push --force-with-lease "https://$USER_NAME:$REPO_GITHUB_TOKEN@github.com/$REPO_NAME.git" $BRANCH_NAME

0 commit comments

Comments
 (0)