forked from kumahq/kuma
-
Notifications
You must be signed in to change notification settings - Fork 0
81 lines (76 loc) · 3.77 KB
/
ci-stability.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
name: Check CI stability for PRs with "ci/verify-stability" or "ci/verify-stability-merge-master" label
on:
schedule:
# Monday to Friday: Every 2 hours from 7 PM to 7 AM CEST
- cron: "0 17 * * 1-5"
- cron: "0 19 * * 1-5"
- cron: "0 21 * * 1-5"
- cron: "0 23 * * 1-5"
- cron: "0 1 * * 2-6"
- cron: "0 3 * * 2-6"
- cron: "0 5 * * 2-6"
# Saturday and Sunday: Every 2 hours all day
- cron: "0 */2 * * 6,0"
workflow_dispatch: # Allows manual trigger from GitHub Actions UI
env:
GH_USER: "github-actions[bot]"
GH_EMAIL: "<41898282+github-actions[bot]@users.noreply.github.com>"
jobs:
trigger-ci:
runs-on: ubuntu-latest
steps:
- name: Generate GitHub app token
id: github-app-token
uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ steps.github-app-token.outputs.token }}
- name: Get open pull requests and save to file
run: |
gh pr list --json number,labels > open_prs.json
env:
GITHUB_TOKEN: ${{ steps.github-app-token.outputs.token }}
- name: Process PRs
id: process_prs
run: |
cat open_prs.json
pr_numbers_with_verify_stability=$(jq -r '.[] | select(.labels[]?.name == "ci/verify-stability") | .number' open_prs.json)
pr_numbers_with_verify_stability_merge_master=$(jq -r '.[] | select(.labels[]?.name == "ci/verify-stability-merge-master") | .number' open_prs.json)
echo "PRs with 'ci/verify-stability' label: $pr_numbers_with_verify_stability"
echo "PRs with 'ci/verify-stability-merge-master' label: $pr_numbers_with_verify_stability_merge_master"
echo "pr_numbers_with_verify_stability=$pr_numbers_with_verify_stability" >> $GITHUB_OUTPUT
echo "pr_numbers_with_verify_stability_merge_master=$pr_numbers_with_verify_stability_merge_master" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ steps.github-app-token.outputs.token }}
- name: Merge master branch (if applicable) and push a single commit
if: steps.process_prs.outputs.pr_numbers_with_verify_stability != ''
run: |
for pr_number in ${{ steps.process_prs.outputs.pr_numbers_with_verify_stability }}; do
current_datetime=$(date +"%Y-%m-%d %H:%M:%S")
echo "Processing PR #$pr_number"
# Fetch PR details to get the base branch (original branch name)
pr_branch=$(gh pr view $pr_number --json headRefName --jq '.headRefName')
echo "The original branch for PR #$pr_number is $pr_branch"
git fetch origin pull/$pr_number/head:$pr_branch
git checkout $pr_branch
git config user.name "${GH_USER}"
git config user.email "${GH_EMAIL}"
# Check if the PR needs to merge with master
if echo "${{ steps.process_prs.outputs.pr_numbers_with_verify_stability_merge_master }}" | grep -wq "$pr_number"; then
echo "Merging master into PR #$pr_number"
git fetch origin master
git merge origin/master --no-ff --no-commit
git commit --allow-empty -m "Merge master into PR #$pr_number"
fi
# Commit an empty commit to trigger the CI
echo "Pushing empty commit to trigger CI for PR #$pr_number on $current_datetime"
git commit --allow-empty -m "Trigger CI for PR #$pr_number on $current_datetime"
git push origin $pr_branch
done
env:
GITHUB_TOKEN: ${{ steps.github-app-token.outputs.token }}