forked from Orange-OpenSource/hurl
-
Notifications
You must be signed in to change notification settings - Fork 0
133 lines (123 loc) · 6.13 KB
/
update-crates.yml
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
name: update-crates
on:
schedule:
- cron: "0 8 * * *"
workflow_dispatch:
concurrency: update-crates-${{ github.ref }}
jobs:
update-crates:
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
GITHUB_TOKEN: ${{ secrets.HURL_BOT_TOKEN }}
REPO: ${{ github.repository }}
BOT_UPDATE_BRANCHE_NAME: "bot/update-crates"
name: update-crates
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: master
- name: Crates update
run: |
UPDATE_CRATES_OUTPUT="/tmp/update.output"
echo "UPDATE_CRATES_OUTPUT=${UPDATE_CRATES_OUTPUT}" | tee -a "${GITHUB_ENV}"
bin/update_crates.sh 2>&1 > "${UPDATE_CRATES_OUTPUT}" && crates_update_exit_code=0 || crates_update_exit_code=$?
if [ ${crates_update_exit_code} -eq 0 ] ; then
UPDATED_CRATES_COUNT=$(grep -v "crates.io index" "${UPDATE_CRATES_OUTPUT}" | (grep -cE "updated to |.*Updating.*->.*" || true) )
echo "UPDATED_CRATES_COUNT=${UPDATED_CRATES_COUNT}" | tee -a "${GITHUB_ENV}"
echo " - ✅ Update crates succeeds with ${UPDATED_CRATES_COUNT} crates updated."
else
echo " - ❌ A problem occurs updating crates. Please refer to ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} logs."
exit 1
fi
- name: Get actual pull request id
run: |
ACTUAL_PR_NUMBER=$(gh pr list --repo "${REPO}" --head "${BOT_UPDATE_BRANCHE_NAME}" --state "open" --json number --jq .[].number)
ACTUAL_PR_NUMBER=${ACTUAL_PR_NUMBER:-0}
echo "ACTUAL_PR_NUMBER=${ACTUAL_PR_NUMBER}" | tee -a "${GITHUB_ENV}"
if [ ${ACTUAL_PR_NUMBER} -eq 0 ] ; then
echo " - ✅ There is no pull request for crates update."
else
echo " - ✅ Actual pull request number is ${ACTUAL_PR_NUMBER}."
fi
- name: Close actual pull request
if: env.ACTUAL_PR_NUMBER != 0
run: |
if [ ${UPDATED_CRATES_COUNT} -eq 0 ] ; then
comment="✅ Pull request n°${ACTUAL_PR_NUMBER} closed because crates are up to date on master branch."
else
comment="✅ Pull request n°${ACTUAL_PR_NUMBER} closed before opening new one with new updated crates list."
fi
gh pr close "${ACTUAL_PR_NUMBER}" --comment "${comment}" --delete-branch && gh_exit_code=0 || gh_exit_code=$?
if [ ${gh_exit_code} -eq 0 ] ; then
echo " - ${comment}"
else
comment="❌ A problem occurs when bot attempts to close PR n°${ACTUAL_PR_NUMBER}."
gh pr comment "${ACTUAL_PR_NUMBER}" --body "${comment} Please refer to ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} logs."
echo " - ${comment}"
exit 1
fi
- name: Init git bot context
uses: crazy-max/ghaction-import-gpg@v5
with:
gpg_private_key: ${{ secrets.HURL_BOT_GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.HURL_BOT_GPG_PRIVATE_KEY_PASSPHRASE }}
git_committer_name: "hurl-bot"
git_committer_email: "[email protected]"
git_user_signingkey: true
git_commit_gpgsign: true
- name: Push updates to branch
if: env.UPDATED_CRATES_COUNT != 0
run: |
git checkout -b "${BOT_UPDATE_BRANCHE_NAME}"
git commit -am "Update crates"
git push --set-upstream origin "${BOT_UPDATE_BRANCHE_NAME}" && git_exit_code=0 || git_exit_code=$?
if [ ${git_exit_code} -eq 0 ] ; then
echo " - ✅ push crates update to ${BOT_UPDATE_BRANCHE_NAME} succeeds."
else
echo " - ❌ A problem occurs when attempting to push crates update to origin/${BOT_UPDATE_BRANCHE_NAME}."
exit 1
fi
branch_exists=$(git ls-remote | (grep -c "${BOT_UPDATE_BRANCHE_NAME}" || true))
if [ ${branch_exists} -eq 1 ] ; then
echo " - ✅ The origin/${BOT_UPDATE_BRANCHE_NAME} now branch exists on remote."
else
echo " - ❌ Git push command succeeds but origin/${BOT_UPDATE_BRANCHE_NAME} still does not exist on remote."
exit 1
fi
- name: Create new pull request
if: env.UPDATED_CRATES_COUNT != 0
run: |
GITHUB_TOKEN=${{ secrets.HURL_BOT_TOKEN }}
gh pr create --fill --base master --head "${BOT_UPDATE_BRANCHE_NAME}" && gh_exit_code=0 || gh_exit_code=$?
if [ ${gh_exit_code} -eq 0 ] ; then
NEW_PR_NUMBER=$(gh pr list --repo "${REPO}" --head "${BOT_UPDATE_BRANCHE_NAME}" --state "open" --json number --jq .[].number)
echo " - ✅ Creation of pull request n°${NEW_PR_NUMBER} succeeds."
else
echo " - ❌ A problem occurs when attempting to create new pull request."
exit 1
fi
pr_comment_file="comment_file.md"
(grep -vE "newest|crates.io index" "${UPDATE_CRATES_OUTPUT}" || true) | \
tr -s ' ' | \
sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" | \
sed "s/Updating //g" | \
sed "s/: updated to / -> /g" | \
sed "s/^=>/###/g" | \
sed "s/^ /- /g" > "${pr_comment_file}"
pr_comment="$(cat "${pr_comment_file}")"
gh pr comment "${NEW_PR_NUMBER}" --body "${pr_comment}" && gh_exit_code=0 || gh_exit_code=$?
if [ ${gh_exit_code} -eq 0 ] ; then
echo " - ✅ Comment updates list to pull request n° ${NEW_PR_NUMBER} succeeds."
else
echo " - ❌ A problem occurs when attempting to create updates list comment into new pull request n°${NEW_PR_NUMBER}."
exit 1
fi
gh pr edit "${NEW_PR_NUMBER}" --add-label "bot,dependencies" && gh_exit_code=0 || gh_exit_code=$?
if [ ${gh_exit_code} -eq 0 ] ; then
echo " - ✅ Adding Label to pull request n° ${NEW_PR_NUMBER} succeeds."
else
echo " - ❌ A problem occurs when attempting to add labels into new pull request n°${NEW_PR_NUMBER}."
exit 1
fi