update-crates #42
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: update-crates | |
on: | |
schedule: | |
- cron: "0 3 * * *" | |
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@v4 | |
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=$? | |
cat "${UPDATE_CRATES_OUTPUT}" | |
if [ ${crates_update_exit_code} -eq 0 ] ; then | |
UPDATED_CRATES_COUNT=$(grep -cE "updated to" "${UPDATE_CRATES_OUTPUT}" || 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: "bot@hurl.dev" | |
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 | |
sed -i -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" "${UPDATE_CRATES_OUTPUT}" | |
pr_comment=$(grep -v " newest$" "${UPDATE_CRATES_OUTPUT}" || true) | |
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 |