Skip to content

Commit 425ae70

Browse files
committed
chore: Update Slack announcement GH Action.
Signed-off-by: Paulo Vital <paulo.vital@ibm.com>
1 parent d13442a commit 425ae70

3 files changed

Lines changed: 143 additions & 93 deletions

File tree

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#!/usr/bin/env python3
2+
3+
import logging
4+
import os
5+
import sys
6+
7+
import httpx
8+
from github import Github
9+
10+
11+
def ensure_environment_variables_are_present() -> None:
12+
required_env_vars = (
13+
"GITHUB_RELEASE_TAG",
14+
"GITHUB_TOKEN",
15+
"SLACK_TOKEN",
16+
"SLACK_SERVICE",
17+
"SLACK_TEAM",
18+
)
19+
20+
for env_var in required_env_vars:
21+
if env_var not in os.environ:
22+
logging.fatal(f"❌ A required environment variable is missing: {env_var}")
23+
sys.exit(1)
24+
25+
26+
def get_gh_release_info_text_with_token(release_tag: str, access_token: str) -> str:
27+
gh = Github(access_token)
28+
repo_name = "instana/python-sensor"
29+
repo = gh.get_repo(repo_name)
30+
release = repo.get_release(release_tag)
31+
32+
logging.info("GH Release fetched successfully %s", release)
33+
34+
msg = (
35+
f":mega: Oyez! Oyez! Oyez!\n"
36+
f":package: A new version of the Python Tracer has been released.\n"
37+
f"Name: Instana Python Tracer {release.title}\n"
38+
f"Tag: {release.tag_name}\n"
39+
f"Created at: {release.created_at}\n"
40+
f"Published at: {release.published_at}\n"
41+
f"{release.body}\n"
42+
)
43+
44+
logging.info(msg)
45+
return msg
46+
47+
48+
def post_on_slack_channel(
49+
slack_team: str, slack_service: str, slack_token: str, message_text: str
50+
) -> None:
51+
"""Send a message to Slack channel."""
52+
53+
url = (
54+
f"https://hooks.slack.com/services/T{slack_team}/B{slack_service}/{slack_token}"
55+
)
56+
57+
headers = {
58+
"Content-Type": "application/json",
59+
}
60+
body = {"text": message_text}
61+
62+
with httpx.Client() as client:
63+
response = client.post(url, headers=headers, json=body)
64+
response.raise_for_status()
65+
66+
result = response.text
67+
if "ok" in result:
68+
print("✅ Slack message sent successfully")
69+
else:
70+
print(f"❌ Slack API error: {result}")
71+
72+
73+
def main() -> None:
74+
# Setting this globally to DEBUG will also debug PyGithub,
75+
# which will produce even more log output
76+
logging.basicConfig(level=logging.INFO)
77+
ensure_environment_variables_are_present()
78+
79+
msg = get_gh_release_info_text_with_token(
80+
os.environ["GITHUB_RELEASE_TAG"], os.environ["GITHUB_TOKEN"]
81+
)
82+
83+
post_on_slack_channel(
84+
os.environ["SLACK_TEAM"],
85+
os.environ["SLACK_SERVICE"],
86+
os.environ["SLACK_TOKEN"],
87+
msg,
88+
)
89+
90+
91+
if __name__ == "__main__":
92+
main()

.github/workflows/release-notification-on-slack.yml

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,57 @@ on:
99

1010
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release
1111
release:
12-
types: [published]
12+
types: [published, released]
1313
jobs:
14-
build:
15-
name: Slack Post
14+
notify-slack:
1615
runs-on: ubuntu-latest
16+
1717
steps:
18-
- name: 'Checkout the needed file only ./bin/announce_release_on_slack.py'
19-
uses: actions/checkout@v3
20-
- run: |
21-
if [[ ${{ github.event_name == 'workflow_dispatch' }} == true ]]; then
22-
export GITHUB_RELEASE_TAG=${{ inputs.github_ref }}
23-
else # release event
24-
export GITHUB_RELEASE_TAG=$(basename ${GITHUB_REF})
25-
fi
26-
echo "New release published ${GITHUB_RELEASE_TAG}"
27-
pip3 install PyGithub
28-
echo $PWD
29-
ls -lah
30-
./bin/announce_release_on_slack.py
31-
env:
32-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33-
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
34-
SLACK_CHANNEL_ID_RELEASES: ${{ secrets.SLACK_CHANNEL_ID_RELEASES }}
18+
- name: Checkout code
19+
uses: actions/checkout@v4
20+
with:
21+
fetch-depth: 0 # Fetch all history to access commit messages
22+
23+
- name: Set up Python
24+
uses: actions/setup-python@v4
25+
with:
26+
python-version: '3.13'
27+
28+
- name: Install dependencies
29+
run: |
30+
pip install httpx PyGithub
31+
32+
# Set environment variables safely
33+
- name: Set event name
34+
id: set-event-name
35+
env:
36+
EVENT_NAME: ${{ github.event_name }}
37+
run: echo "EVENT_NAME=$EVENT_NAME" >> $GITHUB_ENV
38+
39+
# Handle workflow_dispatch event
40+
- name: Set GitHub ref for workflow dispatch
41+
if: ${{ github.event_name == 'workflow_dispatch' }}
42+
env:
43+
INPUT_REF: ${{ inputs.github_ref }}
44+
run: echo "GITHUB_RELEASE_TAG=$INPUT_REF" >> $GITHUB_ENV
45+
46+
# Handle release event
47+
- name: Set GitHub ref for release event
48+
if: ${{ github.event_name != 'workflow_dispatch' }}
49+
env:
50+
GH_REF: ${{ github.ref }}
51+
run: |
52+
REF_NAME=$(basename "$GH_REF")
53+
echo "GITHUB_RELEASE_TAG=$REF_NAME" >> $GITHUB_ENV
54+
55+
# Send notification using the safely set environment variables
56+
- name: Send Slack notification
57+
env:
58+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59+
SLACK_TOKEN: ${{ secrets.RUPY_TRACER_RELEASES_TOKEN }}
60+
SLACK_SERVICE: ${{ secrets.RUPY_TRACER_RELEASES_CHANNEL_ID }}
61+
SLACK_TEAM: ${{ secrets.RUPY_TOWN_CRIER_SERVICE_ID }}
62+
run: |
63+
echo "New release published ${GITHUB_RELEASE_TAG}"
64+
python .github/scripts/announce_release_on_slack.py
65+

bin/announce_release_on_slack.py

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)