5 Commits

Author SHA1 Message Date
e5b0e19053 Makefile to download needed bin
Permit to download easily just and pixi binary without custom software
2023-12-30 01:20:43 +01:00
52c07aeb89 Just: retrieve mailpit as mail wrapper 2023-12-30 01:20:43 +01:00
00abaab982 Use pixi as env manager
https://github.com/prefix-dev/pixi
2023-12-30 01:20:20 +01:00
fb4ac8ea73 Justfile: improve release process & doc 2023-12-30 01:19:13 +01:00
f4edb03979 Improve HTML template + improve links
Reduce size (from ~15kB to ~4kB)
Reduce incompatibility for emails

Link to project on project name
2023-12-30 01:07:11 +01:00
9 changed files with 861 additions and 83 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# GitHub syntax highlighting
pixi.lock linguist-language=YAML

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
# pixi environments
.pixi
mailpit
.bin

View File

@@ -1,37 +1,21 @@
# https://github.com/casey/just
venv := "./venv"
pip := venv / "bin/pip"
python := venv / "bin/python"
python := "pixi run python"
last_commit_sha1 := `git rev-parse --short HEAD`
remote_image_name := "gitea.gdemontauzan.fr/maxenceg2m/github-release-notifier"
remote_build_image := remote_image_name + ":" + last_commit_sha1
# Run the script
run: _ensure_venv_is_ok
run: init
{{ python }} notifier.py
# Init python virtual env
# Init python env with pixi
init:
python3 -m venv venv
{{ pip }} install --requirement requirements.txt
sha256sum requirements.txt > {{ venv }}/requirements.sha
pixi install
# Inspiration: https://github.com/behave/behave/blob/afb6b6716cd0f3e028829416475312db804a6aa9/justfile
_ensure_venv_is_ok:
#!/usr/bin/env python3
from subprocess import run
from os import path
if run("sha256sum -c {{ venv }}/requirements.sha", shell=True).returncode != 0:
run("just init", shell=True)
# Clean workspace - remove venv - and init
reinit: hclean init
# Remove virtual env (venv)
# Remove virtual env (pixi)
hclean:
rm -fr venv
rm -fr .pixi
# Run docker compose then show logs
dup: dbuild
@@ -59,8 +43,20 @@ dpush: dbuild
docker push {{ remote_build_image }}
echo "To push a tagged version, do 'just release <version>'"
# Release a version: create a tagged images, push it and create a git tag
# Use just a number! Without 'v'! Release a version - create a tagged images, push it and create git tag.
release version: dbuild
docker tag github-release-notifier {{ remote_image_name }}:{{ version }}
docker push {{ remote_image_name }}:{{ version }}
git tag -a v{{ version }} -m ""
git push --tags
# MAILPIT PART
mailpit_version := "v1.11.0"
mailpit_archi := "linux-amd64"
mailpit_output := "mailpit-" + mailpit_version + "-" + mailpit_archi + ".tar.gz"
# Retrive mailpit bin
get-mail-wrapper:
echo {{mailpit_output}}
curl -L https://github.com/axllent/mailpit/releases/download/{{mailpit_version}}/mailpit-{{mailpit_archi}}.tar.gz --output {{mailpit_output}}
tar xf {{mailpit_output}} mailpit

32
Makefile Normal file
View File

@@ -0,0 +1,32 @@
ARCH ?= x86_64-unknown-linux-musl
JUST_VERSION ?= 1.16.0
JUST_TGZ ?= just-$(JUST_VERSION)-$(ARCH).tar.gz
PIXI_VERSION ?= 0.10.0
PIXI_TGZ ?= pixi-$(PIXI_VERSION)-$(ARCH).tar.gz
all: just pixi
@echo "You can add .bin folder in your path to enjoy pixi and just:" 'export PATH=$$PATH:$$(pwd)/.bin'
PATH=$$PATH:$(pwd)/.bin just
just: .bin/just
.bin/just: init .bin/$(JUST_TGZ)
tar xf ./.bin/$(JUST_TGZ) -C ./.bin just
@echo "just downloaded. Run './.bin/just' command to exec"
.bin/$(JUST_TGZ):
curl -L https://github.com/casey/just/releases/download/$(JUST_VERSION)/just-$(JUST_VERSION)-$(ARCH).tar.gz -o ./.bin/$(JUST_TGZ)
pixi: .bin/pixi
.bin/pixi: init .bin/$(PIXI_TGZ)
tar xf ./.bin/$(PIXI_TGZ) -C ./.bin ./pixi
@echo "pixi downloaded. Run './.bin/pixi' command to exec"
.bin/$(PIXI_TGZ):
curl -L https://github.com/prefix-dev/pixi/releases/download/v$(PIXI_VERSION)/pixi-$(ARCH).tar.gz -o ./.bin/$(PIXI_TGZ)
init:
mkdir -p .bin

