forked from avocado-framework/autils
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reference: #7 Signed-off-by: Jan Richter <[email protected]>
- Loading branch information
Showing
1 changed file
with
101 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
name: release bot | ||
on: | ||
schedule: | ||
- cron: 0 5 * * 1 | ||
workflow_dispatch: null | ||
jobs: | ||
release-conditions-check: | ||
name: release conditions check | ||
runs-on: ubuntu-20.04 | ||
steps: | ||
- name: Check out repository code | ||
uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
- name: check if relese is needed | ||
run: | | ||
echo 'COMMITS_NUMBER='$(git rev-list $(echo $(git tag --sort=-taggerdate | | ||
head -n 1))..HEAD --count) >> $GITHUB_ENV | ||
if [ $(git rev-list $(echo $(git tag --sort=-taggerdate | head -n 1))..HEAD --count) -lt ${{vars.RELEASE_THRESHOLD}} ]; then | ||
exit 1 | ||
fi | ||
- name: Generate token | ||
id: generate_token | ||
uses: tibdex/github-app-token@021a2405c7f990db57f5eae5397423dcc554159c | ||
with: | ||
app_id: ${{ secrets.MR_AVOCADO_ID }} | ||
installation_id: ${{ secrets.MR_AVOCADO_INSTALLATION_ID }} | ||
private_key: ${{ secrets.MR_AVOCADO_PRIVATE_KEY }} | ||
- name: Get Discussion ID and maintainers | ||
env: | ||
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} | ||
run: | | ||
discussion_data=$(gh api graphql -f query='{ | ||
search(first: 100, query: "repo:richtja/autils is:open category:Release-decision", type: DISCUSSION) { | ||
nodes { | ||
... on Discussion { | ||
id createdAt | ||
} | ||
} | ||
} | ||
}' ) | ||
echo 'DISCUSSION_ID='$(echo $discussion_data | jq .data.search.nodes[0].id) >> $GITHUB_ENV | ||
echo 'NEW_COMMITS='$(git log --since="$(echo $discussion_data | jq .data.search.nodes[0].createdAt)" --pretty=oneline) >> $GITHUB_ENV | ||
usr_names=() | ||
for utils_meta in ./metadata/autils/*/; do | ||
for metadata_file in $utils_meta*.yml; do | ||
usr_names+=("@$(sed -n '/github_usr_name:[[:space:]]*\([^[:space:]]\+\)/{s/github_usr_name:[[:space:]]*//;s/[[:space:]]//g;p;q;}' $metadata_file)") | ||
done | ||
done | ||
echo 'USR_NAMES='$(echo "${usr_names[@]}" | tr ' ' '\n' | sort -u) >> $GITHUB_ENV | ||
- name: Create release discussion | ||
env: | ||
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} | ||
run: | | ||
if [[ "x$DISCUSSION_ID" = "x" ]]; then | ||
gh api graphql -f query='mutation { | ||
createDiscussion(input: { | ||
repositoryId: "R_kgDOIoJP1Q", | ||
categoryId: "DIC_kwDOIoJP1c4CXh5I", | ||
body: "Hello all,\n | ||
Autils reached threshold of 100 commits from the latest release | ||
now we have $COMMITS_NUMBER commits from the latest release. | ||
Therefore, it is time to vote if new release is needed. | ||
Please use :+1: or :-1: for this discussion to vote. | ||
Thank you.\n | ||
This vote is meat only for maintainers: ${USR_NAMES[@]}", | ||
title: "Release decision"}) { | ||
discussion { | ||
id | ||
} | ||
} | ||
} | ||
' | ||
fi | ||
- name: Add comment to discussion | ||
env: | ||
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} | ||
run: | | ||
if [[ "x$DISCUSSION_ID" != "x" ]]; then | ||
gh api graphql -f query='mutation { | ||
addDiscussionComment(input: { | ||
discussionId: $DISCUSSION_ID, | ||
body: "This is a kindly reminder of ongoing release voting. | ||
Please use :+1: or :-1: for this discussion to vote. | ||
Thank you.\n | ||
New commits from the beginning of the voting: $NEW_COMMITS | ||
\nThis vote is meat only for maintainers: ${USR_NAMES[@]}"}) { | ||
comment { | ||
id | ||
} | ||
} | ||
} | ||
' | ||
fi |