mirror of
https://github.com/BreizhHardware/ntfy_alerts.git
synced 2026-03-18 21:40:38 +01:00
Merge pull request #5 from BreizhHardware/dev
feat: merge dev into main
Created the connection with Discord.
Added CONTRIBUTION.md.
Reworked GitHub CI.
Fixed threading issues.
This commit is contained in:
103
.github/workflows/create_release.yml
vendored
103
.github/workflows/create_release.yml
vendored
@@ -1,73 +1,30 @@
|
|||||||
name: Docker Build and Release
|
name: Docker Build and Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push-on-docker-hub:
|
build-and-push-on-docker-hub:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ secrets.DOCKER_USERNAME }}/github-ntfy:latest
|
tags: ${{ secrets.DOCKER_USERNAME }}/github-ntfy:latest
|
||||||
|
|
||||||
release-on-github:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Get the latest tag
|
|
||||||
id: get_latest_tag
|
|
||||||
run: echo "latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Increment version
|
|
||||||
id: increment_version
|
|
||||||
run: |
|
|
||||||
latest_tag=${{ env.latest_tag }}
|
|
||||||
if [ -z "$latest_tag" ]; then
|
|
||||||
new_version="v1.5.2"
|
|
||||||
else
|
|
||||||
IFS='.' read -r -a version_parts <<< "${latest_tag#v}"
|
|
||||||
new_version="v${version_parts[0]}.$((version_parts[1] + 1)).0"
|
|
||||||
fi
|
|
||||||
echo "new_version=$new_version" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Read changelog
|
|
||||||
id: read_changelog
|
|
||||||
run: echo "changelog=$(base64 -w 0 CHANGELOG.md)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Decode changelog
|
|
||||||
id: decode_changelog
|
|
||||||
run: echo "${{ env.changelog }}" | base64 -d > decoded_changelog.txt
|
|
||||||
|
|
||||||
- name: Create Release
|
|
||||||
id: create_release
|
|
||||||
uses: actions/create-release@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.TOKEN }}
|
|
||||||
with:
|
|
||||||
tag_name: ${{ env.new_version }}
|
|
||||||
release_name: Release ${{ env.new_version }}
|
|
||||||
body: ${{ steps.decode_changelog.outputs.changelog }}
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
73
.github/workflows/create_release.yml.old
vendored
Normal file
73
.github/workflows/create_release.yml.old
vendored
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
name: Docker Build and Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push-on-docker-hub:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: ${{ secrets.DOCKER_USERNAME }}/github-ntfy:latest
|
||||||
|
|
||||||
|
release-on-github:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Get the latest tag
|
||||||
|
id: get_latest_tag
|
||||||
|
run: echo "latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Increment version
|
||||||
|
id: increment_version
|
||||||
|
run: |
|
||||||
|
latest_tag=${{ env.latest_tag }}
|
||||||
|
if [ -z "$latest_tag" ]; then
|
||||||
|
new_version="v1.5.2"
|
||||||
|
else
|
||||||
|
IFS='.' read -r -a version_parts <<< "${latest_tag#v}"
|
||||||
|
new_version="v${version_parts[0]}.$((version_parts[1] + 1)).0"
|
||||||
|
fi
|
||||||
|
echo "new_version=$new_version" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Read changelog
|
||||||
|
id: read_changelog
|
||||||
|
run: echo "changelog=$(base64 -w 0 CHANGELOG.md)" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Decode changelog
|
||||||
|
id: decode_changelog
|
||||||
|
run: echo "${{ env.changelog }}" | base64 -d > decoded_changelog.txt
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
id: create_release
|
||||||
|
uses: actions/create-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.TOKEN }}
|
||||||
|
with:
|
||||||
|
tag_name: ${{ env.new_version }}
|
||||||
|
release_name: Release ${{ env.new_version }}
|
||||||
|
body: ${{ steps.decode_changelog.outputs.changelog }}
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
54
CONTRIBUTION.md
Normal file
54
CONTRIBUTION.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Contribution Guidelines
|
||||||
|
|
||||||
|
Thank you for considering contributing to this project! Your help is greatly appreciated. Please follow these guidelines to ensure a smooth contribution process.
|
||||||
|
|
||||||
|
## How to Contribute
|
||||||
|
|
||||||
|
1. **Fork the repository**: Click the "Fork" button at the top right of this repository to create a copy of the repository in your GitHub account.
|
||||||
|
|
||||||
|
2. **Clone your fork**: Clone your forked repository to your local machine.
|
||||||
|
```sh
|
||||||
|
git clone https://github.com/BreizhHardware/ntfy_alerts.git
|
||||||
|
cd ntfy_alerts
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Create a new branch**: Create a new branch for your feature or bugfix.
|
||||||
|
```sh
|
||||||
|
git checkout -b feat/my-feature-branch
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Make your changes**: Make your changes to the codebase. Ensure your code follows the project's coding standards and includes appropriate tests.
|
||||||
|
|
||||||
|
5. **Commit your changes**: Commit your changes with a clear and concise commit message using conventional commit.
|
||||||
|
```sh
|
||||||
|
git add .
|
||||||
|
git commit -m "feat: add feature X"
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Push to your fork**: Push your changes to your forked repository.
|
||||||
|
```sh
|
||||||
|
git push origin feat/my-feature-branch
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Create a Pull Request**: Go to the original repository and create a pull request from your forked repository. Provide a clear description of your changes and the problem they solve.
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
- Follow the existing code style and conventions.
|
||||||
|
- Write clear and concise comments where necessary.
|
||||||
|
- Ensure your code is well-documented.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- Write tests for any new features or bug fixes.
|
||||||
|
- Ensure all tests pass before submitting your pull request.
|
||||||
|
|
||||||
|
## Reporting Issues
|
||||||
|
|
||||||
|
If you find a bug or have a feature request, please create an issue on the GitHub repository. Provide as much detail as possible to help us understand and address the issue.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
Please note that this project is released with a Contributor Code of Conduct. By participating in this project, you agree to abide by its terms.
|
||||||
|
|
||||||
|
Thank you for contributing!
|
||||||
@@ -9,9 +9,10 @@ ADD requirements.txt /
|
|||||||
ADD entrypoint.sh /
|
ADD entrypoint.sh /
|
||||||
ADD send_ntfy.py /
|
ADD send_ntfy.py /
|
||||||
ADD send_gotify.py /
|
ADD send_gotify.py /
|
||||||
|
ADD send_discord.py /
|
||||||
ADD index.html /var/www/html/index.html
|
ADD index.html /var/www/html/index.html
|
||||||
ADD script.js /var/www/html/script.js
|
ADD script.js /var/www/html/script.js
|
||||||
RUN apk add --no-cache sqlite-dev sqlite-libs gcc musl-dev nginx
|
RUN apk add --no-cache sqlite-dev sqlite-libs musl-dev nginx gcc
|
||||||
RUN pip install -r requirements.txt
|
RUN pip install -r requirements.txt
|
||||||
RUN chmod 700 /entrypoint.sh
|
RUN chmod 700 /entrypoint.sh
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ ENV USERNAME="" \
|
|||||||
DOCKER_PASSWORD="" \
|
DOCKER_PASSWORD="" \
|
||||||
GOTIFY_URL="" \
|
GOTIFY_URL="" \
|
||||||
GOTIFY_TOKEN="" \
|
GOTIFY_TOKEN="" \
|
||||||
|
DISCORD_WEBHOOK_URL="" \
|
||||||
FLASK_ENV=production
|
FLASK_ENV=production
|
||||||
|
|
||||||
# Exposer le port 5000 pour l'API et le port 80 pour le serveur web
|
# Exposer le port 5000 pour l'API et le port 80 pour le serveur web
|
||||||
|
|||||||
18
README.md
18
README.md
@@ -9,11 +9,18 @@
|
|||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
> This project allow you to have notification about new github or docker hub release on ntfy, gotify and (soon) discord.
|
> This project allows you to receive notifications about new GitHub or Docker Hub releases on ntfy, gotify, and Discord.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To install the dependencies, run:
|
||||||
|
```sh
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
If you want to use the docker image you can use the following docker-compose file for x86_64:
|
If you want to use the Docker image, you can use the following docker-compose file for x86_64:
|
||||||
````yaml
|
````yaml
|
||||||
services:
|
services:
|
||||||
github-ntfy:
|
github-ntfy:
|
||||||
@@ -29,6 +36,7 @@ services:
|
|||||||
- DOCKER_PASSWORD= # Default is empty (Docker Hub password)
|
- DOCKER_PASSWORD= # Default is empty (Docker Hub password)
|
||||||
- GOTIFY_URL=gotify_url # Required if gotify is used
|
- GOTIFY_URL=gotify_url # Required if gotify is used
|
||||||
- GOTIFY_TOKEN= # Required if gotify is used
|
- GOTIFY_TOKEN= # Required if gotify is used
|
||||||
|
- DISCORD_WEBHOOK_URL= # Required if discord is used
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/github-ntfy:/github-ntfy/
|
- /path/to/github-ntfy:/github-ntfy/
|
||||||
ports:
|
ports:
|
||||||
@@ -51,6 +59,7 @@ services:
|
|||||||
- DOCKER_PASSWORD= # Default is empty (Docker Hub password)
|
- DOCKER_PASSWORD= # Default is empty (Docker Hub password)
|
||||||
- GOTIFY_URL=gotify_url # Required if gotify is used
|
- GOTIFY_URL=gotify_url # Required if gotify is used
|
||||||
- GOTIFY_TOKEN= # Required if gotify is used
|
- GOTIFY_TOKEN= # Required if gotify is used
|
||||||
|
- DISCORD_WEBHOOK_URL= # Required if discord is used
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/github-ntfy:/github-ntfy/
|
- /path/to/github-ntfy:/github-ntfy/
|
||||||
ports:
|
ports:
|
||||||
@@ -73,6 +82,7 @@ services:
|
|||||||
- DOCKER_PASSWORD= # Default is empty (Docker Hub password)
|
- DOCKER_PASSWORD= # Default is empty (Docker Hub password)
|
||||||
- GOTIFY_URL=gotify_url # Required if gotify is used
|
- GOTIFY_URL=gotify_url # Required if gotify is used
|
||||||
- GOTIFY_TOKEN= # Required if gotify is used
|
- GOTIFY_TOKEN= # Required if gotify is used
|
||||||
|
- DISCORD_WEBHOOK_URL= # Required if discord is used
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/github-ntfy:/github-ntfy/
|
- /path/to/github-ntfy:/github-ntfy/
|
||||||
ports:
|
ports:
|
||||||
@@ -92,7 +102,7 @@ GHNTFY_TOKEN is a github token, it need to have repo, read:org and read:user
|
|||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
|
|
||||||
If you want to contribut, feel free to open a pull request (CONTRIBUTION.md comming soon)!
|
If you want to contribut, feel free to open a pull request, but first read the [contribution guide](CONTRIBUTION.md)!
|
||||||
|
|
||||||
## TODO:
|
## TODO:
|
||||||
- [x] Dockerize the ntfy.py
|
- [x] Dockerize the ntfy.py
|
||||||
@@ -102,7 +112,7 @@ If you want to contribut, feel free to open a pull request (CONTRIBUTION.md comm
|
|||||||
- [x] Add Docker Hub compatibility
|
- [x] Add Docker Hub compatibility
|
||||||
- [ ] Rework of the web interface
|
- [ ] Rework of the web interface
|
||||||
- [x] Compatibility with Gotify
|
- [x] Compatibility with Gotify
|
||||||
- [ ] Compatibility with Discord Webhook
|
- [x] Compatibility with Discord Webhook
|
||||||
- [x] Compatibility and distribution for arm64 and armv7
|
- [x] Compatibility and distribution for arm64 and armv7
|
||||||
|
|
||||||
## Show your support
|
## Show your support
|
||||||
|
|||||||
53
ntfy.py
53
ntfy.py
@@ -5,6 +5,8 @@ import logging
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
import subprocess
|
import subprocess
|
||||||
import json
|
import json
|
||||||
|
import threading
|
||||||
|
|
||||||
from send_ntfy import (
|
from send_ntfy import (
|
||||||
github_send_to_ntfy,
|
github_send_to_ntfy,
|
||||||
docker_send_to_ntfy,
|
docker_send_to_ntfy,
|
||||||
@@ -13,6 +15,10 @@ from send_gotify import (
|
|||||||
github_send_to_gotify,
|
github_send_to_gotify,
|
||||||
docker_send_to_gotify,
|
docker_send_to_gotify,
|
||||||
)
|
)
|
||||||
|
from send_discord import (
|
||||||
|
github_send_to_discord,
|
||||||
|
docker_send_to_discord,
|
||||||
|
)
|
||||||
|
|
||||||
# Configuring the logger
|
# Configuring the logger
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
@@ -29,6 +35,8 @@ if github_token:
|
|||||||
docker_username = os.environ.get("DOCKER_USERNAME")
|
docker_username = os.environ.get("DOCKER_USERNAME")
|
||||||
docker_password = os.environ.get("DOCKER_PASSWORD")
|
docker_password = os.environ.get("DOCKER_PASSWORD")
|
||||||
|
|
||||||
|
discord_webhook_url = os.environ.get("DISCORD_WEBHOOK_URL")
|
||||||
|
|
||||||
|
|
||||||
def create_dockerhub_token(username, password):
|
def create_dockerhub_token(username, password):
|
||||||
url = "https://hub.docker.com//v2/users/login"
|
url = "https://hub.docker.com//v2/users/login"
|
||||||
@@ -169,6 +177,34 @@ def get_changelog(repo):
|
|||||||
return latest_release_list["body"]
|
return latest_release_list["body"]
|
||||||
return "Changelog not available"
|
return "Changelog not available"
|
||||||
|
|
||||||
|
def notify_all_services(github_latest_release, docker_latest_release, auth, ntfy_url, gotify_url, gotify_token, discord_webhook_url):
|
||||||
|
threads = []
|
||||||
|
|
||||||
|
if ntfy_url:
|
||||||
|
if github_latest_release:
|
||||||
|
threads.append(threading.Thread(target=github_send_to_ntfy, args=(github_latest_release, auth, ntfy_url)))
|
||||||
|
if docker_latest_release:
|
||||||
|
threads.append(threading.Thread(target=docker_send_to_ntfy, args=(docker_latest_release, auth, ntfy_url)))
|
||||||
|
|
||||||
|
if gotify_url and gotify_token:
|
||||||
|
if github_latest_release:
|
||||||
|
threads.append(threading.Thread(target=github_send_to_gotify, args=(github_latest_release, gotify_token, gotify_url)))
|
||||||
|
if docker_latest_release:
|
||||||
|
threads.append(threading.Thread(target=docker_send_to_gotify, args=(docker_latest_release, gotify_token, gotify_url)))
|
||||||
|
|
||||||
|
if discord_webhook_url:
|
||||||
|
if github_latest_release:
|
||||||
|
threads.append(threading.Thread(target=github_send_to_discord, args=(github_latest_release, discord_webhook_url)))
|
||||||
|
if docker_latest_release:
|
||||||
|
threads.append(threading.Thread(target=docker_send_to_discord, args=(docker_latest_release, discord_webhook_url)))
|
||||||
|
|
||||||
|
for thread in threads:
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
for thread in threads:
|
||||||
|
thread.join()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
start_api()
|
start_api()
|
||||||
@@ -177,27 +213,19 @@ if __name__ == "__main__":
|
|||||||
ntfy_url = os.environ.get("NTFY_URL")
|
ntfy_url = os.environ.get("NTFY_URL")
|
||||||
gotify_url = os.environ.get("GOTIFY_URL")
|
gotify_url = os.environ.get("GOTIFY_URL")
|
||||||
gotify_token = os.environ.get("GOTIFY_TOKEN")
|
gotify_token = os.environ.get("GOTIFY_TOKEN")
|
||||||
|
discord_webhook_url = os.environ.get("DISCORD_WEBHOOK_URL")
|
||||||
timeout = float(os.environ.get("GHNTFY_TIMEOUT"))
|
timeout = float(os.environ.get("GHNTFY_TIMEOUT"))
|
||||||
|
|
||||||
if auth and ntfy_url:
|
if auth and (ntfy_url or gotify_url or discord_webhook_url):
|
||||||
while True:
|
while True:
|
||||||
github_watched_repos_list = get_watched_repos()
|
github_watched_repos_list = get_watched_repos()
|
||||||
github_latest_release = get_latest_releases(github_watched_repos_list)
|
github_latest_release = get_latest_releases(github_watched_repos_list)
|
||||||
docker_watched_repos_list = get_docker_watched_repos()
|
docker_watched_repos_list = get_docker_watched_repos()
|
||||||
docker_latest_release = get_latest_docker_releases(docker_watched_repos_list)
|
docker_latest_release = get_latest_docker_releases(docker_watched_repos_list)
|
||||||
if ntfy_url != "":
|
|
||||||
if github_latest_release:
|
|
||||||
github_send_to_ntfy(github_latest_release, auth, ntfy_url)
|
|
||||||
if docker_latest_release:
|
|
||||||
docker_send_to_ntfy(docker_latest_release, auth, ntfy_url)
|
|
||||||
|
|
||||||
if gotify_url != "" and gotify_token != "":
|
notify_all_services(github_latest_release, docker_latest_release, auth, ntfy_url, gotify_url, gotify_token, discord_webhook_url)
|
||||||
if github_latest_release:
|
|
||||||
github_send_to_gotify(github_latest_release, gotify_token, gotify_url)
|
|
||||||
if docker_latest_release:
|
|
||||||
docker_send_to_gotify(docker_latest_release, gotify_token, gotify_url)
|
|
||||||
|
|
||||||
time.sleep(timeout) # Wait an hour before checking again
|
time.sleep(timeout)
|
||||||
else:
|
else:
|
||||||
logger.error("Usage: python ntfy.py")
|
logger.error("Usage: python ntfy.py")
|
||||||
logger.error(
|
logger.error(
|
||||||
@@ -211,4 +239,5 @@ if __name__ == "__main__":
|
|||||||
logger.error(
|
logger.error(
|
||||||
"GOTIFY_TOKEN: the token of the gotify server need to be stored in an environment variable named GOTIFY_TOKEN"
|
"GOTIFY_TOKEN: the token of the gotify server need to be stored in an environment variable named GOTIFY_TOKEN"
|
||||||
)
|
)
|
||||||
|
logger.error("DISCORD_WEBHOOK_URL: the webhook URL for Discord notifications need to be stored in an environment variable named DISCORD_WEBHOOK_URL")
|
||||||
logger.error("GHNTFY_TIMEOUT: the time interval between each check")
|
logger.error("GHNTFY_TIMEOUT: the time interval between each check")
|
||||||
|
|||||||
96
send_discord.py
Normal file
96
send_discord.py
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
import requests
|
||||||
|
import sqlite3
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.INFO,
|
||||||
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||||
|
)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def get_db_connection():
|
||||||
|
return sqlite3.connect("/github-ntfy/ghntfy_versions.db", check_same_thread=False)
|
||||||
|
|
||||||
|
def github_send_to_discord(releases, webhook_url):
|
||||||
|
conn = get_db_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
for release in releases:
|
||||||
|
app_name = release["repo"].split("/")[-1]
|
||||||
|
version_number = release["tag_name"]
|
||||||
|
app_url = release["html_url"]
|
||||||
|
changelog = release["changelog"]
|
||||||
|
release_date = release["published_at"].replace("T", " ").replace("Z", "")
|
||||||
|
|
||||||
|
cursor.execute("SELECT version FROM versions WHERE repo=?", (app_name,))
|
||||||
|
previous_version = cursor.fetchone()
|
||||||
|
if previous_version and previous_version[0] == version_number:
|
||||||
|
logger.info(f"The version of {app_name} has not changed. No notification sent.")
|
||||||
|
continue # Move on to the next application
|
||||||
|
|
||||||
|
message = f"New version: {version_number}\nFor: {app_name}\nPublished on: {release_date}\nChangelog:\n{changelog}\n{app_url}"
|
||||||
|
if len(message) > 2000:
|
||||||
|
message = f"New version: {version_number}\nFor: {app_name}\nPublished on: {release_date}\nFull changelog: {app_url}"
|
||||||
|
# Updating the previous version for this application
|
||||||
|
cursor.execute(
|
||||||
|
"INSERT OR REPLACE INTO versions (repo, version, changelog) VALUES (?, ?, ?)",
|
||||||
|
(app_name, version_number, changelog),
|
||||||
|
)
|
||||||
|
conn.commit()
|
||||||
|
data = {
|
||||||
|
"content": message,
|
||||||
|
"username": "GitHub Ntfy"
|
||||||
|
}
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.post(webhook_url, json=data, headers=headers)
|
||||||
|
if 200 <= response.status_code < 300:
|
||||||
|
logger.info(f"Message sent to Discord for {app_name}")
|
||||||
|
else:
|
||||||
|
logger.error(f"Failed to send message to Discord. Status code: {response.status_code}")
|
||||||
|
logger.error(f"Response: {response.text}")
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
def docker_send_to_discord(releases, webhook_url):
|
||||||
|
conn = get_db_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
for release in releases:
|
||||||
|
app_name = release["repo"].split("/")[-1]
|
||||||
|
digest_number = release["digest"]
|
||||||
|
app_url = release["html_url"]
|
||||||
|
release_date = release["published_at"].replace("T", " ").replace("Z", "")
|
||||||
|
|
||||||
|
cursor.execute("SELECT digest FROM docker_versions WHERE repo=?", (app_name,))
|
||||||
|
previous_digest = cursor.fetchone()
|
||||||
|
if previous_digest and previous_digest[0] == digest_number:
|
||||||
|
logger.info(f"The digest of {app_name} has not changed. No notification sent.")
|
||||||
|
continue
|
||||||
|
|
||||||
|
message = f"New version for {app_name}\nDigest: {digest_number}\nPublished on: {release_date}\n{app_url}"
|
||||||
|
if len(message) > 2000:
|
||||||
|
message = f"New version for {app_name}\nDigest: {digest_number}\nPublished on: {release_date}\nFull details: {app_url}"
|
||||||
|
|
||||||
|
cursor.execute(
|
||||||
|
"INSERT OR REPLACE INTO docker_versions (repo, digest) VALUES (?, ?)",
|
||||||
|
(app_name, digest_number),
|
||||||
|
)
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"content": message,
|
||||||
|
"username": "GitHub Ntfy"
|
||||||
|
}
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info(f"Sending payload to Discord: {data}")
|
||||||
|
|
||||||
|
response = requests.post(webhook_url, json=data, headers=headers)
|
||||||
|
if 200 <= response.status_code < 300:
|
||||||
|
logger.info(f"Message sent to Discord for {app_name}")
|
||||||
|
else:
|
||||||
|
logger.error(f"Failed to send message to Discord. Status code: {response.status_code}")
|
||||||
|
logger.error(f"Response: {response.text}")
|
||||||
|
conn.close()
|
||||||
@@ -2,20 +2,18 @@ import requests
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
conn = sqlite3.connect(
|
|
||||||
"/github-ntfy/ghntfy_versions.db",
|
|
||||||
check_same_thread=False,
|
|
||||||
)
|
|
||||||
cursor = conn.cursor()
|
|
||||||
|
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.INFO,
|
level=logging.INFO,
|
||||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||||
)
|
)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def get_db_connection():
|
||||||
|
return sqlite3.connect("/github-ntfy/ghntfy_versions.db", check_same_thread=False)
|
||||||
|
|
||||||
def github_send_to_gotify(releases, token, url):
|
def github_send_to_gotify(releases, token, url):
|
||||||
|
conn = get_db_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
url = url + "/message"
|
url = url + "/message"
|
||||||
url = url + "?token=" + token
|
url = url + "?token=" + token
|
||||||
for release in releases:
|
for release in releases:
|
||||||
@@ -58,6 +56,8 @@ def github_send_to_gotify(releases, token, url):
|
|||||||
|
|
||||||
|
|
||||||
def docker_send_to_gotify(releases, token, url):
|
def docker_send_to_gotify(releases, token, url):
|
||||||
|
conn = get_db_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
url = url + "/message"
|
url = url + "/message"
|
||||||
url = url + "?token=" + token
|
url = url + "?token=" + token
|
||||||
for release in releases:
|
for release in releases:
|
||||||
|
|||||||
12
send_ntfy.py
12
send_ntfy.py
@@ -2,20 +2,18 @@ import requests
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
conn = sqlite3.connect(
|
|
||||||
"/github-ntfy/ghntfy_versions.db",
|
|
||||||
check_same_thread=False,
|
|
||||||
)
|
|
||||||
cursor = conn.cursor()
|
|
||||||
|
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.INFO,
|
level=logging.INFO,
|
||||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||||
)
|
)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def get_db_connection():
|
||||||
|
return sqlite3.connect("/github-ntfy/ghntfy_versions.db", check_same_thread=False)
|
||||||
|
|
||||||
def github_send_to_ntfy(releases, auth, url):
|
def github_send_to_ntfy(releases, auth, url):
|
||||||
|
conn = get_db_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
for release in releases:
|
for release in releases:
|
||||||
app_name = release["repo"].split("/")[-1] # Getting the application name from the repo
|
app_name = release["repo"].split("/")[-1] # Getting the application name from the repo
|
||||||
version_number = release["tag_name"] # Getting the version number
|
version_number = release["tag_name"] # Getting the version number
|
||||||
@@ -58,6 +56,8 @@ def github_send_to_ntfy(releases, auth, url):
|
|||||||
|
|
||||||
|
|
||||||
def docker_send_to_ntfy(releases, auth, url):
|
def docker_send_to_ntfy(releases, auth, url):
|
||||||
|
conn = get_db_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
for release in releases:
|
for release in releases:
|
||||||
app_name = release["repo"].split("/")[-1] # Getting the application name from the repo
|
app_name = release["repo"].split("/")[-1] # Getting the application name from the repo
|
||||||
digest_number = release["digest"]
|
digest_number = release["digest"]
|
||||||
|
|||||||
Reference in New Issue
Block a user