View File

@@ -47,3 +47,35 @@ Hey boy, what is the `pit.db` file?
Oh, just for fun, and because I love this project, I use [pit by michaeldv](https://github.com/michaeldv/pit) to follow my task etc.
It makes me think I should push my python version of this project on occasion when I will take the time to do...
How to build it?
----------------
This project use two very cool projets to handle env & build:
- [**just**](https://github.com/casey/just) as an alternative to [GNU Make](https://www.gnu.org/software/make/manual/make.html)
- [**pixi**](https://github.com/prefix-dev/pixi) to manage python & dependancies environnment without question
You can install these two software by your way, or use the Makefile to do it: `$ make`.
This command will download & untar `just` and `pixie` into a hidden `.bin` folder and launch just target to do the rest.
> Don't forget to set a valid SMTP host/port in `config.ini`. Otherwise, notifier execution will fail. See below if you want to get a wrapper
Just's targets permit to:
- just run the script
- build a docker image
- create a release
- etc.
Use `.bin/just --list` to list all available target.
### Use mailpit to wrap mails
If you don't want to really send and receive mail, e.g. to test... things! I recommand [**mailpit**](https://github.com/axllent/mailpit).
You can quickly get it with just: `.bin/just get-mail-wrapper`.
Then execute-it: `./mailpit`.
By default, SMTP port is `1025`, and HTTP port to access to interface is `8025`.

View File

@@ -70,18 +70,18 @@ def main():
for new_r in new_releases:
content += f"""
<li><a href="{new_r["release_url"]}" target="_blank">{new_r["project_name"]}</a>
<li>{get_html_project_link(new_r)}
: new release
<a href="{new_r["release_url"]}" target="_blank">{new_r["release_tag"]}</a>
{get_html_release_link(new_r)}
available (old: {new_r["previous_tag"]}).
(published {convert_date(new_r["published_date"])})</li>"""
for new_p in new_projects:
content += f"""
<li><a href="{new_p["release_url"]}" target="_blank">{new_p["project_name"]}</a>
<li>{get_html_project_link(new_p)}
was added to your configuration.
Last release:
<a href="{new_p["release_url"]}" target="_blank">{new_p["release_tag"]}</a>
{get_html_release_link(new_p)}
(published {convert_date(new_p["published_date"])})</li>"""
with open(template_file, "r", encoding="utf-8") as f_template:
@@ -114,6 +114,15 @@ def get_last_release(project):
}
def get_html_project_link(el):
project_url = f'https://github.com/{el["project_name"]}'
return f'<a href="{project_url}" target="_blank">{el["project_name"]}</a>'
def get_html_release_link(el):
return f'<a href="{el["release_url"]}" target="_blank">{el["release_tag"]}</a>'
def send_mail(content, config):
smtp_port = config.get("smtp_port")
smtp_server = config.get("smtp_server")

735
pixi.lock Normal file
View File

@@ -0,0 +1,735 @@
version: 3
metadata:
content_hash:
linux-64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d
channels:
- url: https://conda.anaconda.org/conda-forge/
used_env_vars: []
platforms:
- linux-64
sources: []
time_metadata: null
git_metadata: null
inputs_metadata: null
custom_metadata: null
package:
- platform: linux-64
name: _libgcc_mutex
version: '0.1'
category: main
manager: conda
dependencies: []
url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
hash:
md5: d7c89558ba9fa0495403155b64376d81
sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726
build: conda_forge
arch: x86_64
subdir: linux-64
build_number: 0
license: None
size: 2562
timestamp: 1578324546067
- platform: linux-64
name: _openmp_mutex
version: '4.5'
category: main
manager: conda
dependencies:
- _libgcc_mutex 0.1 conda_forge
- libgomp >=7.5.0
url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
hash:
md5: 73aaf86a425cc6e73fcf236a5a46396d
sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22
build: 2_gnu
arch: x86_64
subdir: linux-64
build_number: 16
constrains:
- openmp_impl 9999
license: BSD-3-Clause
license_family: BSD
size: 23621
timestamp: 1650670423406
- platform: linux-64
name: black
version: 23.11.0
category: main
manager: conda
dependencies:
- click >=8.0.0
- mypy_extensions >=0.4.3
- packaging >=22.0
- pathspec >=0.9
- platformdirs >=2
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
url: https://conda.anaconda.org/conda-forge/linux-64/black-23.11.0-py312h7900ff3_0.conda
hash:
md5: a0b80edb299377d3fa8233d43a19f11e
sha256: 1b6cd73fb6d39d45e2010a8cf2c2b82ab6d36323f4f9717f1550e80ca802f986
build: py312h7900ff3_0
arch: x86_64
subdir: linux-64
build_number: 0
license: MIT
license_family: MIT
size: 366103
timestamp: 1701335795851
- platform: linux-64
name: brotli-python
version: 1.1.0
category: main
manager: conda
dependencies:
- libgcc-ng >=12
- libstdcxx-ng >=12
- python >=3.12.0rc3,<3.13.0a0
- python_abi 3.12.* *_cp312
url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h30efb56_1.conda
hash:
md5: 45801a89533d3336a365284d93298e36
sha256: b68706698b6ac0d31196a8bcb061f0d1f35264bcd967ea45e03e108149a74c6f
build: py312h30efb56_1
arch: x86_64
subdir: linux-64
build_number: 1
constrains:
- libbrotlicommon 1.1.0 hd590300_1
license: MIT
license_family: MIT
size: 350604
timestamp: 1695990206327
- platform: linux-64
name: bzip2
version: 1.0.8
category: main
manager: conda
dependencies:
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda
hash:
md5: 69b8b6202a07720f448be700e300ccf4
sha256: 242c0c324507ee172c0e0dd2045814e746bb303d1eb78870d182ceb0abc726a8
build: hd590300_5
arch: x86_64
subdir: linux-64
build_number: 5
license: bzip2-1.0.6
license_family: BSD
size: 254228
timestamp: 1699279927352
- platform: linux-64
name: ca-certificates
version: 2023.11.17
category: main
manager: conda
dependencies: []
url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda
hash:
md5: 01ffc8d36f9eba0ce0b3c1955fa780ee
sha256: fb4b9f4b7d885002db0b93e22f44b5b03791ef3d4efdc9d0662185a0faafd6b6
build: hbcca054_0
arch: x86_64
subdir: linux-64
build_number: 0
license: ISC
size: 154117
timestamp: 1700280881924
- platform: linux-64
name: certifi
version: 2023.11.17
category: main
manager: conda
dependencies:
- python >=3.7
url: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda
hash:
md5: 2011bcf45376341dd1d690263fdbc789
sha256: afa22b77128a812cb57bc707c297d926561bd225a3d9dd74205d87a3b2d14a96
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
license: ISC
noarch: python
size: 158939
timestamp: 1700303562512
- platform: linux-64
name: charset-normalizer
version: 3.3.2
category: main
manager: conda
dependencies:
- python >=3.7
url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
hash:
md5: 7f4a9e3fcff3f6356ae99244a014da6a
sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
license: MIT
license_family: MIT
noarch: python
size: 46597
timestamp: 1698833765762
- platform: linux-64
name: click
version: 8.1.7
category: main
manager: conda
dependencies:
- __unix
- python >=3.8
url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
hash:
md5: f3ad426304898027fc619827ff428eca
sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec
build: unix_pyh707e725_0
arch: x86_64
subdir: linux-64
build_number: 0
license: BSD-3-Clause
license_family: BSD
noarch: python
size: 84437
timestamp: 1692311973840
- platform: linux-64
name: idna
version: '3.6'
category: main
manager: conda
dependencies:
- python >=3.6
url: https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda
hash:
md5: 1a76f09108576397c41c0b0c5bd84134
sha256: 6ee4c986d69ce61e60a20b2459b6f2027baeba153f0a64995fd3cb47c2cc7e07
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
license: BSD-3-Clause
license_family: BSD
noarch: python
size: 50124
timestamp: 1701027126206
- platform: linux-64
name: ld_impl_linux-64
version: '2.40'
category: main
manager: conda
dependencies: []
url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda
hash:
md5: 7aca3059a1729aa76c597603f10b0dd3
sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd
build: h41732ed_0
arch: x86_64
subdir: linux-64
build_number: 0
constrains:
- binutils_impl_linux-64 2.40
license: GPL-3.0-only
license_family: GPL
size: 704696
timestamp: 1674833944779
- platform: linux-64
name: libexpat
version: 2.5.0
category: main
manager: conda
dependencies:
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda
hash:
md5: 6305a3dd2752c76335295da4e581f2fd
sha256: 74c98a563777ae2ad71f1f74d458a8ab043cee4a513467c159ccf159d0e461f3
build: hcb278e6_1
arch: x86_64
subdir: linux-64
build_number: 1
constrains:
- expat 2.5.0.*
license: MIT
license_family: MIT
size: 77980
timestamp: 1680190528313
- platform: linux-64
name: libffi
version: 3.4.2
category: main
manager: conda
dependencies:
- libgcc-ng >=9.4.0
url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
hash:
md5: d645c6d2ac96843a2bfaccd2d62b3ac3
sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e
build: h7f98852_5
arch: x86_64
subdir: linux-64
build_number: 5
license: MIT
license_family: MIT
size: 58292
timestamp: 1636488182923
- platform: linux-64
name: libgcc-ng
version: 13.2.0
category: main
manager: conda
dependencies:
- _libgcc_mutex 0.1 conda_forge
- _openmp_mutex >=4.5
url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda
hash:
md5: 23fdf1fef05baeb7eadc2aed5fb0011f
sha256: 5e88f658e07a30ab41b154b42c59f079b168acfa9551a75bdc972099453f4105
build: h807b86a_3
arch: x86_64
subdir: linux-64
build_number: 3
constrains:
- libgomp 13.2.0 h807b86a_3
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 773629
timestamp: 1699753612541
- platform: linux-64
name: libgomp
version: 13.2.0
category: main
manager: conda
dependencies:
- _libgcc_mutex 0.1 conda_forge
url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda
hash:
md5: 7124cbb46b13d395bdde68f2d215c989
sha256: 6ebedee39b6bbbc969715d0d7fa4b381cce67e1139862604ffa393f821c08e81
build: h807b86a_3
arch: x86_64
subdir: linux-64
build_number: 3
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 421834
timestamp: 1699753531479
- platform: linux-64
name: libnsl
version: 2.0.1
category: main
manager: conda
dependencies:
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
hash:
md5: 30fd6e37fe21f86f4bd26d6ee73eeec7
sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6
build: hd590300_0
arch: x86_64
subdir: linux-64
build_number: 0
license: LGPL-2.1-only
license_family: GPL
size: 33408
timestamp: 1697359010159
- platform: linux-64
name: libsqlite
version: 3.44.2
category: main
manager: conda
dependencies:
- libgcc-ng >=12
- libzlib >=1.2.13,<1.3.0a0
url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda
hash:
md5: 3b6a9f225c3dbe0d24f4fedd4625c5bf
sha256: ee2c4d724a3ed60d5b458864d66122fb84c6ce1df62f735f90d8db17b66cd88a
build: h2797004_0
arch: x86_64
subdir: linux-64
build_number: 0
license: Unlicense
size: 845830
timestamp: 1700863204572
- platform: linux-64
name: libstdcxx-ng
version: 13.2.0
category: main
manager: conda
dependencies: []
url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda
hash:
md5: 937eaed008f6bf2191c5fe76f87755e9
sha256: 6c6c49efedcc5709a66f19fb6b26b69c6a5245310fd1d9a901fd5e38aaf7f882
build: h7e041cc_3
arch: x86_64
subdir: linux-64
build_number: 3
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 3842940
timestamp: 1699753676253
- platform: linux-64
name: libuuid
version: 2.38.1
category: main
manager: conda
dependencies:
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda
hash:
md5: 40b61aab5c7ba9ff276c41cfffe6b80b
sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18
build: h0b41bf4_0
arch: x86_64
subdir: linux-64
build_number: 0
license: BSD-3-Clause
license_family: BSD
size: 33601
timestamp: 1680112270483
- platform: linux-64
name: libzlib
version: 1.2.13
category: main
manager: conda
dependencies:
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda
hash:
md5: f36c115f1ee199da648e0597ec2047ad
sha256: 370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4
build: hd590300_5
arch: x86_64
subdir: linux-64
build_number: 5
constrains:
- zlib 1.2.13 *_5
license: Zlib
license_family: Other
size: 61588
timestamp: 1686575217516
- platform: linux-64
name: mypy_extensions
version: 1.0.0
category: main
manager: conda
dependencies:
- python >=3.5
url: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
hash:
md5: 4eccaeba205f0aed9ac3a9ea58568ca3
sha256: f240217476e148e825420c6bc3a0c0efb08c0718b7042fae960400c02af858a3
build: pyha770c72_0
arch: x86_64
subdir: linux-64
build_number: 0
license: MIT
license_family: MIT
noarch: python
size: 10492
timestamp: 1675543414256
- platform: linux-64
name: ncurses
version: '6.4'
category: main
manager: conda
dependencies:
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda
hash:
md5: 7dbaa197d7ba6032caf7ae7f32c1efa0
sha256: 91cc03f14caf96243cead96c76fe91ab5925a695d892e83285461fb927dece5e
build: h59595ed_2
arch: x86_64
subdir: linux-64
build_number: 2
license: X11 AND BSD-3-Clause
size: 884434
timestamp: 1698751260967
- platform: linux-64
name: openssl
version: 3.2.0
category: main
manager: conda
dependencies:
- ca-certificates
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda
hash:
md5: 603827b39ea2b835268adb8c821b8570
sha256: 80efc6f429bd8e622d999652e5cba2ca56fcdb9c16a439d2ce9b4313116e4a87
build: hd590300_1
arch: x86_64
subdir: linux-64
build_number: 1
constrains:
- pyopenssl >=22.1
license: Apache-2.0
license_family: Apache
size: 2854103
timestamp: 1701162437033
- platform: linux-64
name: packaging
version: '23.2'
category: main
manager: conda
dependencies:
- python >=3.7
url: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda
hash:
md5: 79002079284aa895f883c6b7f3f88fd6
sha256: 69b3ace6cca2dab9047b2c24926077d81d236bef45329d264b394001e3c3e52f
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
license: Apache-2.0
license_family: APACHE
noarch: python
size: 49452
timestamp: 1696202521121
- platform: linux-64
name: pathspec
version: 0.12.1
category: main
manager: conda
dependencies:
- python >=3.7
url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
hash:
md5: 17064acba08d3686f1135b5ec1b32b12
sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
license: MPL-2.0
license_family: MOZILLA
noarch: python
size: 41173
timestamp: 1702250135032
- platform: linux-64
name: platformdirs
version: 4.1.0
category: main
manager: conda
dependencies:
- python >=3.8
url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.1.0-pyhd8ed1ab_0.conda
hash:
md5: 45a5065664da0d1dfa8f8cd2eaf05ab9
sha256: 9e4ff17ce802159ed31344eb913eaa877688226765b77947b102b42255a53853
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
license: MIT
license_family: MIT
noarch: python
size: 20058
timestamp: 1701708396900
- platform: linux-64
name: pysocks
version: 1.7.1
category: main
manager: conda
dependencies:
- __unix
- python >=3.8
url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
hash:
md5: 2a7de29fb590ca14b5243c4c812c8025
sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b
build: pyha2e5f31_6
arch: x86_64
subdir: linux-64
build_number: 6
license: BSD-3-Clause
license_family: BSD
noarch: python
size: 18981
timestamp: 1661604969727
- platform: linux-64
name: python
version: 3.12.0
category: main
manager: conda
dependencies:
- bzip2 >=1.0.8,<2.0a0
- ld_impl_linux-64 >=2.36.1
- libexpat >=2.5.0,<3.0a0
- libffi >=3.4,<4.0a0
- libgcc-ng >=12
- libnsl >=2.0.0,<2.1.0a0
- libsqlite >=3.43.0,<4.0a0
- libuuid >=2.38.1,<3.0a0
- libzlib >=1.2.13,<1.3.0a0
- ncurses >=6.4,<7.0a0
- openssl >=3.1.3,<4.0a0
- readline >=8.2,<9.0a0
- tk >=8.6.13,<8.7.0a0
- tzdata
- xz >=5.2.6,<6.0a0
url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.0-hab00c5b_0_cpython.conda
hash:
md5: 7f97faab5bebcc2580f4f299285323da
sha256: 5398ebae6a1ccbfd3f76361eac75f3ac071527a8072627c4bf9008c689034f48
build: hab00c5b_0_cpython
arch: x86_64
subdir: linux-64
build_number: 0
constrains:
- python_abi 3.12.* *_cp312
license: Python-2.0
size: 32123473
timestamp: 1696324522323
- platform: linux-64
name: python_abi
version: '3.12'
category: main
manager: conda
dependencies: []
url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-4_cp312.conda
hash:
md5: dccc2d142812964fcc6abdc97b672dff
sha256: 182a329de10a4165f6e8a3804caf751f918f6ea6176dd4e5abcdae1ed3095bf6
build: 4_cp312
arch: x86_64
subdir: linux-64
build_number: 4
constrains:
- python 3.12.* *_cpython
license: BSD-3-Clause
license_family: BSD
size: 6385
timestamp: 1695147396604
- platform: linux-64
name: readline
version: '8.2'
category: main
manager: conda
dependencies:
- libgcc-ng >=12
- ncurses >=6.3,<7.0a0
url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda
hash:
md5: 47d31b792659ce70f470b5c82fdfb7a4
sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7
build: h8228510_1
arch: x86_64
subdir: linux-64
build_number: 1
license: GPL-3.0-only
license_family: GPL
size: 281456
timestamp: 1679532220005
- platform: linux-64
name: requests
version: 2.31.0
category: main
manager: conda
dependencies:
- certifi >=2017.4.17
- charset-normalizer >=2,<4
- idna >=2.5,<4
- python >=3.7
- urllib3 >=1.21.1,<3
url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
hash:
md5: a30144e4156cdbb236f99ebb49828f8b
sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
constrains:
- chardet >=3.0.2,<6
license: Apache-2.0
license_family: APACHE
noarch: python
size: 56690
timestamp: 1684774408600
- platform: linux-64
name: tk
version: 8.6.13
category: main
manager: conda
dependencies:
- libgcc-ng >=12
- libzlib >=1.2.13,<1.3.0a0
url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
hash:
md5: d453b98d9c83e71da0741bb0ff4d76bc
sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e
build: noxft_h4845f30_101
arch: x86_64
subdir: linux-64
build_number: 101
license: TCL
license_family: BSD
size: 3318875
timestamp: 1699202167581
- platform: linux-64
name: tzdata
version: 2023c
category: main
manager: conda
dependencies: []
url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda
hash:
md5: 939e3e74d8be4dac89ce83b20de2492a
sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55
build: h71feb2d_0
arch: x86_64
subdir: linux-64
build_number: 0
license: LicenseRef-Public-Domain
noarch: generic
size: 117580
timestamp: 1680041306008
- platform: linux-64
name: urllib3
version: 2.1.0
category: main
manager: conda
dependencies:
- brotli-python >=1.0.9
- pysocks >=1.5.6,<2.0,!=1.5.7
- python >=3.7
url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.1.0-pyhd8ed1ab_0.conda
hash:
md5: f8ced8ee63830dec7ecc1be048d1470a
sha256: eff5029820b4eaeab3a291a39854a6cd8fc8c4216264087f68c2d8d59822c869
build: pyhd8ed1ab_0
arch: x86_64
subdir: linux-64
build_number: 0
license: MIT
license_family: MIT
noarch: python
size: 85324
timestamp: 1699933655057
- platform: linux-64
name: xz
version: 5.2.6
category: main
manager: conda
dependencies:
- libgcc-ng >=12
url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
hash:
md5: 2161070d867d1b1204ea749c8eec4ef0
sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162
build: h166bdaf_0
arch: x86_64
subdir: linux-64
build_number: 0
license: LGPL-2.1 and GPL-2.0
size: 418368
timestamp: 1660346797927

17
pixi.toml Normal file
View File

@@ -0,0 +1,17 @@
[project]
name = "github-release-notifier"
version = "1"
description = "Send mail notification on new released versions of Github projects"
authors = ["Maxence G. de Montauzan <maxence@gdemontauzan.fr>"]
channels = ["conda-forge"]
platforms = ["linux-64"]
repository = "https://github.com/MaxenceG2M/github-release-notifier"
[tasks]
[dependencies]
python = ">=3.12.0,<3.13"
requests = ">=2.31.0,<2.32"
[build-dependencies]
black = ">=23.11.0,<23.12"

View File

@@ -5,62 +5,13 @@
<title></title>
<style>
button,hr,input{overflow:visible}audio,canvas,progress,video{display:inline-block}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}a
udio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=se
arch]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}[hidden],template{display:none}
body {
margin: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; }
.wysiwyg-content main > :first-child {
padding-top: 0 !important;
margin-top: 0 !important; }
.wysiwyg-content main > :last-child {
padding-bottom: 0 !important;
margin-bottom: 0 !important; }
.wysiwyg-content img {
max-width: 100%; }
.wysiwyg-content iframe {
display: block;
max-width: 100%;
border: 0; }
.wysiwyg-content .emoji .emoji-text {
font-size: 0; }
/* https://github.com/sindresorhus/github-markdown-css/blob/gh-pages/github-markdown.css */
/* From GitHub markdown view style */
body {
max-width: 980px; }
main {
padding: 45px; }
/* https://github.com/sindresorhus/github-markdown-css/blob/gh-pages/github-markdown.css */
.markdown-body hr::after,.markdown-body:after{clear:both}.markdown-body hr::after,.markdown-body hr::before,.markdown-body:after,.markdown-body:before{display:table;content:""}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,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) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size
:16px;line-height:1.6;word-wrap:break-word}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#4078c0;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{outline-width:0;text-decoration:underline}.markdown-body strong{font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body hr{box-sizing:content-box}.markdown-body input{margin:0;overflow:visible;font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"}.markdown-body [type=button]:-moz-focusring,.markdown-body [type=reset]:-moz-focusring,.markdown-body [type=submit]:-moz-focusring,.markdown-body button:-moz-focusring{outline:ButtonText dotted 1px}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.mar
kdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body *{box-sizing:border-box}.markdown-body blockquote{margin:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}.markdown-body pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;word-wrap:normal}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:3px!important}.markdown-body .pl-2{padding-left:6px!important}.markdown-body .pl-3{padding-left:12px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:36px!important}.m
arkdown-body .pl-6{padding-left:48px!important}.markdown-body .form-select::-ms-expand{opacity:0}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{display:inline-block;padding-right:2px;margin-left:-18px}.markdown-body .anchor:focus{outline:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.
markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2.25em;line-height:1.2}.markdown-body h1 .anchor{line-height:1}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h2 .anchor{line-height:1}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor,.markdown-body h4 .anchor{line-height:1.2}.markdown-body h4{font-size:1.25em}.markdown-body h5 .anchor,.markdown-body h6 .anchor{line-height:1.1}.markdown-body h5{font-size:1em}.markdown-body h6{font-size:1em;color:#777}.markd
own-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{overflow:hidden;background:#e7e7e7;height:4px;padding:0;margin:16px 0;border:0}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{border-spacing:0;border-collapse:collapse;display:bl
ock;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f
7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#183691}.markdown-body .pl-v{color:#ed6a43}.markdown-body.pl-id{color:#b52a1d}.mark
down-body .pl-ii{background-color:#b52a1d;color:#f8f8f8}.markdown-body .pl-sr .pl-cce{color:#63a35c;font-weight:700}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#1d3e81;font-weight:700}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{color:#333;font-style:italic}.markdown-body .pl-mb{color:#333;font-weight:700}.markdown-body .pl-md{background-color:#ffecec;color:#bd2c00}.markdown-body .pl-mi1{background-color:#eaffea;color:#55a532}.markdown-body .pl-mdr{color:#795da3;font-weight:700}.markdown-body .pl-mo{color:#1d3e81}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}
.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#4078c0;border:1px solid #4078c0}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}
.markdown-body a,.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}body{margin:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;max-width:980px;padding:45px}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.6;word-wrap:break-word}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#4078c0}.markdown-body a:hover{outline-width:0;text-decoration:underline}.markdown-body strong{font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2.25em;line-height:1.2}.markdown-body h1 .anchor,.markdown-body h2 .anchor{line-height:1}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor,.markdown-body h4 .anchor{line-height:1.2}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body hr{border-bottom-color:#eee}
</style>
</head>
<body class="markdown-body wysiwyg-content">
<main><h1 id="-some-new-release-on-github-project-available-">
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" height="32">
Some new release on Github project available!</h1>
<p><ul>{{content}}</ul></p>
</main>
</body>
<div class="markdown-body wysiwyg-content">
<h1 id="-some-new-release-on-github-project-available-">
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" height="32">
Some new release on Github project available!</h1>
<p><ul>{{content}}</ul></p>
</div>
</html>