refactor: Update Build Scripts And Workflows (#1848)

* refactor: Update Build Scripts And Workflows

* chore: Update Prettier Workflow

* chore: Update Publish Plugins Workflow

* chore: Update Prettier Workflow

* chore: Update Workflows

* chore: Update Workflows

* chore: Update Prettier Workflow

* chore: Update Prettier Workflow
This commit is contained in:
Rajarshee Chatterjee
2025-10-20 14:54:12 +05:30
committed by GitHub
parent 8108df39a1
commit 851330a52e
17 changed files with 648 additions and 500 deletions
+283 -282
View File
@@ -1,262 +1,263 @@
# DO NOT EDIT
# THIS FILE IS AUTO GENERATED FROM blank_report_issue.yml in the .github/scripts folder.
# DO NOT EDIT THIS FILE DIRECTLY
# This file is auto-generated from blank_report_issue.yml in .github/scripts/
# Any changes made here will be overwritten when plugins are published.
name: Issue report
description: Report a source issue in LNReader
name: Report Issue
description: Report a plugin issue in LNReader
labels: [Bug]
body:
- type: dropdown
id: source
attributes:
label: Plugin
description: Select the plugin associated with the issue.
description: Select the affected plugin(s).
multiple: true
options:
- "‎العربية: ArNovel"
- "‎العربية: Azora"
- "‎العربية: dilar tube"
- "‎العربية: HizoManga"
- "‎العربية: Kol Novel"
- "‎العربية: Novel4Up"
- "‎العربية: Novels Paradise"
- "‎العربية: Olaoe.cyou"
- "‎العربية: Rewayat Club"
- "‎العربية: Riwyat"
- "‎العربية: Sunovels"
- "中文, 汉语, 漢語: 69书吧"
- "中文, 汉语, 漢語: 爱下电子书"
- "中文, 汉语, 漢語: linovel"
- "中文, 汉语, 漢語: Linovelib"
- "中文, 汉语, 漢語: Linovelib(繁體)"
- "中文, 汉语, 漢語: Novel543"
- "中文, 汉语, 漢語: Quanben"
- "English: FirstKissNovel"
- "English: AllNovel"
- "English: AllNovelFull"
- "English: Arcane Translations"
- "English: Archive Of Our Own"
- "English: Srank Manga"
- "English: Belle Reservoir"
- "English: BestLightNovel"
- "English: BoxNovel"
- "English: Chrysanthemum Garden"
- "English: Citrus Aurora"
- "English: Coral Boutique"
- "English: CPUnovel"
- "English: Daoist Quest"
- "English: DaoNovel"
- "English: DaoTranslate"
- "English: Divine Dao Library"
- "English: Dearest Rosalie"
- "English: Dragonholic"
- "English: Dragon Tea"
- "English: Dream Big Translations"
- "English: Dusk Blossoms"
- "English: Early Novel"
- "English: ElloTL"
- "English: Eternalune"
- "English: Etude Translations"
- "English: FanNovel"
- "English: Fans Translations"
- "English: Fenrir Realm"
- "English: Fiction Zone"
- "English: Foxaholic"
- "English: Foxteller"
- "English: Faq Wiki"
- "English: Free Web Novel"
- "English: Galaxy Translations"
- "English: Genesis"
- "English: Guavaread"
- "English: Hiraeth Translation"
- "English: HotNovelPub"
- "English: Inkitt"
- "English: Ippotranslations"
- "English: KDT Novels"
- "English: Keopi Translations"
- "English: KnoxT"
- "English: Lazy Girl Translations"
- "English: Lib Read"
- "English: LightNovelCave"
- "English: LightNovelPlus"
- "English: LightNovelPub"
- "English: LightNovelPub Vip"
- "English: Light Novel Translations"
- "English: Light Novel Updates"
- "English: LightNovelWord"
- "English: Lily on the Valley"
- "English: LightNovelHeaven"
- "English: LnMTL"
- "English: Ltnovel"
- "English: LunarLetters"
- "English: Meownovel"
- "English: Moonlight Novels"
- "English: MostNovel"
- "English: MTL-Novel"
- "English: MTL Novel"
- "English: MTL Reader"
- "English: MVLEMPYR"
- "English: MysticalSeries"
- "English: NeoSekai Translations"
- "English: Nitro Manga"
- "English: novelsOnline"
- "English: NobleMTL"
- "English: Novel Bin"
- "English: NovelBuddy.io"
- "English: NovelCool"
- "English: Novel Fire"
- "English: NovelFull"
- "English: Novel Hall"
- "English: NovelLib"
- "English: Novelight"
- "English: NovelMultiverse"
- "English: NovelsKnight"
- "English: NovelTranslate"
- "English: Novel Updates"
- "English: Panda Machine Translations"
- "English: Pastel Tales"
- "English: PawRead"
- "English: Penguin Squad"
- "English: Prizma"
- "English: Rainofsnow"
- "English: Ranobes"
- "English: Ranovel"
- "English: Read Fanfic"
- "English: Read From Net"
- "English: ReadNovelFull"
- "English: Reaper Scans"
- "English: Re:Library"
- "English: Requiem Translations"
- "English: ReadLiteNovel"
- "English: Royal Road"
- "English: Salmon Latte"
- "English: Scribble Hub"
- "English: SleepyTranslations"
- "English: SonicMTL"
- "English: StorySeedling"
- "English: Sweet Escape"
- "English: System Translation"
- "English: TranslatinOtaku"
- "English: Translation Weaver"
- "English: Universal Novel"
- "English: Vandy Translate"
- "English: Violet Lily"
- "English: VyNovel"
- "English: Webnovel"
- "English: WebNovelLover"
- "English: Web Novel Translation"
- "English: Web Novel Pub"
- "English: White Moonlight Novels"
- '‎العربية: ArNovel'
- '‎العربية: Azora'
- '‎العربية: dilar tube'
- '‎العربية: HizoManga'
- '‎العربية: Kol Novel'
- '‎العربية: Novel4Up'
- '‎العربية: Novels Paradise'
- '‎العربية: Olaoe.cyou'
- '‎العربية: Rewayat Club'
- '‎العربية: Riwyat'
- '‎العربية: Sunovels'
- '中文, 汉语, 漢語: 69书吧'
- '中文, 汉语, 漢語: 爱下电子书'
- '中文, 汉语, 漢語: linovel'
- '中文, 汉语, 漢語: Linovelib'
- '中文, 汉语, 漢語: Linovelib(繁體)'
- '中文, 汉语, 漢語: Novel543'
- '中文, 汉语, 漢語: Quanben'
- 'English: FirstKissNovel'
- 'English: AllNovel'
- 'English: AllNovelFull'
- 'English: Arcane Translations'
- 'English: Archive Of Our Own'
- 'English: Srank Manga'
- 'English: Belle Reservoir'
- 'English: BestLightNovel'
- 'English: BoxNovel'
- 'English: Chrysanthemum Garden'
- 'English: Citrus Aurora'
- 'English: Coral Boutique'
- 'English: CPUnovel'
- 'English: Daoist Quest'
- 'English: DaoNovel'
- 'English: DaoTranslate'
- 'English: Divine Dao Library'
- 'English: Dearest Rosalie'
- 'English: Dragonholic'
- 'English: Dragon Tea'
- 'English: Dream Big Translations'
- 'English: Dusk Blossoms'
- 'English: Early Novel'
- 'English: ElloTL'
- 'English: Eternalune'
- 'English: Etude Translations'
- 'English: FanNovel'
- 'English: Fans Translations'
- 'English: Fenrir Realm'
- 'English: Fiction Zone'
- 'English: Foxaholic'
- 'English: Foxteller'
- 'English: Faq Wiki'
- 'English: Free Web Novel'
- 'English: Galaxy Translations'
- 'English: Genesis'
- 'English: Guavaread'
- 'English: Hiraeth Translation'
- 'English: HotNovelPub'
- 'English: Inkitt'
- 'English: Ippotranslations'
- 'English: KDT Novels'
- 'English: Keopi Translations'
- 'English: KnoxT'
- 'English: Lazy Girl Translations'
- 'English: Lib Read'
- 'English: LightNovelCave'
- 'English: LightNovelPlus'
- 'English: LightNovelPub'
- 'English: LightNovelPub Vip'
- 'English: Light Novel Translations'
- 'English: Light Novel Updates'
- 'English: LightNovelWord'
- 'English: Lily on the Valley'
- 'English: LightNovelHeaven'
- 'English: LnMTL'
- 'English: Ltnovel'
- 'English: LunarLetters'
- 'English: Meownovel'
- 'English: Moonlight Novels'
- 'English: MostNovel'
- 'English: MTL-Novel'
- 'English: MTL Novel'
- 'English: MTL Reader'
- 'English: MVLEMPYR'
- 'English: MysticalSeries'
- 'English: NeoSekai Translations'
- 'English: Nitro Manga'
- 'English: novelsOnline'
- 'English: NobleMTL'
- 'English: Novel Bin'
- 'English: NovelBuddy.io'
- 'English: NovelCool'
- 'English: Novel Fire'
- 'English: NovelFull'
- 'English: Novel Hall'
- 'English: NovelLib'
- 'English: Novelight'
- 'English: NovelMultiverse'
- 'English: NovelsKnight'
- 'English: NovelTranslate'
- 'English: Novel Updates'
- 'English: Panda Machine Translations'
- 'English: Pastel Tales'
- 'English: PawRead'
- 'English: Penguin Squad'
- 'English: Prizma'
- 'English: Rainofsnow'
- 'English: Ranobes'
- 'English: Ranovel'
- 'English: Read Fanfic'
- 'English: Read From Net'
- 'English: ReadNovelFull'
- 'English: Reaper Scans'
- 'English: Re:Library'
- 'English: Requiem Translations'
- 'English: ReadLiteNovel'
- 'English: Royal Road'
- 'English: Salmon Latte'
- 'English: Scribble Hub'
- 'English: SleepyTranslations'
- 'English: SonicMTL'
- 'English: StorySeedling'
- 'English: Sweet Escape'
- 'English: System Translation'
- 'English: TranslatinOtaku'
- 'English: Translation Weaver'
- 'English: Universal Novel'
- 'English: Vandy Translate'
- 'English: Violet Lily'
- 'English: VyNovel'
- 'English: Webnovel'
- 'English: WebNovelLover'
- 'English: Web Novel Translation'
- 'English: Web Novel Pub'
- 'English: White Moonlight Novels'
- "English: Wook's Teahouse"
- "English: WordExcerpt"
- "English: WTR-LAB"
- "English: Wuxiafox"
- "English: Fans MTL"
- "English: Wuxiabox"
- "English: Wuxia Space"
- "English: WuxiaV"
- "English: Wuxia World"
- "English: WuxiaWorld.Site"
- "English: Zetro Translation"
- "Français: Chireads"
- "Français: HarkenEliwood"
- "Français: KissWood"
- "Français: Ligh Novel FR"
- "Français: MassNovel"
- "Français: MTL Novel (FR)"
- "Français: NovelDeGlace"
- "Français: Novhell"
- "Français: PhenixScans"
- "Français: Warrior Legend Trad"
- "Français: WorldNovel"
- "Français: WuxiaLnScantrad"
- "Français: Xiaowaz"
- "Bahasa Indonesia: Baca Light Novel"
- "Bahasa Indonesia: IndoWebNovel"
- "Bahasa Indonesia: MeioNovel"
- "Bahasa Indonesia: Risenovel"
- "Bahasa Indonesia: MTL Novel (ID)"
- "Bahasa Indonesia: NovelBookID"
- "Bahasa Indonesia: NovelRingan"
- "Bahasa Indonesia: SakuraNovel"
- "Bahasa Indonesia: Sekte Novel"
- "Bahasa Indonesia: WBNovel"
- "日本語: kakuyomu"
- "日本語: Syosetu"
- "조선말, 한국어: Agitoon"
- "조선말, 한국어: Fortune Eternal"
- "Polski: Novelki"
- "Português: Better Novels"
- "Português: Blog do Amon Novels"
- "Português: Central Novel"
- "Português: Kiniga"
- "Português: LaNovels"
- "Português: Light Novel Brasil"
- "Português: MTL Novel (PT)"
- "Português: Novel Mania"
- "Português: Tsundoku Traduções"
- "Русский: Автор Тудей"
- "Русский: Bookhamster"
- "Русский: Bookriver"
- "Русский: Erolate"
- "Русский: EzNovels"
- "Русский: ficbook"
- "Русский: LitSpace"
- "Русский: Свободный Мир Ранобэ"
- "Русский: Jaomix"
- "Русский: MTL Novel (RU)"
- "Русский: Neobook"
- "Русский: NovelCool (RU)"
- "Русский: НовелОВХ"
- "Русский: Ranobes (RU)"
- "Русский: Renovels"
- "Русский: RanobeLib"
- "Русский: RanobeHub"
- "Русский: РанобэРФ"
- "Русский: Rulate"
- "Русский: Ruvers"
- "Русский: NovelTL"
- "Русский: ТопЛиба"
- "Русский: Целлюлоза"
- "Español: AllNovelRead"
- "Español: AnimesHoy12"
- "Español: Hasu Translations"
- "Español: LightNovelDaily"
- "Español: MTL Novel (ES)"
- "Español: Novelas Ligera"
- "Español: Oasis Translations"
- "Español: Pancho Translations"
- "Español: ReinoWuxia"
- "Español: SkyNovels"
- "Español: TC & Sega"
- "Español: Traducciones Amistosas"
- "Español: TuNovelaLigera"
- "Español: Yuuki Tls"
- "ไทย: Novel Lucky"
- "ไทย: Novel PDF"
- "Türkçe: Araz Novel"
- "Türkçe: E-KİTAPLAR"
- "Türkçe: EpikNovel"
- "Türkçe: kakikata"
- "Türkçe: Kodeks Library"
- "Türkçe: MangaTR"
- "Türkçe: NABİ SCANS"
- "Türkçe: Namevt"
- "Türkçe: Novel oku"
- "Türkçe: NovelTR"
- "Türkçe: Ragnar Scans"
- "Türkçe: ThNovels"
- "Türkçe: TurkceLightNovels"
- "Türkçe: WebNovelOku"
- "Українська: BakaInUA"
- "Українська: Смаколики"
- "Українська: UA Ranobe Club"
- "Tiếng Việt: Light Novel VN"
- "Tiếng Việt: Hako"
- "Tiếng Việt: Nettruyen"
- "Tiếng Việt: Truyện Chữ"
- "Tiếng Việt: Truyen Conect"
- "Tiếng Việt: Truyện Full"
- "Multi: Komga"
- 'English: WordExcerpt'
- 'English: WTR-LAB'
- 'English: Wuxiafox'
- 'English: Fans MTL'
- 'English: Wuxiabox'
- 'English: Wuxia Space'
- 'English: WuxiaV'
- 'English: Wuxia World'
- 'English: WuxiaWorld.Site'
- 'English: Zetro Translation'
- 'Français: Chireads'
- 'Français: HarkenEliwood'
- 'Français: KissWood'
- 'Français: Ligh Novel FR'
- 'Français: MassNovel'
- 'Français: MTL Novel (FR)'
- 'Français: NovelDeGlace'
- 'Français: Novhell'
- 'Français: PhenixScans'
- 'Français: Warrior Legend Trad'
- 'Français: WorldNovel'
- 'Français: WuxiaLnScantrad'
- 'Français: Xiaowaz'
- 'Bahasa Indonesia: Baca Light Novel'
- 'Bahasa Indonesia: IndoWebNovel'
- 'Bahasa Indonesia: MeioNovel'
- 'Bahasa Indonesia: Risenovel'
- 'Bahasa Indonesia: MTL Novel (ID)'
- 'Bahasa Indonesia: NovelBookID'
- 'Bahasa Indonesia: NovelRingan'
- 'Bahasa Indonesia: SakuraNovel'
- 'Bahasa Indonesia: Sekte Novel'
- 'Bahasa Indonesia: WBNovel'
- '日本語: kakuyomu'
- '日本語: Syosetu'
- '조선말, 한국어: Agitoon'
- '조선말, 한국어: Fortune Eternal'
- 'Polski: Novelki'
- 'Português: Better Novels'
- 'Português: Blog do Amon Novels'
- 'Português: Central Novel'
- 'Português: Kiniga'
- 'Português: LaNovels'
- 'Português: Light Novel Brasil'
- 'Português: MTL Novel (PT)'
- 'Português: Novel Mania'
- 'Português: Tsundoku Traduções'
- 'Русский: Автор Тудей'
- 'Русский: Bookhamster'
- 'Русский: Bookriver'
- 'Русский: Erolate'
- 'Русский: EzNovels'
- 'Русский: ficbook'
- 'Русский: LitSpace'
- 'Русский: Свободный Мир Ранобэ'
- 'Русский: Jaomix'
- 'Русский: MTL Novel (RU)'
- 'Русский: Neobook'
- 'Русский: NovelCool (RU)'
- 'Русский: НовелОВХ'
- 'Русский: Ranobes (RU)'
- 'Русский: Renovels'
- 'Русский: RanobeLib'
- 'Русский: RanobeHub'
- 'Русский: РанобэРФ'
- 'Русский: Rulate'
- 'Русский: Ruvers'
- 'Русский: NovelTL'
- 'Русский: ТопЛиба'
- 'Русский: Целлюлоза'
- 'Español: AllNovelRead'
- 'Español: AnimesHoy12'
- 'Español: Hasu Translations'
- 'Español: LightNovelDaily'
- 'Español: MTL Novel (ES)'
- 'Español: Novelas Ligera'
- 'Español: Oasis Translations'
- 'Español: Pancho Translations'
- 'Español: ReinoWuxia'
- 'Español: SkyNovels'
- 'Español: TC & Sega'
- 'Español: Traducciones Amistosas'
- 'Español: TuNovelaLigera'
- 'Español: Yuuki Tls'
- 'ไทย: Novel Lucky'
- 'ไทย: Novel PDF'
- 'Türkçe: Araz Novel'
- 'Türkçe: E-KİTAPLAR'
- 'Türkçe: EpikNovel'
- 'Türkçe: kakikata'
- 'Türkçe: Kodeks Library'
- 'Türkçe: MangaTR'
- 'Türkçe: NABİ SCANS'
- 'Türkçe: Namevt'
- 'Türkçe: Novel oku'
- 'Türkçe: NovelTR'
- 'Türkçe: Ragnar Scans'
- 'Türkçe: ThNovels'
- 'Türkçe: TurkceLightNovels'
- 'Türkçe: WebNovelOku'
- 'Українська: BakaInUA'
- 'Українська: Смаколики'
- 'Українська: UA Ranobe Club'
- 'Tiếng Việt: Light Novel VN'
- 'Tiếng Việt: Hako'
- 'Tiếng Việt: Nettruyen'
- 'Tiếng Việt: Truyện Chữ'
- 'Tiếng Việt: Truyen Conect'
- 'Tiếng Việt: Truyện Full'
- 'Multi: Komga'
validations:
required: true
@@ -264,14 +265,15 @@ body:
id: severity
attributes:
label: Severity
description: Select the severity of the issue you want to report.
description: Select the issue severity level.
multiple: false
options:
- Wrong formatting
- Wrong content
- Missing chapter
- Missing images
- Can't load novels
- Wrong Formatting
- Wrong Content
- Missing Chapter
- Missing Images
- Can't Load Novels
- Domain Changed
- Other
validations:
required: true
@@ -279,42 +281,43 @@ body:
- type: textarea
id: reproduce-steps
attributes:
label: Steps to reproduce
description: Provide an example of the issue.
label: Steps To Reproduce
description: Describe the steps to reproduce the issue.
placeholder: |
Example:
1. First step
2. Second step
3. Issue here
1. Open the plugin
2. Search for a novel
3. Error appears
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
label: Expected Behavior
description: What should happen?
placeholder: |
Example:
"This should happen..."
"The search results should display correctly..."
validations:
required: true
- type: textarea
id: actual-behavior
attributes:
label: Actual behavior
label: Actual Behavior
description: What actually happened?
placeholder: |
Example:
"This happened instead..."
"An error message appeared instead..."
validations:
required: true
- type: input
id: lnreader-version
attributes:
label: LNReader version
description: |
You can find your LNReader version in **More → About**.
label: LNReader Version
description: Find this in **More → About**.
placeholder: |
Example: "2.0.0"
validations:
@@ -323,9 +326,8 @@ body:
- type: input
id: plugin-version
attributes:
label: Plugin version
description: |
You can find your Plugin version in **Browse → Installed** and scrolling to the desired source.
label: Plugin Version
description: Find this in **Browse → Installed** next to the plugin name.
placeholder: |
Example: "1.0.1"
validations:
@@ -334,9 +336,8 @@ body:
- type: input
id: android-version
attributes:
label: Android version
description: |
You can find this somewhere in your Android settings.
label: Android Version
description: Find this in your device settings.
placeholder: |
Example: "Android 15"
validations:
@@ -345,24 +346,24 @@ body:
- type: textarea
id: other-details
attributes:
label: Other details
label: Other Details
description: Any additional information or screenshots.
placeholder: |
Additional details and attachments.
Additional context, screenshots, or relevant information.
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
description: Your issue will be closed if these requirements are not met.
options:
- label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue.
- label: I have searched existing issues and confirmed this is not a duplicate.
required: true
- label: I have written a short but informative title.
- label: I have written a clear and descriptive title.
required: true
- label: I have updated the app to version **[2.0.0](https://github.com/LNReader/lnreader/releases/tag/v2.0.0-beta.3).**
- label: I have updated the app to the latest version **[2.0.0](https://github.com/LNReader/lnreader/releases/tag/v2.0.0-beta.3)**.
required: true
- label: I have updated all installed extensions.
- label: I have updated all installed plugins to the latest version.
required: true
- label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/LNReader/lnreader/issues/new/choose).
- label: I understand that app-specific issues should be reported in the [app repository](https://github.com/LNReader/lnreader/issues/new/choose).
required: true
+14 -13
View File
@@ -1,38 +1,39 @@
name: Feature request
description: Suggest a feature to improve a source
name: Request Feature
description: Suggest an improvement for an existing plugin
labels: [Feature Request]
body:
- type: textarea
id: feature-description
attributes:
label: Describe your suggested feature
description: How can an existing extension be improved?
label: Feature Description
description: Describe the feature you would like to see added.
placeholder: |
Example:
"It should work like this..."
"Add support for latest novels list in Royal Road plugin..."
validations:
required: true
- type: textarea
id: other-details
attributes:
label: Other details
label: Other Details
description: Any additional context or mockups.
placeholder: |
Additional details and attachments.
Additional information, use cases, or examples.
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
description: Your issue will be closed if these requirements are not met.
options:
- label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue.
- label: I have searched existing issues and confirmed this is not a duplicate.
required: true
- label: I have written a short but informative title.
- label: I have written a clear and descriptive title.
required: true
- label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/LNReader/lnreader/issues/new/choose).
- label: I understand that app-specific features should be requested in the [app repository](https://github.com/LNReader/lnreader/issues/new/choose).
required: true
- label: I have updated the app to version **[1.1.19](https://github.com/LNReader/lnreader/releases/latest)**.
- label: I have updated the app to the latest version **[1.1.19](https://github.com/LNReader/lnreader/releases/latest)**.
required: true
- label: I will fill out all of the requested information in this form.
- label: I have provided all requested information in this form.
required: true
+56
View File
@@ -0,0 +1,56 @@
name: Request Plugin
description: Request a new plugin for LNReader
labels: [Plugin Request]
body:
- type: input
id: name
attributes:
label: Plugin Name
description: The name of the website or platform.
placeholder: |
Example: "Novel Updates"
validations:
required: true
- type: input
id: link
attributes:
label: Website URL
description: The URL of the website.
placeholder: |
Example: "https://example.com"
validations:
required: true
- type: input
id: language
attributes:
label: Language
description: The primary language of the website.
placeholder: |
Example: "English"
validations:
required: true
- type: textarea
id: other-details
attributes:
label: Other Details
description: Any additional information about the website.
placeholder: |
Why this plugin would be useful, special features, etc.
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if these requirements are not met.
options:
- label: I have searched existing issues and confirmed this plugin has not been requested before.
required: true
- label: I have used the plugin name as the issue title.
required: true
- label: I have verified this plugin does not already exist in the [repository](https://github.com/LNReader/lnreader-plugins).
required: true
- label: I have provided all requested information in this form.
required: true
+20 -12
View File
@@ -1,18 +1,24 @@
name: Source request
description: Suggest a new source for LNReader
labels: [Source Request]
name: Request Plugin
description: Request a new plugin for LNReader
labels: [Plugin Request]
body:
- type: input
id: name
attributes:
label: Source name
label: Plugin Name
description: The name of the website or platform.
placeholder: |
Example: "Novel Updates"
validations:
required: true
- type: input
id: link
attributes:
label: Source link
label: Website URL
description: The URL of the website.
placeholder: |
Example: "https://example.com"
validations:
required: true
@@ -20,6 +26,7 @@ body:
id: language
attributes:
label: Language
description: The primary language of the website.
placeholder: |
Example: "English"
validations:
@@ -28,21 +35,22 @@ body:
- type: textarea
id: other-details
attributes:
label: Other details
label: Other Details
description: Any additional information about the website.
placeholder: |
Additional details and attachments.
Why this plugin would be useful, special features, etc.
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
description: Your issue will be closed if these requirements are not met.
options:
- label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue.
- label: I have searched existing issues and confirmed this plugin has not been requested before.
required: true
- label: I have written a title with source name.
- label: I have used the plugin name as the issue title.
required: true
- label: I have checked that the extension does not already exist by searching the [GitHub repository](https://github.com/LNReader/lnreader/) and verified it does not appear in the code base.
- label: I have verified this plugin does not already exist in the [repository](https://github.com/LNReader/lnreader-plugins).
required: true
- label: I will fill out all of the requested information in this form.
- label: I have provided all requested information in this form.
required: true
+39 -38
View File
@@ -1,15 +1,16 @@
# DO NOT EDIT
# THIS FILE IS AUTO GENERATED FROM blank_report_issue.yml in the .github/scripts folder.
# DO NOT EDIT THIS FILE DIRECTLY
# This file is auto-generated from blank_report_issue.yml in .github/scripts/
# Any changes made here will be overwritten when plugins are published.
name: Issue report
description: Report a source issue in LNReader
name: Report Issue
description: Report a plugin issue in LNReader
labels: [Bug]
body:
- type: dropdown
id: source
attributes:
label: Plugin
description: Select the plugin associated with the issue.
description: Select the affected plugin(s).
multiple: true
options:
{#CHANGE#}
@@ -20,14 +21,15 @@ body:
id: severity
attributes:
label: Severity
description: Select the severity of the issue you want to report.
description: Select the issue severity level.
multiple: false
options:
- Wrong formatting
- Wrong content
- Missing chapter
- Missing images
- Can't load novels
- Wrong Formatting
- Wrong Content
- Missing Chapter
- Missing Images
- Can't Load Novels
- Domain Changed
- Other
validations:
required: true
@@ -35,42 +37,43 @@ body:
- type: textarea
id: reproduce-steps
attributes:
label: Steps to reproduce
description: Provide an example of the issue.
label: Steps To Reproduce
description: Describe the steps to reproduce the issue.
placeholder: |
Example:
1. First step
2. Second step
3. Issue here
1. Open the plugin
2. Search for a novel
3. Error appears
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
label: Expected Behavior
description: What should happen?
placeholder: |
Example:
"This should happen..."
"The search results should display correctly..."
validations:
required: true
- type: textarea
id: actual-behavior
attributes:
label: Actual behavior
label: Actual Behavior
description: What actually happened?
placeholder: |
Example:
"This happened instead..."
"An error message appeared instead..."
validations:
required: true
- type: input
id: lnreader-version
attributes:
label: LNReader version
description: |
You can find your LNReader version in **More → About**.
label: LNReader Version
description: Find this in **More → About**.
placeholder: |
Example: "2.0.0"
validations:
@@ -79,9 +82,8 @@ body:
- type: input
id: plugin-version
attributes:
label: Plugin version
description: |
You can find your Plugin version in **Browse → Installed** and scrolling to the desired source.
label: Plugin Version
description: Find this in **Browse → Installed** next to the plugin name.
placeholder: |
Example: "1.0.1"
validations:
@@ -90,9 +92,8 @@ body:
- type: input
id: android-version
attributes:
label: Android version
description: |
You can find this somewhere in your Android settings.
label: Android Version
description: Find this in your device settings.
placeholder: |
Example: "Android 15"
validations:
@@ -101,24 +102,24 @@ body:
- type: textarea
id: other-details
attributes:
label: Other details
label: Other Details
description: Any additional information or screenshots.
placeholder: |
Additional details and attachments.
Additional context, screenshots, or relevant information.
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
description: Your issue will be closed if these requirements are not met.
options:
- label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue.
- label: I have searched existing issues and confirmed this is not a duplicate.
required: true
- label: I have written a short but informative title.
- label: I have written a clear and descriptive title.
required: true
- label: I have updated the app to version **[2.0.0](https://github.com/LNReader/lnreader/releases/tag/v2.0.0-beta.3).**
- label: I have updated the app to the latest version **[2.0.0](https://github.com/LNReader/lnreader/releases/tag/v2.0.0-beta.3)**.
required: true
- label: I have updated all installed extensions.
- label: I have updated all installed plugins to the latest version.
required: true
- label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/LNReader/lnreader/issues/new/choose).
- label: I understand that app-specific issues should be reported in the [app repository](https://github.com/LNReader/lnreader/issues/new/choose).
required: true
-40
View File
@@ -1,40 +0,0 @@
const version = require('../../package.json').version;
const dist = `plugins/v${version}`;
const fs = require('fs');
const rawText = fs.readFileSync(
'.github/scripts/blank_report_issue.yml',
'utf8',
);
async function main() {
const pluginsRaw = await fetch(
`https://raw.githubusercontent.com/LNReader/lnreader-plugins/${dist}/.dist/plugins.min.json`,
).then(res => res.json());
const plugins = pluginsRaw.reduce((arr, plugin) => {
arr[plugin.lang + ': ' + plugin.name] = plugin.id;
return arr;
}, {});
let newKeys = Object.keys(plugins);
let savedKeys = [];
try {
let keys = JSON.parse(fs.readFileSync('.github/scripts/keys.json', 'utf8'));
savedKeys = Object.keys(keys);
} catch (err) {
console.log(err);
}
if (!sameKeys(newKeys, savedKeys) && Array.isArray(newKeys)) {
const text = newKeys.join('"\n - "');
fs.writeFileSync(
'.github/ISSUE_TEMPLATE/report_issue.yml',
rawText.replace(/{#CHANGE#}/g, '- "' + text + '"'),
);
fs.writeFileSync('.github/scripts/keys.json', JSON.stringify(plugins));
}
function sameKeys(a, b) {
return a.length === b.length && a.every(value => b.includes(value));
}
}
main();
@@ -0,0 +1,69 @@
const version = require('../../package.json').version;
const dist = `plugins/v${version}`;
const fs = require('fs');
const rawText = fs.readFileSync(
'.github/scripts/blank_report_issue.yml',
'utf8',
);
async function main() {
console.log(`Fetching plugins from: ${dist}`);
try {
const response = await fetch(
`https://raw.githubusercontent.com/LNReader/lnreader-plugins/${dist}/.dist/plugins.min.json`,
);
if (!response.ok) {
throw new Error(
`Failed to fetch plugins: ${response.status} ${response.statusText}`,
);
}
const pluginsRaw = await response.json();
console.log(`Found ${pluginsRaw.length} plugins`);
const plugins = pluginsRaw.reduce((arr, plugin) => {
arr[plugin.lang + ': ' + plugin.name] = plugin.id;
return arr;
}, {});
let newKeys = Object.keys(plugins);
let savedKeys = [];
try {
let keys = JSON.parse(
fs.readFileSync('.github/scripts/keys.json', 'utf8'),
);
savedKeys = Object.keys(keys);
console.log(`Loaded ${savedKeys.length} existing plugin keys`);
} catch (err) {
console.log('No existing keys file found, creating new one');
}
if (!sameKeys(newKeys, savedKeys) && Array.isArray(newKeys)) {
console.log('Plugin list has changed, updating issue template...');
const text = newKeys.join('"\n - "');
fs.writeFileSync(
'.github/ISSUE_TEMPLATE/report_issue.yml',
rawText.replace(/{#CHANGE#}/g, '- "' + text + '"'),
);
fs.writeFileSync('.github/scripts/keys.json', JSON.stringify(plugins));
console.log('Issue template updated successfully');
} else {
console.log('No changes detected in plugin list');
}
function sameKeys(a, b) {
return a.length === b.length && a.every(value => b.includes(value));
}
} catch (error) {
console.error('Error generating issue template options:', error.message);
throw error;
}
}
main().catch(err => {
console.error('Fatal error:', err);
process.exit(1);
});
+15 -11
View File
@@ -6,23 +6,28 @@ on:
- opened
- edited
concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number }}
cancel-in-progress: true
jobs:
auto-label:
name: Auto Label Issues
if: ${{ github.event.issue.body && contains(github.event.issue.body, '### Plugin') }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Checkout Repository
uses: actions/checkout@v4
- name: Extract the severity from issue body
- name: Extract Severity From Issue Body
id: extract-severity
run: |
USER_SELECTED_SEVERITY=$(echo "${{ github.event.issue.body }}" | grep "### Severity" -A 2 | tail -n 1 | sed 's/[[:space:]]*$//')
SELECTED_SEVERITY=""
case "$USER_SELECTED_SEVERITY" in
"Wrong formatting"|"Wrong content"|"Missing chapter"|"Missing images"|"Can't load novels")
"Wrong Formatting"|"Wrong Content"|"Missing Chapter"|"Missing Images"|"Can't Load Novels"|"Domain Changed")
SELECTED_SEVERITY="$USER_SELECTED_SEVERITY"
;;
*)
@@ -31,14 +36,14 @@ jobs:
esac
echo "SELECTED_SEVERITY=$SELECTED_SEVERITY" >> $GITHUB_ENV
- name: Extract the plugin from issue body
- name: Extract Plugin From Issue Body
id: parse-issue
run: |
run: |
SELECTED_PLUGIN=$(echo "${{ github.event.issue.body }}" | awk '/### Plugin/ {f=1; next} f && NF {print; exit}' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
echo "SELECTED_PLUGIN=$SELECTED_PLUGIN" >> $GITHUB_ENV
- name: Determine corresponding label
- name: Determine Corresponding Label
id: determine-label
run: |
LABELS="$( jq --arg keys "${{ env.SELECTED_PLUGIN }}" '. as $data | $keys | split(", ") as $keyList | $keyList[] | . as $key | if $data[$key] != null then "\($key)[\($data[$key])]" else empty end' ./.github/scripts/keys.json | sed 's/"//g' | sed 's/^[^:]*: //' )"
@@ -49,8 +54,7 @@ jobs:
# Save to GitHub environment
printf "LABELS<<EOF\n%s\nEOF\n" "$LABELS_WITH_PREFIX" >> $GITHUB_ENV
- name: Add label to the issue
- name: Add Labels To Issue
if: env.LABELS != ''
uses: actions-ecosystem/action-add-labels@v1
with:
@@ -59,6 +63,6 @@ jobs:
Severity: ${{ env.SELECTED_SEVERITY }}
${{ env.LABELS }}
- name: Handle missing label
- name: Handle Missing Label
if: env.LABELS == ''
run: echo "No matching label found for the selected plugin."
+11 -6
View File
@@ -1,4 +1,4 @@
name: Issue moderator
name: Issue Moderator
on:
issues:
@@ -6,11 +6,16 @@ on:
issue_comment:
types: [created]
concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number }}
cancel-in-progress: false
jobs:
autoclose:
name: Auto Close Invalid Issues
runs-on: ubuntu-latest
steps:
- name: Moderate issues
- name: Moderate Issues
uses: tachiyomiorg/issue-moderator-action@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
@@ -18,10 +23,10 @@ jobs:
duplicate-check-enabled: true
duplicate-check-labels: |
["Source Request", "Domain Changed"]
["Plugin Request", "Domain Changed"]
existing-check-enabled: false
auto-close-rules: |
[
{
@@ -36,8 +41,8 @@ jobs:
},
{
"type": "title",
"regex": ".*(Source name|Short description).*",
"regex": ".*(Plugin name|Short description).*",
"message": "You did not fill out the description in the title"
}
]
auto-close-ignore-label: do-not-autoclose
auto-close-ignore-label: do-not-autoclose
+11 -8
View File
@@ -1,19 +1,22 @@
name: Lock threads
name: Lock Threads
on:
# Daily
schedule:
- cron: "0 0 * * *"
# Manual trigger
- cron: '0 0 * * *'
workflow_dispatch:
inputs:
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false
jobs:
lock:
name: Lock Inactive Threads
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v2
- name: Lock Inactive Issues And Pull Requests
uses: dessant/lock-threads@v5
with:
github-token: ${{ github.token }}
issue-lock-inactive-days: "2"
pr-lock-inactive-days: "2"
issue-lock-inactive-days: '2'
pr-lock-inactive-days: '2'
+14 -10
View File
@@ -1,29 +1,33 @@
name: Prettier
name: Format Check
on:
pull_request:
branches: [master]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
Prettier:
format-check:
name: Check Code Formatting
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Checkout Repository
uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Dependencies
- name: Install Prettier
run: |
rm package.json
rm package-lock.json
npm init -y
npm pkg set type="module"
npm i prettier@3.2.5
npm install prettier@3.2.5
- name: Prettier
- name: Check Code Formatting
run: npx prettier --check "./src/**/*.{ts,tsx,js,css}"
@@ -2,35 +2,42 @@ name: Publish Plugins
on:
push:
branches:
- master
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
Publish:
publish:
name: Publish Plugins
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Checkout Repository
uses: actions/checkout@v4
with:
token: ${{ secrets.REPO_SCOPED_TOKEN }}
- uses: actions/setup-node@v3
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Dependencies
run: npm install --omit=dev --ignore-scripts
- name: Setup Git
- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- if: github.repository == 'LNReader/lnreader-plugins'
name: Publish Plugins Main Repo
- name: Publish Plugins (Main Repository)
if: github.repository == 'LNReader/lnreader-plugins'
run: npm run publish:plugins 2>> $GITHUB_STEP_SUMMARY
shell: bash
- if: github.repository != 'LNReader/lnreader-plugins'
name: Publish Plugins All Branches
- name: Publish Plugins (Fork - All Branches)
if: github.repository != 'LNReader/lnreader-plugins'
run: npm run publish:plugins -- --all-branches
shell: bash
+45 -31
View File
@@ -4,20 +4,25 @@ on:
issues:
types: [labeled]
concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number }}
cancel-in-progress: true
jobs:
auto-label:
if: contains(github.event.issue.labels.*.name, 'Source Request')
name: Auto Label Theme
if: contains(github.event.issue.labels.*.name, 'Plugin Request')
runs-on: ubuntu-latest
env:
REPO: ${{ github.repository }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
steps:
- name: Get Source Request URL
- name: Get Plugin Website URL
id: get_url
env:
ISSUE_BODY: ${{ github.event.issue.body }}
run: |
URL=$(echo "$ISSUE_BODY" | sed -n '/### Source link/,+2p' | sed '1,2d' | tr -d '[:space:]')
URL=$(echo "$ISSUE_BODY" | sed -n '/### Website URL/,+2p' | sed '1,2d' | tr -d '[:space:]')
echo "URL=$URL" >> $GITHUB_OUTPUT
echo "Using URL: \`$URL\`" >> $GITHUB_STEP_SUMMARY
@@ -36,71 +41,75 @@ jobs:
CHROME_VERSION=$(curl -s https://chromiumdash.appspot.com/fetch_releases?channel=Stable\&platform=Windows\&num=1 | jq -r '.[0].version // "126.0.6478.36"')
echo "USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/$CHROME_VERSION Safari/537.36" >> $GITHUB_OUTPUT
- name: Check Madara theme
- name: Check Madara Theme
id: check_madara
env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: |
if curl --location --output /dev/null --silent --head --fail "https://$BASE_URL/wp-content/themes/madara/style.css" -H "User-Agent: $USER_AGENT"; then
echo "madara=true" >> $GITHUB_OUTPUT
echo "✅ Madara Theme Detected" >> $GITHUB_STEP_SUMMARY
elif curl --location --output /dev/null --silent --head --fail "http://$BASE_URL/wp-content/themes/madara/style.css" -H "User-Agent: $USER_AGENT"; then
echo "🔍 Checking for Madara theme..." >> $GITHUB_STEP_SUMMARY
if curl --location --output /dev/null --silent --head --fail --max-time 10 "https://$BASE_URL/wp-content/themes/madara/style.css" -H "User-Agent: $USER_AGENT" 2>/dev/null || \
curl --location --output /dev/null --silent --head --fail --max-time 10 "http://$BASE_URL/wp-content/themes/madara/style.css" -H "User-Agent: $USER_AGENT" 2>/dev/null; then
echo "madara=true" >> $GITHUB_OUTPUT
echo "✅ Madara Theme Detected" >> $GITHUB_STEP_SUMMARY
else
echo "madara=false" >> $GITHUB_OUTPUT
echo "❌ Madara Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi
- name: Check Lighnovelwp theme
- name: Check Lightnovelwp Theme
id: check_lighnovelwp
if: always() && steps.check_madara.outputs.madara != 'true'
env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: |
if curl --location --output /dev/null --silent --head --fail "https://$BASE_URL/wp-content/themes/lightnovel/style.css" -H "User-Agent: $USER_AGENT"; then
echo "🔍 Checking for Lightnovelwp theme..." >> $GITHUB_STEP_SUMMARY
if curl --location --output /dev/null --silent --head --fail --max-time 10 "https://$BASE_URL/wp-content/themes/lightnovel/style.css" -H "User-Agent: $USER_AGENT" 2>/dev/null || \
curl --location --output /dev/null --silent --head --fail --max-time 10 "http://$BASE_URL/wp-content/themes/lightnovel/style.css" -H "User-Agent: $USER_AGENT" 2>/dev/null; then
echo "lighnovelwp=true" >> $GITHUB_OUTPUT
echo "✅ Lighnovelwp Theme Detected" >> $GITHUB_STEP_SUMMARY
elif curl --location --output /dev/null --silent --head --fail "http://$BASE_URL/wp-content/themes/lightnovel/style.css" -H "User-Agent: $USER_AGENT"; then
echo "lighnovelwp=true" >> $GITHUB_OUTPUT
echo "✅ Lighnovelwp Theme Detected" >> $GITHUB_STEP_SUMMARY
echo "✅ Lightnovelwp Theme Detected" >> $GITHUB_STEP_SUMMARY
else
echo "lighnovelwp=false" >> $GITHUB_OUTPUT
echo "❌ Lightnovelwp Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi
- name: Check HotNovelPub theme
- name: Check HotNovelPub Theme
id: check_hotnovelpub
if: always() && steps.check_madara.outputs.madara != 'true' && steps.check_lighnovelwp.outputs.lighnovelwp != 'true'
env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: |
if curl --location --silent --fail "https://api.$BASE_URL" -H "User-Agent: $USER_AGENT" | grep -q "Hello\!"; then
echo "hotnovelpub=true" >> $GITHUB_OUTPUT
echo "✅ HotNovelPub Theme Detected" >> $GITHUB_STEP_SUMMARY
elif curl --location --silent --fail "http://api.$BASE_URL" -H "User-Agent: $USER_AGENT" | grep -q "Hello\!"; then
echo "hotnovelpub=true" >> $GITHUB_OUTPUT
echo "✅ HotNovelPub Theme Detected" >> $GITHUB_STEP_SUMMARY
else
echo "hotnovelpub=false" >> $GITHUB_OUTPUT
fi
echo "🔍 Checking for HotNovelPub theme..." >> $GITHUB_STEP_SUMMARY
if curl --location --silent --fail --max-time 10 "https://api.$BASE_URL" -H "User-Agent: $USER_AGENT" 2>/dev/null | grep -q "Hello\!" || \
curl --location --silent --fail --max-time 10 "http://api.$BASE_URL" -H "User-Agent: $USER_AGENT" 2>/dev/null | grep -q "Hello\!"; then
echo "hotnovelpub=true" >> $GITHUB_OUTPUT
echo "✅ HotNovelPub Theme Detected" >> $GITHUB_STEP_SUMMARY
else
echo "hotnovelpub=false" >> $GITHUB_OUTPUT
echo "❌ HotNovelPub Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi
- name: Check Fictioneer theme
- name: Check Fictioneer Theme
id: check_fictioneer
if: always() && steps.check_madara.outputs.madara != 'true' && steps.check_lighnovelwp.outputs.lighnovelwp != 'true' && steps.check_hotnovelpub.outputs.hotnovelpub != 'true'
env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: |
if curl --location --output /dev/null --silent --head --fail "https://$BASE_URL/wp-content/themes/fictioneer/css/application.css" -H "User-Agent: $USER_AGENT"; then
echo "fictioneer=true" >> $GITHUB_OUTPUT
echo "✅ Fictioneer Theme Detected" >> $GITHUB_STEP_SUMMARY
elif curl --location --output /dev/null --silent --head --fail "http://$BASE_URL/wp-content/themes/fictioneer/css/application.css" -H "User-Agent: $USER_AGENT"; then
echo "🔍 Checking for Fictioneer theme..." >> $GITHUB_STEP_SUMMARY
if curl --location --output /dev/null --silent --head --fail --max-time 10 "https://$BASE_URL/wp-content/themes/fictioneer/css/application.css" -H "User-Agent: $USER_AGENT" 2>/dev/null || \
curl --location --output /dev/null --silent --head --fail --max-time 10 "http://$BASE_URL/wp-content/themes/fictioneer/css/application.css" -H "User-Agent: $USER_AGENT" 2>/dev/null; then
echo "fictioneer=true" >> $GITHUB_OUTPUT
echo "✅ Fictioneer Theme Detected" >> $GITHUB_STEP_SUMMARY
else
echo "fictioneer=false" >> $GITHUB_OUTPUT
echo "❌ Fictioneer Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi
- name: Add Label
- name: Add Theme Label To Issue
if: always()
env:
MADARA: ${{ steps.check_madara.outputs.madara }}
LIGHNOVELWP: ${{ steps.check_lighnovelwp.outputs.lighnovelwp }}
@@ -108,14 +117,19 @@ jobs:
FICTIONEER: ${{ steps.check_fictioneer.outputs.fictioneer }}
GH_TOKEN: ${{ github.token }}
run: |
echo "## Theme Detection Result" >> $GITHUB_STEP_SUMMARY
if [[ "$MADARA" == "true" ]]; then
echo "🏷️ Adding label: Theme: Madara" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Madara" -R $REPO
elif [[ "$LIGHNOVELWP" == "true" ]]; then
echo "🏷️ Adding label: Theme: Lighnovelwp" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Lighnovelwp" -R $REPO
elif [[ "$HOTNOVELPUB" == "true" ]]; then
echo "🏷️ Adding label: Theme: Hotnovelpub" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Hotnovelpub" -R $REPO
elif [[ "$FICTIONEER" == "true" ]]; then
echo "🏷️ Adding label: Theme: Fictioneer" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Fictioneer" -R $REPO
else
echo "No Theme Detected" >> $GITHUB_STEP_SUMMARY
echo "❌ No Theme Detected" >> $GITHUB_STEP_SUMMARY
fi
@@ -0,0 +1,53 @@
name: Update Issue Template
on:
workflow_run:
workflows:
- Publish Plugins
types:
- completed
branches:
- master
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
update_template:
name: Update Issue Template
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
if: |
github.repository == 'LNReader/lnreader-plugins' &&
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'push'
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
ref: master
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Generate Issue Template Options
run: node ./.github/scripts/generate-issue-template-options.cjs
- name: Create Or Update Pull Request
uses: peter-evans/create-pull-request@v7
with:
commit-message: 'chore: Update Issue Template Plugin Options [skip ci]'
branch: 'update-issue-template'
title: 'chore: Update Issue Template Plugin Options'
body: |
Updates the issue template with the latest plugin dropdown options.
This PR is automatically generated after plugins are published.
labels: 'bot'
base: 'master'
delete-branch: true
-38
View File
@@ -1,38 +0,0 @@
name: Update Issue Template
on:
workflow_run:
workflows:
- Publish Plugins
types:
- completed
jobs:
update_template:
if: github.repository == 'LNReader/lnreader-plugins' && github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: master
- uses: actions/setup-node@v3
with:
node-version: '20'
- name: Recreating report issue template
run: |
node ./.github/scripts/createOptions.cjs
- name: Create or Update Pull Request
uses: peter-evans/create-pull-request@v5
with:
commit-message: '[skip ci] Update issue template with plugin dropdown options'
branch: 'update-issue-template'
title: 'Update Issue Template'
body: |
This PR updates the issue template with the latest plugin dropdown options.
If this PR already exists, it will be updated automatically with the latest changes.
labels: 'bot'
base: 'master'
delete-branch: true