first version
This commit is contained in:
parent
ca71061655
commit
3358f0b5ca
24
.github/workflows/test_action.yaml
vendored
Normal file
24
.github/workflows/test_action.yaml
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
name: Send message
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
send:
|
||||||
|
name: Checkout and send message
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Send message
|
||||||
|
uses: yamaks2306/telegram-notification@main
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
chat_id: ${{ secrets.TG_CHAT_ID }}
|
||||||
|
token: ${{ secrets.TG_TOKEN }}
|
||||||
|
|
5
Dockerfile
Normal file
5
Dockerfile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
FROM python:3.10-slim
|
||||||
|
WORKDIR /app
|
||||||
|
COPY . /app
|
||||||
|
RUN python -m pip install requests
|
||||||
|
ENTRYPOINT ["./entrypoint.sh"]
|
18
README.md
18
README.md
@ -1,2 +1,20 @@
|
|||||||
# telegram-notification
|
# telegram-notification
|
||||||
Notification to Telegram chat about GitHub Action workflow status with customizable messages
|
Notification to Telegram chat about GitHub Action workflow status with customizable messages
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
To be notified in the Telegram chat about the results of a wokflow, add the next step to the end of your wokflow:
|
||||||
|
```yaml
|
||||||
|
- name: Send message
|
||||||
|
uses: yamaks2306/telegram-notification@main
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
chat_id: ${{ secrets.TG_CHAT_ID }}
|
||||||
|
token: ${{ secrets.TG_TOKEN }}
|
||||||
|
```
|
||||||
|
Where ```chat_id``` is the chat ID and ```token``` is the token of the telegram bot
|
||||||
|
|
||||||
|
You can specify additional parameters to customize the messages:
|
||||||
|
- ```include_commit_info``` - string "true" or "false" ("true" by default). If true, message to Telegram will contain information about commit - author, commit message and link to commit page.
|
||||||
|
- ```commit_message``` - the default setting is ```github.event.head_commit.message```. ```github.event.commits[0].message``` can be used instead. In the first case, if there were several commits, the message of the last commit will be displayed, in the second - the first one.
|
||||||
|
- ```docker_tags``` - if the previous step was to build docker images, you can specify docker tags, for example ```steps.docker_meta.outputs.tags```
|
||||||
|
- ```message``` - custom message, if specified, will be used instead of the standard message.
|
33
action.yaml
Normal file
33
action.yaml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
name: 'GitHub workflow Telegram notification'
|
||||||
|
description: 'Get notification to Telegram chat about GitHub Action workflow status '
|
||||||
|
author: 'yamaks2306'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
chat_id:
|
||||||
|
description: 'Telegram chat id'
|
||||||
|
required: true
|
||||||
|
token:
|
||||||
|
description: 'Token for Telegram bot'
|
||||||
|
required: true
|
||||||
|
status:
|
||||||
|
description: 'Job status'
|
||||||
|
required: false
|
||||||
|
default: ${{ job.status }}
|
||||||
|
commit_message:
|
||||||
|
description: 'Commit message'
|
||||||
|
required: false
|
||||||
|
default: ${{ github.event.head_commit.message }}
|
||||||
|
docker_tags:
|
||||||
|
description: 'For example, steps.docker_meta.outputs.tags'
|
||||||
|
required: false
|
||||||
|
include_commit_info:
|
||||||
|
description: "If true, include commit information to message. Default - true"
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
|
message:
|
||||||
|
description: "Custom message"
|
||||||
|
required: false
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: 'docker'
|
||||||
|
image: 'Dockerfile'
|
2
entrypoint.sh
Executable file
2
entrypoint.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
python send_message.py
|
74
send_message.py
Normal file
74
send_message.py
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
import os
|
||||||
|
import requests
|
||||||
|
|
||||||
|
chat_id = os.getenv('INPUT_CHAT_ID')
|
||||||
|
if chat_id == "":
|
||||||
|
raise SystemExit('Variable chat_id is required. Exit.')
|
||||||
|
token = os.getenv('INPUT_TOKEN')
|
||||||
|
if token == "":
|
||||||
|
raise SystemExit('Variable chat_id is required. Exit.')
|
||||||
|
status = os.getenv('INPUT_STATUS')
|
||||||
|
commit = os.getenv('INPUT_COMMIT_MESSAGE')
|
||||||
|
include_commit_info = os.getenv('INPUT_INCLUDE_COMMIT_INFO')
|
||||||
|
docker_tags = os.getenv('INPUT_DOCKER_TAGS')
|
||||||
|
custom_message = os.getenv('INPUT_MESSAGE')
|
||||||
|
|
||||||
|
|
||||||
|
link=f'https://api.telegram.org/bot{token}/sendMessage'
|
||||||
|
|
||||||
|
icon = {
|
||||||
|
"failure": "🔴",
|
||||||
|
"cancelled": "⚪",
|
||||||
|
"success": "🟢",
|
||||||
|
}
|
||||||
|
|
||||||
|
#GitHub environment variables
|
||||||
|
github_workflow = os.getenv('GITHUB_WORKFLOW')
|
||||||
|
github_repository = os.getenv('GITHUB_REPOSITORY')
|
||||||
|
github_sha = os.getenv('GITHUB_SHA')
|
||||||
|
github_actor = os.getenv('GITHUB_ACTOR')
|
||||||
|
tag = os.getenv('GITHUB_REF')
|
||||||
|
|
||||||
|
commit_link = f'https://github.com/{github_repository}/commit/{github_sha}'
|
||||||
|
|
||||||
|
def get_version(tag_string):
|
||||||
|
'''GITHUB_REF contain "refs/tags/v0.0.2" or "refs/heads/main". If second part is "tags",
|
||||||
|
return tag with version number, else - None'''
|
||||||
|
tags = tag_string.split("/")
|
||||||
|
return tags[2] if tags[1] == "tags" else None
|
||||||
|
|
||||||
|
def build_message():
|
||||||
|
'''Building message from different parts'''
|
||||||
|
message = f'''{icon[status]} {status}: <b>{github_workflow}</b>\n
|
||||||
|
Repository: <b>{github_repository}</b>'''
|
||||||
|
|
||||||
|
version = get_version(tag)
|
||||||
|
if version is not None:
|
||||||
|
message = f'''{message}
|
||||||
|
Version: <b>{version}</b>'''
|
||||||
|
|
||||||
|
if docker_tags != "":
|
||||||
|
message = f'''{message}
|
||||||
|
Docker image tags: <b>{docker_tags}</b>'''
|
||||||
|
|
||||||
|
if include_commit_info == "true":
|
||||||
|
message = f'''{message}
|
||||||
|
Author: <b>{github_actor}</b>
|
||||||
|
Commit message: <b>{commit}</b>
|
||||||
|
<a href="{commit_link}">See changes</a>'''
|
||||||
|
|
||||||
|
return message
|
||||||
|
|
||||||
|
def send_message():
|
||||||
|
'''Sending message to telegram chat'''
|
||||||
|
message = build_message() if custom_message == "" else custom_message
|
||||||
|
parameters = {
|
||||||
|
'chat_id': chat_id,
|
||||||
|
'text': message,
|
||||||
|
'parse_mode': 'HTML'
|
||||||
|
}
|
||||||
|
|
||||||
|
request = requests.get(link, params = parameters)
|
||||||
|
request.raise_for_status()
|
||||||
|
|
||||||
|
send_message()
|
Loading…
x
Reference in New Issue
Block a user