From 2bcfb88c75763e09b594b428150cfeac9646214c Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Thu, 4 May 2023 22:19:22 +0800 Subject: [PATCH 01/10] Update notification --- src/main.py | 14 +++++++++++++- src/module/api.py | 9 --------- src/module/manager/renamer.py | 6 +++--- src/module/parser/analyser/torrent_parser.py | 20 ++++++++++++-------- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/main.py b/src/main.py index 435389d2..bcb2b773 100644 --- a/src/main.py +++ b/src/main.py @@ -19,6 +19,19 @@ logger = logging.getLogger(__name__) main_process = multiprocessing.Process(target=app.run, args=(settings,)) +@router.on_event("startup") +async def startup(): + global main_process + main_process.start() + + +@router.on_event("shutdown") +async def shutdown(): + global main_process + if main_process.is_alive(): + os.kill(main_process.pid, signal.SIGTERM) + + @router.get("/api/v1/restart", tags=["program"]) async def restart(): global main_process @@ -85,6 +98,5 @@ else: if __name__ == "__main__": log_config = uvicorn.config.LOGGING_CONFIG log_config["formatters"]["default"]["fmt"] = "[%(asctime)s] %(levelname)-8s %(message)s" - main_process.start() uvicorn.run(router, host="0.0.0.0", port=settings.program.webui_port, log_config=log_config) diff --git a/src/module/api.py b/src/module/api.py index 48c66129..9d80015c 100644 --- a/src/module/api.py +++ b/src/module/api.py @@ -15,15 +15,6 @@ router = FastAPI() api_func = APIProcess(settings) -@router.on_event("startup") -async def startup_event(): - logger = logging.getLogger("uvicorn.access") - handler = logging.StreamHandler() - handler.setLevel(logging.INFO) - handler.setFormatter(logging.Formatter("[%(asctime)s] %(levelname)-8s %(message)s")) - logger.addHandler(handler) - - @router.get("/api/v1/data", tags=["info"]) async def get_data(): try: diff --git a/src/module/manager/renamer.py b/src/module/manager/renamer.py index 04f68936..417fb106 100644 --- a/src/module/manager/renamer.py +++ b/src/module/manager/renamer.py @@ -47,7 +47,7 @@ class Renamer: torrent_name = info.name suffix = os.path.splitext(media_path)[-1] compare_name = self.get_file_name(media_path) - new_path = self._renamer.torrent_parser( + new_path, episode = self._renamer.torrent_parser( torrent_name=torrent_name, bangumi_name=bangumi_name, season=season, @@ -57,7 +57,7 @@ class Renamer: if compare_name != new_path: try: self._client.rename_torrent_file(_hash=info.hash, old_path=media_path, new_path=new_path) - self._notification.send_msg(bangumi_name, "最新剧集已经更新,已自动重命名。") + self._notification.send_msg(bangumi_name, f"第{episode}集已经更新,已自动重命名。") except Exception as e: logger.warning(f"{torrent_name} rename failed") logger.warning(f"Season name: {bangumi_name}, Season: {season}, Suffix: {suffix}") @@ -72,7 +72,7 @@ class Renamer: if path_len <= 2: suffix = os.path.splitext(media_path)[-1] torrent_name = self.get_file_name(media_path) - new_name = self._renamer.torrent_parser( + new_name, episode = self._renamer.torrent_parser( torrent_name=torrent_name, bangumi_name=bangumi_name, season=season, diff --git a/src/module/parser/analyser/torrent_parser.py b/src/module/parser/analyser/torrent_parser.py index 0b96b7dd..85334d7a 100644 --- a/src/module/parser/analyser/torrent_parser.py +++ b/src/module/parser/analyser/torrent_parser.py @@ -44,9 +44,10 @@ def rename_normal(info: DownloadInfo): for rule in RULES: match_obj = re.match(rule, info.name, re.I) if match_obj is not None: + episode = match_obj.group(2) title = re.sub(r"([Ss]|Season )\d{1,3}", "", match_obj.group(1)).strip() - new_name = f"{title} S{info.season}E{match_obj.group(2)}{match_obj.group(3)}" - return new_name + new_name = f"{title} S{info.season}E{episode}{match_obj.group(3)}" + return new_name, episode def rename_pn(info: DownloadInfo): @@ -55,24 +56,26 @@ def rename_pn(info: DownloadInfo): if match_obj is not None: title = re.sub(r"([Ss]|Season )\d{1,3}", "", match_obj.group(1)).strip() title = title if title != "" else info.folder_name + episode = match_obj.group(2) new_name = re.sub( r"[\[\]]", "", - f"{title} S{info.season}E{match_obj.group(2)}{info.suffix}", + f"{title} S{info.season}E{episode}{info.suffix}", ) - return new_name + return new_name, episode def rename_advance(info: DownloadInfo): for rule in RULES: match_obj = re.match(rule, info.file_name, re.I) if match_obj is not None: + episode = match_obj.group(2) new_name = re.sub( r"[\[\]]", "", - f"{info.folder_name} S{info.season}E{match_obj.group(2)}{info.suffix}", + f"{info.folder_name} S{info.season}E{episode}{info.suffix}", ) - return new_name + return new_name, episode def rename_no_season_pn(info: DownloadInfo): @@ -80,12 +83,13 @@ def rename_no_season_pn(info: DownloadInfo): match_obj = re.match(rule, info.file_name, re.I) if match_obj is not None: title = match_obj.group(1).strip() + episode = match_obj.group(2) new_name = re.sub( r"[\[\]]", "", - f"{title} E{match_obj.group(2)}{info.suffix}", + f"{title} E{episode}{info.suffix}", ) - return new_name + return new_name, episode def rename_none(info: DownloadInfo): From 203de7b9e7ba0c0d886be39a56bc51e691aa9c45 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 10:47:49 +0800 Subject: [PATCH 02/10] Fix jysub problem. Close #231 #137 --- src/module/parser/analyser/raw_parser.py | 11 ++++++++++- src/test/test_raw_parser.py | 12 +++++++++++- src/test/test_torrent_parser.py | 24 ++++++++++++------------ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/module/parser/analyser/raw_parser.py b/src/module/parser/analyser/raw_parser.py index 68b8eb8f..af89cfe5 100644 --- a/src/module/parser/analyser/raw_parser.py +++ b/src/module/parser/analyser/raw_parser.py @@ -7,7 +7,7 @@ logger = logging.getLogger(__name__) EPISODE_RE = re.compile(r"\d+") TITLE_RE = re.compile( - r"(.*|\[.*])( -? \d+|\[\d+]|\[\d+.?[vV]\d]|[ 第]?\d+[话話集]|\[\d+.?END]|[Ee][Pp]?\d+)(.*)" + r"(.*|\[.*])( -? \d+|\[\d+]|\[\d+.?[vV]\d]|第\d+[话話集]|\[第?\d+[话話集]]|\[\d+.?END]|[Ee][Pp]?\d+)(.*)" ) RESOLUTION_RE = re.compile(r"1080|720|2160|4K") SOURCE_RE = re.compile(r"B-Global|[Bb]aha|[Bb]ilibili|AT-X|Web") @@ -41,6 +41,10 @@ def prefix_process(raw: str, group: str) -> str: raw = re.sub(f".{group}.", "", raw) raw_process = PREFIX_RE.sub("/", raw) arg_group = raw_process.split("/") + while "" in arg_group: + arg_group.remove("") + if len(arg_group) == 1: + arg_group = arg_group[0].split(" ") for arg in arg_group: if re.search(r"新番|月?番", arg) and len(arg) <= 5: raw = re.sub(f".{arg}.", "", raw) @@ -123,6 +127,7 @@ def clean_sub(sub: str | None) -> str | None: return sub return re.sub(r"_MP4|_MKV", "", sub) + def process(raw_title: str): raw_title = raw_title.strip() content_title = pre_process(raw_title) @@ -163,5 +168,9 @@ def raw_parser(raw: str) -> Episode | None: return Episode(name_en, name_zh, name_jp, season, sr, episode, sub, group, dpi, source) +if __name__ == '__main__': + title = "【幻樱字幕组】【4月新番】【古见同学有交流障碍症 第二季 Komi-san wa, Komyushou Desu. S02】【22】【GB_MP4】【1920X1080】" + ep = raw_parser(title) + print(ep) diff --git a/src/test/test_raw_parser.py b/src/test/test_raw_parser.py index 2d619df1..b4c3b446 100644 --- a/src/test/test_raw_parser.py +++ b/src/test/test_raw_parser.py @@ -46,7 +46,8 @@ def test_raw_parser(): content = "[织梦字幕组][尼尔:机械纪元 NieR Automata Ver1.1a][02集][1080P][AVC][简日双语]" info = raw_parser(content) assert info.group == "织梦字幕组" - assert info.title_zh == "尼尔:机械纪元 NieR Automata Ver1.1a" + assert info.title_zh == "尼尔:机械纪元" + assert info.title_en == "NieR Automata Ver1.1a" assert info.resolution == "1080P" assert info.episode == 2 assert info.season == 1 @@ -59,3 +60,12 @@ def test_raw_parser(): assert info.resolution == "1080p" assert info.episode == 33 assert info.season == 1 + + content = "【极影字幕社】★4月新番 天国大魔境 Tengoku Daimakyou 第05话 GB 720P MP4(字幕社招人内详)" + info = raw_parser(content) + assert info.group == "极影字幕社" + assert info.title_zh == "天国大魔境" + assert info.title_en == "Tengoku Daimakyou" + assert info.resolution == "720P" + assert info.episode == 5 + assert info.season == 1 diff --git a/src/test/test_torrent_parser.py b/src/test/test_torrent_parser.py index aa710e41..46d6e281 100644 --- a/src/test/test_torrent_parser.py +++ b/src/test/test_torrent_parser.py @@ -6,8 +6,8 @@ def test_torrent_parser(): folder_name = "我内心的糟糕念头(2023)" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Boku no Kokoro no Yabai Yatsu S01E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "我内心的糟糕念头(2023) S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Boku no Kokoro no Yabai Yatsu S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "我内心的糟糕念头(2023) S01E01.mp4" assert torrent_parser(file_name, folder_name, season, suffix, "none") == "[Lilith-Raws] Boku no Kokoro no Yabai Yatsu - 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4" @@ -15,33 +15,33 @@ def test_torrent_parser(): folder_name = "总之就是非常可爱(2021)" season = 2 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Tonikaku Kawaii S02E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "总之就是非常可爱(2021) S02E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Tonikaku Kawaii S02E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "总之就是非常可爱(2021) S02E01.mp4" file_name = "[SweetSub&LoliHouse] Heavenly Delusion - 01 [WebRip 1080p HEVC-10bit AAC ASSx2].mkv" folder_name = "天国大魔境(2023)" season = 1 suffix = ".mkv" - assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Heavenly Delusion S01E01.mkv" - assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "天国大魔境(2023) S01E01.mkv" + assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Heavenly Delusion S01E01.mkv" + assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "天国大魔境(2023) S01E01.mkv" file_name = "[SBSUB][Kanojo mo Kanojo][01][GB][1080P](456E234).mp4" folder_name = "女友也要有" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Kanojo mo Kanojo S01E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "女友也要有 S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Kanojo mo Kanojo S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "女友也要有 S01E01.mp4" file_name = "[SBSUB][CONAN][1082][V2][1080P][AVC_AAC][CHS_JP](C1E4E331).mp4" folder_name = "名侦探柯南(1996)" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "CONAN S01E1082.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "名侦探柯南(1996) S01E1082.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "CONAN S01E1082.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "名侦探柯南(1996) S01E1082.mp4" file_name = "海盗战记 S01E01.mp4" folder_name = "海盗战记(2021)" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "海盗战记 S01E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "海盗战记(2021) S01E01.mp4" \ No newline at end of file + assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "海盗战记 S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "海盗战记(2021) S01E01.mp4" \ No newline at end of file From ca8047caaac2603bce845eaaeac6b5b1805980a3 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 10:58:17 +0800 Subject: [PATCH 03/10] Change notification form --- src/module/manager/renamer.py | 4 ++-- src/module/parser/analyser/torrent_parser.py | 8 +++---- src/test/test_torrent_parser.py | 25 ++++++++++---------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/module/manager/renamer.py b/src/module/manager/renamer.py index 417fb106..c5dedc12 100644 --- a/src/module/manager/renamer.py +++ b/src/module/manager/renamer.py @@ -47,7 +47,7 @@ class Renamer: torrent_name = info.name suffix = os.path.splitext(media_path)[-1] compare_name = self.get_file_name(media_path) - new_path, episode = self._renamer.torrent_parser( + new_path = self._renamer.torrent_parser( torrent_name=torrent_name, bangumi_name=bangumi_name, season=season, @@ -57,7 +57,7 @@ class Renamer: if compare_name != new_path: try: self._client.rename_torrent_file(_hash=info.hash, old_path=media_path, new_path=new_path) - self._notification.send_msg(bangumi_name, f"第{episode}集已经更新,已自动重命名。") + self._notification.send_msg(bangumi_name, f"{new_path}已经更新,已自动重命名。") except Exception as e: logger.warning(f"{torrent_name} rename failed") logger.warning(f"Season name: {bangumi_name}, Season: {season}, Suffix: {suffix}") diff --git a/src/module/parser/analyser/torrent_parser.py b/src/module/parser/analyser/torrent_parser.py index 85334d7a..e6a05165 100644 --- a/src/module/parser/analyser/torrent_parser.py +++ b/src/module/parser/analyser/torrent_parser.py @@ -47,7 +47,7 @@ def rename_normal(info: DownloadInfo): episode = match_obj.group(2) title = re.sub(r"([Ss]|Season )\d{1,3}", "", match_obj.group(1)).strip() new_name = f"{title} S{info.season}E{episode}{match_obj.group(3)}" - return new_name, episode + return new_name def rename_pn(info: DownloadInfo): @@ -62,7 +62,7 @@ def rename_pn(info: DownloadInfo): "", f"{title} S{info.season}E{episode}{info.suffix}", ) - return new_name, episode + return new_name def rename_advance(info: DownloadInfo): @@ -75,7 +75,7 @@ def rename_advance(info: DownloadInfo): "", f"{info.folder_name} S{info.season}E{episode}{info.suffix}", ) - return new_name, episode + return new_name def rename_no_season_pn(info: DownloadInfo): @@ -89,7 +89,7 @@ def rename_no_season_pn(info: DownloadInfo): "", f"{title} E{episode}{info.suffix}", ) - return new_name, episode + return new_name def rename_none(info: DownloadInfo): diff --git a/src/test/test_torrent_parser.py b/src/test/test_torrent_parser.py index 46d6e281..a61c96dd 100644 --- a/src/test/test_torrent_parser.py +++ b/src/test/test_torrent_parser.py @@ -6,42 +6,41 @@ def test_torrent_parser(): folder_name = "我内心的糟糕念头(2023)" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Boku no Kokoro no Yabai Yatsu S01E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "我内心的糟糕念头(2023) S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Boku no Kokoro no Yabai Yatsu S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "我内心的糟糕念头(2023) S01E01.mp4" assert torrent_parser(file_name, folder_name, season, suffix, "none") == "[Lilith-Raws] Boku no Kokoro no Yabai Yatsu - 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4" - file_name = "[Sakurato] Tonikaku Kawaii S2 [01][AVC-8bit 1080p AAC][CHS].mp4" folder_name = "总之就是非常可爱(2021)" season = 2 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Tonikaku Kawaii S02E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "总之就是非常可爱(2021) S02E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Tonikaku Kawaii S02E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "总之就是非常可爱(2021) S02E01.mp4" file_name = "[SweetSub&LoliHouse] Heavenly Delusion - 01 [WebRip 1080p HEVC-10bit AAC ASSx2].mkv" folder_name = "天国大魔境(2023)" season = 1 suffix = ".mkv" - assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Heavenly Delusion S01E01.mkv" - assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "天国大魔境(2023) S01E01.mkv" + assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Heavenly Delusion S01E01.mkv" + assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "天国大魔境(2023) S01E01.mkv" file_name = "[SBSUB][Kanojo mo Kanojo][01][GB][1080P](456E234).mp4" folder_name = "女友也要有" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "Kanojo mo Kanojo S01E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "女友也要有 S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Kanojo mo Kanojo S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "女友也要有 S01E01.mp4" file_name = "[SBSUB][CONAN][1082][V2][1080P][AVC_AAC][CHS_JP](C1E4E331).mp4" folder_name = "名侦探柯南(1996)" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "CONAN S01E1082.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "名侦探柯南(1996) S01E1082.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "CONAN S01E1082.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "名侦探柯南(1996) S01E1082.mp4" file_name = "海盗战记 S01E01.mp4" folder_name = "海盗战记(2021)" season = 1 suffix = ".mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "pn")[0] == "海盗战记 S01E01.mp4" - assert torrent_parser(file_name, folder_name, season, suffix, "advance")[0] == "海盗战记(2021) S01E01.mp4" \ No newline at end of file + assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "海盗战记 S01E01.mp4" + assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "海盗战记(2021) S01E01.mp4" From d0863425fe2a6d8e4578c617fe760f3a27b53706 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 11:22:53 +0800 Subject: [PATCH 04/10] Update workflows --- .github/release-drafter.yml | 48 ++++++++++----------------- .github/workflows/dev-latest.yml | 21 +++++++++++- .github/workflows/docker.yml | 2 +- .github/workflows/release-drafter.yml | 47 +++++++++++++++++++------- .github/workflows/telegram.yml | 18 ++++++++++ .github/workflows/unittest.yml | 32 ------------------ 6 files changed, 92 insertions(+), 76 deletions(-) create mode 100644 .github/workflows/telegram.yml delete mode 100644 .github/workflows/unittest.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 70dda3cc..371e4779 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,44 +1,32 @@ -# Configuration for Release Drafter: https://github.com/toolmantim/release-drafter -name-template: 'v$NEXT_PATCH_VERSION 🌈' -tag-template: 'v$NEXT_PATCH_VERSION' -version-template: $MAJOR.$MINOR.$PATCH -# Emoji reference: https://gitmoji.carloscuesta.me/ +name-template: 'v$RESOLVED_VERSION 🌈' +tag-template: 'v$RESOLVED_VERSION' categories: - title: '🚀 Features' labels: - 'feature' - 'enhancement' - - 'kind/feature' + - 'new' - title: '🐛 Bug Fixes' labels: - 'fix' - 'bugfix' - 'bug' - - 'regression' - - 'kind/bug' - - title: 📝 Documentation updates + - title: '🧰 Maintenance' + label: 'chore' +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. +version-resolver: + major: labels: - - documentation - - 'kind/doc' - - title: 👻 Maintenance + - 'major' + minor: labels: - - chore - - dependencies - - 'kind/chore' - - 'kind/dep' - - title: 🚦 Tests + - 'minor' + patch: labels: - - test - - tests -exclude-labels: - - reverted - - no-changelog - - skip-changelog - - invalid -change-template: '* $TITLE (#$NUMBER) @$AUTHOR' + - 'patch' + default: patch template: | - ## What’s Changed - $CHANGES -Terms -Privacy -Security \ No newline at end of file + ## Changes + + $CHANGES \ No newline at end of file diff --git a/.github/workflows/dev-latest.yml b/.github/workflows/dev-latest.yml index aa9d8b25..3206e8d3 100644 --- a/.github/workflows/dev-latest.yml +++ b/.github/workflows/dev-latest.yml @@ -6,8 +6,27 @@ on: - '\d+\.\d+\.\d+-beta(?:\d+)?' jobs: - latest: + test: runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.11 + uses: actions/setup-python@v3 + with: + python-version: "3.11" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + pip install pytest + - name: Test + working-directory: ./src + run: | + pytest + + dev-latest: + runs-on: ubuntu-latest + needs: [test] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 17fd295d..516d235a 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -26,7 +26,7 @@ jobs: pytest - docker: + build: runs-on: ubuntu-latest needs: [test] steps: diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index e92b1304..01b56e72 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -1,20 +1,43 @@ -name: Release Drafter +name: Generate Release Draft on: pull_request: - - -permissions: - contents: read - + types: [opened] jobs: - update_release_draft: - permissions: - contents: write # for release-drafter/release-drafter to create a github release - pull-requests: write # for release-drafter/release-drafter to add label to PR + generate_release_draft: runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v5 + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: '3.8' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests + + - name: Generate Release Draft env: - GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} + run: | + pr_title=$(echo ${{ github.event.pull_request.title }} | tr '[:upper:]' '[:lower:]') + pr_body=$(echo ${{ github.event.pull_request.body }} | tr '[:upper:]' '[:lower:]') + + # Parse information from PR title and body + # Example: "Add feature X (#123)" and "This PR adds feature X" + pr_number=$(echo ${{ github.event.pull_request.number }}) + feature_name=$(echo $pr_title | sed -E 's/.*add (.*) \(.*#\d+\).*/\1/') + feature_description=$(echo $pr_body | sed -E 's/.*this pr (.*)/\1/') + + # Create release draft + release_title="Release ${feature_name} (PR #${pr_number})" + release_body="This release includes the following changes:\n\n- ${feature_description}\n\nPlease review and publish the release when ready." + response=$(curl -X POST -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases" -d "{\"tag_name\":\"${feature_name}\",\"name\":\"${release_title}\",\"body\":\"${release_body}\",\"draft\":true}") + + # Print response + echo $response \ No newline at end of file diff --git a/.github/workflows/telegram.yml b/.github/workflows/telegram.yml new file mode 100644 index 00000000..c9ee6941 --- /dev/null +++ b/.github/workflows/telegram.yml @@ -0,0 +1,18 @@ +name: telegram message +on: + - release + - prerelease +jobs: + + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: send telegram message on push + uses: appleboy/telegram-action@master + with: + to: ${{ secrets.TELEGRAM_TO }} + token: ${{ secrets.TELEGRAM_TOKEN }} + message: | + New release: ${{ github.event.release.tag_name }} + Link: ${{ github.event.release.html_url }} \ No newline at end of file diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml deleted file mode 100644 index 93f9a94c..00000000 --- a/.github/workflows/unittest.yml +++ /dev/null @@ -1,32 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a single version of Python -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - -name: unittest - -on: - push: - pull_request: - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.11 - uses: actions/setup-python@v3 - with: - python-version: "3.11" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - pip install pytest - - name: Test - working-directory: ./src - run: | - pytest \ No newline at end of file From 63c9d942f1a59380f4190b484b5514f1bf14a0f2 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 11:31:36 +0800 Subject: [PATCH 05/10] Update workflows --- .github/workflows/release-drafter.yml | 43 +++++++-------------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 01b56e72..4e9b4e87 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -2,42 +2,21 @@ name: Generate Release Draft on: pull_request: - types: [opened] + types: + - closed jobs: generate_release_draft: runs-on: ubuntu-latest + if: github.event.pull_request.merged == true steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Setup Python - uses: actions/setup-python@v2 - with: - python-version: '3.8' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install requests - - name: Generate Release Draft + uses: actions/create-release@v1 + with: + tag_name: ${{ github.event.pull_request.title }} + release_name: ${{ github.event.pull_request.title }}🌟 + body: | + - ${{ github.event.pull_request.body }} + draft: true env: - GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} - run: | - pr_title=$(echo ${{ github.event.pull_request.title }} | tr '[:upper:]' '[:lower:]') - pr_body=$(echo ${{ github.event.pull_request.body }} | tr '[:upper:]' '[:lower:]') - - # Parse information from PR title and body - # Example: "Add feature X (#123)" and "This PR adds feature X" - pr_number=$(echo ${{ github.event.pull_request.number }}) - feature_name=$(echo $pr_title | sed -E 's/.*add (.*) \(.*#\d+\).*/\1/') - feature_description=$(echo $pr_body | sed -E 's/.*this pr (.*)/\1/') - - # Create release draft - release_title="Release ${feature_name} (PR #${pr_number})" - release_body="This release includes the following changes:\n\n- ${feature_description}\n\nPlease review and publish the release when ready." - response=$(curl -X POST -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases" -d "{\"tag_name\":\"${feature_name}\",\"name\":\"${release_title}\",\"body\":\"${release_body}\",\"draft\":true}") - - # Print response - echo $response \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} \ No newline at end of file From 554f1c8713ad532727bab68cee132bcf91031fba Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 11:39:55 +0800 Subject: [PATCH 06/10] Update workflows --- .github/workflows/release-drafter.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 4e9b4e87..40c87051 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -10,6 +10,8 @@ jobs: runs-on: ubuntu-latest if: github.event.pull_request.merged == true steps: + - name: Checkout code + uses: actions/checkout@v2 - name: Generate Release Draft uses: actions/create-release@v1 with: @@ -17,6 +19,7 @@ jobs: release_name: ${{ github.event.pull_request.title }}🌟 body: | - ${{ github.event.pull_request.body }} - draft: true + draft: false + prerelease: false env: GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} \ No newline at end of file From a07057522a25ded3b2482bc9f42419df9b8bf924 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 11:40:41 +0800 Subject: [PATCH 07/10] Update workflows --- .github/workflows/release-drafter.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 40c87051..fd7500bb 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -17,8 +17,7 @@ jobs: with: tag_name: ${{ github.event.pull_request.title }} release_name: ${{ github.event.pull_request.title }}🌟 - body: | - - ${{ github.event.pull_request.body }} + body: ${{ github.event.pull_request.body }} draft: false prerelease: false env: From 6362ae758e2ff0de46a6f322e054a484b88cd73f Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 11:42:49 +0800 Subject: [PATCH 08/10] Update workflows --- .github/workflows/release-drafter.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index fd7500bb..536c8ea7 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -4,6 +4,8 @@ on: pull_request: types: - closed + branches: + - main jobs: generate_release_draft: From 65c19f838b36774838e950178c083effb985e96b Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 11:49:25 +0800 Subject: [PATCH 09/10] Update workflows --- .github/workflows/telegram.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/telegram.yml b/.github/workflows/telegram.yml index c9ee6941..771d2eb1 100644 --- a/.github/workflows/telegram.yml +++ b/.github/workflows/telegram.yml @@ -1,7 +1,6 @@ name: telegram message on: - release - - prerelease jobs: build: From 1bda84f7bed1b88a5e665636a93ac1fe7c6e43e4 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Fri, 5 May 2023 11:52:37 +0800 Subject: [PATCH 10/10] Update workflows --- .github/workflows/{release-drafter.yml => release.yml} | 0 .github/workflows/{telegram.yml => telegram-bot.yml} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{release-drafter.yml => release.yml} (100%) rename .github/workflows/{telegram.yml => telegram-bot.yml} (100%) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release.yml similarity index 100% rename from .github/workflows/release-drafter.yml rename to .github/workflows/release.yml diff --git a/.github/workflows/telegram.yml b/.github/workflows/telegram-bot.yml similarity index 100% rename from .github/workflows/telegram.yml rename to .github/workflows/telegram-bot.yml