Post to zulip if the nightly-testing branch is failing. #8097
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: Post to zulip if the nightly-testing branch is failing. | |
on: | |
workflow_run: | |
workflows: ["ci"] | |
types: | |
- completed | |
jobs: | |
# Whenever `nightly-testing` fails CI, | |
# notify the 'nightly-testing' stream on Zulip. | |
handle_failure: | |
if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.head_branch == 'nightly-testing' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Send message on Zulip | |
uses: zulip/github-actions-zulip/send-message@v1 | |
with: | |
api-key: ${{ secrets.ZULIP_API_KEY }} | |
email: '[email protected]' | |
organization-url: 'https://leanprover.zulipchat.com' | |
to: 'nightly-testing' | |
type: 'stream' | |
topic: 'Batteries status updates' | |
content: | | |
❌️ The latest CI for Batteries' [`nightly-testing`](https://github.com/leanprover-community/batteries/tree/nightly-testing) branch has [failed](https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}). | |
# Whenever `nightly-testing` passes CI, | |
# push it to `nightly-testing-YYYY-MM-DD` so we have a known good version of Batteries on that nightly release. | |
handle_success: | |
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.head_branch == 'nightly-testing' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: nightly-testing # checkout nightly-testing branch | |
fetch-depth: 0 # checkout all branches so that we can push from `nightly-testing` to `nightly-testing-YYYY-MM-DD` | |
token: ${{ secrets.NIGHTLY_TESTING }} | |
- name: Update the nightly-testing-YYYY-MM-DD tag | |
run: | | |
toolchain=$(<lean-toolchain) | |
if [[ $toolchain =~ leanprover/lean4:nightly-([a-zA-Z0-9_-]+) ]]; then | |
version=${BASH_REMATCH[1]} | |
if git ls-remote --tags --exit-code origin "refs/tags/nightly-testing-$version" >/dev/null; then | |
echo "Tag nightly-testing-$version already exists on the remote." | |
else | |
# If the tag does not exist, create and push the tag to remote | |
echo "Creating tag nightly-testing-$version from the current state of the nightly-testing branch." | |
git tag nightly-testing-$version | |
git push origin nightly-testing-$version | |
fi | |
else | |
echo "Error: The file lean-toolchain does not contain the expected pattern." | |
exit 1 | |
fi | |
# Now post a success message to zulip, if the last message there is not a success message. | |
# https://chat.openai.com/share/87656d2c-c804-4583-91aa-426d4f1537b3 | |
- name: Install Zulip API client | |
run: pip install zulip | |
- name: Check last message and post if necessary | |
run: | | |
import zulip | |
client = zulip.Client(email='[email protected]', api_key='${{ secrets.ZULIP_API_KEY }}', site='https://leanprover.zulipchat.com') | |
# Get the last message in the 'status updates' topic | |
request = { | |
'anchor': 'newest', | |
'num_before': 1, | |
'num_after': 0, | |
'narrow': [{'operator': 'stream', 'operand': 'nightly-testing'}, {'operator': 'topic', 'operand': 'Batteries status updates'}], | |
'apply_markdown': False | |
} | |
response = client.get_messages(request) | |
messages = response['messages'] | |
if not messages or messages[0]['content'] != "✅️ The latest CI for Batteries' [`nightly-testing`](https://github.com/leanprover-community/batteries/tree/nightly-testing) branch has succeeded!": | |
# Post the success message | |
request = { | |
'type': 'stream', | |
'to': 'nightly-testing', | |
'topic': 'Batteries status updates', | |
'content': "✅️ The latest CI for Batteries' [`nightly-testing`](https://github.com/leanprover-community/batteries/tree/nightly-testing) branch has succeeded!" | |
} | |
result = client.send_message(request) | |
print(result) | |
shell: python |