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 # DO NOT EDIT THIS FILE DIRECTLY
# THIS FILE IS AUTO GENERATED FROM blank_report_issue.yml in the .github/scripts folder. # 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 name: Report Issue
description: Report a source issue in LNReader description: Report a plugin issue in LNReader
labels: [Bug] labels: [Bug]
body: body:
- type: dropdown - type: dropdown
id: source id: source
attributes: attributes:
label: Plugin label: Plugin
description: Select the plugin associated with the issue. description: Select the affected plugin(s).
multiple: true multiple: true
options: options:
- "‎العربية: ArNovel" - '‎العربية: ArNovel'
- "‎العربية: Azora" - '‎العربية: Azora'
- "‎العربية: dilar tube" - '‎العربية: dilar tube'
- "‎العربية: HizoManga" - '‎العربية: HizoManga'
- "‎العربية: Kol Novel" - '‎العربية: Kol Novel'
- "‎العربية: Novel4Up" - '‎العربية: Novel4Up'
- "‎العربية: Novels Paradise" - '‎العربية: Novels Paradise'
- "‎العربية: Olaoe.cyou" - '‎العربية: Olaoe.cyou'
- "‎العربية: Rewayat Club" - '‎العربية: Rewayat Club'
- "‎العربية: Riwyat" - '‎العربية: Riwyat'
- "‎العربية: Sunovels" - '‎العربية: Sunovels'
- "中文, 汉语, 漢語: 69书吧" - '中文, 汉语, 漢語: 69书吧'
- "中文, 汉语, 漢語: 爱下电子书" - '中文, 汉语, 漢語: 爱下电子书'
- "中文, 汉语, 漢語: linovel" - '中文, 汉语, 漢語: linovel'
- "中文, 汉语, 漢語: Linovelib" - '中文, 汉语, 漢語: Linovelib'
- "中文, 汉语, 漢語: Linovelib(繁體)" - '中文, 汉语, 漢語: Linovelib(繁體)'
- "中文, 汉语, 漢語: Novel543" - '中文, 汉语, 漢語: Novel543'
- "中文, 汉语, 漢語: Quanben" - '中文, 汉语, 漢語: Quanben'
- "English: FirstKissNovel" - 'English: FirstKissNovel'
- "English: AllNovel" - 'English: AllNovel'
- "English: AllNovelFull" - 'English: AllNovelFull'
- "English: Arcane Translations" - 'English: Arcane Translations'
- "English: Archive Of Our Own" - 'English: Archive Of Our Own'
- "English: Srank Manga" - 'English: Srank Manga'
- "English: Belle Reservoir" - 'English: Belle Reservoir'
- "English: BestLightNovel" - 'English: BestLightNovel'
- "English: BoxNovel" - 'English: BoxNovel'
- "English: Chrysanthemum Garden" - 'English: Chrysanthemum Garden'
- "English: Citrus Aurora" - 'English: Citrus Aurora'
- "English: Coral Boutique" - 'English: Coral Boutique'
- "English: CPUnovel" - 'English: CPUnovel'
- "English: Daoist Quest" - 'English: Daoist Quest'
- "English: DaoNovel" - 'English: DaoNovel'
- "English: DaoTranslate" - 'English: DaoTranslate'
- "English: Divine Dao Library" - 'English: Divine Dao Library'
- "English: Dearest Rosalie" - 'English: Dearest Rosalie'
- "English: Dragonholic" - 'English: Dragonholic'
- "English: Dragon Tea" - 'English: Dragon Tea'
- "English: Dream Big Translations" - 'English: Dream Big Translations'
- "English: Dusk Blossoms" - 'English: Dusk Blossoms'
- "English: Early Novel" - 'English: Early Novel'
- "English: ElloTL" - 'English: ElloTL'
- "English: Eternalune" - 'English: Eternalune'
- "English: Etude Translations" - 'English: Etude Translations'
- "English: FanNovel" - 'English: FanNovel'
- "English: Fans Translations" - 'English: Fans Translations'
- "English: Fenrir Realm" - 'English: Fenrir Realm'
- "English: Fiction Zone" - 'English: Fiction Zone'
- "English: Foxaholic" - 'English: Foxaholic'
- "English: Foxteller" - 'English: Foxteller'
- "English: Faq Wiki" - 'English: Faq Wiki'
- "English: Free Web Novel" - 'English: Free Web Novel'
- "English: Galaxy Translations" - 'English: Galaxy Translations'
- "English: Genesis" - 'English: Genesis'
- "English: Guavaread" - 'English: Guavaread'
- "English: Hiraeth Translation" - 'English: Hiraeth Translation'
- "English: HotNovelPub" - 'English: HotNovelPub'
- "English: Inkitt" - 'English: Inkitt'
- "English: Ippotranslations" - 'English: Ippotranslations'
- "English: KDT Novels" - 'English: KDT Novels'
- "English: Keopi Translations" - 'English: Keopi Translations'
- "English: KnoxT" - 'English: KnoxT'
- "English: Lazy Girl Translations" - 'English: Lazy Girl Translations'
- "English: Lib Read" - 'English: Lib Read'
- "English: LightNovelCave" - 'English: LightNovelCave'
- "English: LightNovelPlus" - 'English: LightNovelPlus'
- "English: LightNovelPub" - 'English: LightNovelPub'
- "English: LightNovelPub Vip" - 'English: LightNovelPub Vip'
- "English: Light Novel Translations" - 'English: Light Novel Translations'
- "English: Light Novel Updates" - 'English: Light Novel Updates'
- "English: LightNovelWord" - 'English: LightNovelWord'
- "English: Lily on the Valley" - 'English: Lily on the Valley'
- "English: LightNovelHeaven" - 'English: LightNovelHeaven'
- "English: LnMTL" - 'English: LnMTL'
- "English: Ltnovel" - 'English: Ltnovel'
- "English: LunarLetters" - 'English: LunarLetters'
- "English: Meownovel" - 'English: Meownovel'
- "English: Moonlight Novels" - 'English: Moonlight Novels'
- "English: MostNovel" - 'English: MostNovel'
- "English: MTL-Novel" - 'English: MTL-Novel'
- "English: MTL Novel" - 'English: MTL Novel'
- "English: MTL Reader" - 'English: MTL Reader'
- "English: MVLEMPYR" - 'English: MVLEMPYR'
- "English: MysticalSeries" - 'English: MysticalSeries'
- "English: NeoSekai Translations" - 'English: NeoSekai Translations'
- "English: Nitro Manga" - 'English: Nitro Manga'
- "English: novelsOnline" - 'English: novelsOnline'
- "English: NobleMTL" - 'English: NobleMTL'
- "English: Novel Bin" - 'English: Novel Bin'
- "English: NovelBuddy.io" - 'English: NovelBuddy.io'
- "English: NovelCool" - 'English: NovelCool'
- "English: Novel Fire" - 'English: Novel Fire'
- "English: NovelFull" - 'English: NovelFull'
- "English: Novel Hall" - 'English: Novel Hall'
- "English: NovelLib" - 'English: NovelLib'
- "English: Novelight" - 'English: Novelight'
- "English: NovelMultiverse" - 'English: NovelMultiverse'
- "English: NovelsKnight" - 'English: NovelsKnight'
- "English: NovelTranslate" - 'English: NovelTranslate'
- "English: Novel Updates" - 'English: Novel Updates'
- "English: Panda Machine Translations" - 'English: Panda Machine Translations'
- "English: Pastel Tales" - 'English: Pastel Tales'
- "English: PawRead" - 'English: PawRead'
- "English: Penguin Squad" - 'English: Penguin Squad'
- "English: Prizma" - 'English: Prizma'
- "English: Rainofsnow" - 'English: Rainofsnow'
- "English: Ranobes" - 'English: Ranobes'
- "English: Ranovel" - 'English: Ranovel'
- "English: Read Fanfic" - 'English: Read Fanfic'
- "English: Read From Net" - 'English: Read From Net'
- "English: ReadNovelFull" - 'English: ReadNovelFull'
- "English: Reaper Scans" - 'English: Reaper Scans'
- "English: Re:Library" - 'English: Re:Library'
- "English: Requiem Translations" - 'English: Requiem Translations'
- "English: ReadLiteNovel" - 'English: ReadLiteNovel'
- "English: Royal Road" - 'English: Royal Road'
- "English: Salmon Latte" - 'English: Salmon Latte'
- "English: Scribble Hub" - 'English: Scribble Hub'
- "English: SleepyTranslations" - 'English: SleepyTranslations'
- "English: SonicMTL" - 'English: SonicMTL'
- "English: StorySeedling" - 'English: StorySeedling'
- "English: Sweet Escape" - 'English: Sweet Escape'
- "English: System Translation" - 'English: System Translation'
- "English: TranslatinOtaku" - 'English: TranslatinOtaku'
- "English: Translation Weaver" - 'English: Translation Weaver'
- "English: Universal Novel" - 'English: Universal Novel'
- "English: Vandy Translate" - 'English: Vandy Translate'
- "English: Violet Lily" - 'English: Violet Lily'
- "English: VyNovel" - 'English: VyNovel'
- "English: Webnovel" - 'English: Webnovel'
- "English: WebNovelLover" - 'English: WebNovelLover'
- "English: Web Novel Translation" - 'English: Web Novel Translation'
- "English: Web Novel Pub" - 'English: Web Novel Pub'
- "English: White Moonlight Novels" - 'English: White Moonlight Novels'
- "English: Wook's Teahouse" - "English: Wook's Teahouse"
- "English: WordExcerpt" - 'English: WordExcerpt'
- "English: WTR-LAB" - 'English: WTR-LAB'
- "English: Wuxiafox" - 'English: Wuxiafox'
- "English: Fans MTL" - 'English: Fans MTL'
- "English: Wuxiabox" - 'English: Wuxiabox'
- "English: Wuxia Space" - 'English: Wuxia Space'
- "English: WuxiaV" - 'English: WuxiaV'
- "English: Wuxia World" - 'English: Wuxia World'
- "English: WuxiaWorld.Site" - 'English: WuxiaWorld.Site'
- "English: Zetro Translation" - 'English: Zetro Translation'
- "Français: Chireads" - 'Français: Chireads'
- "Français: HarkenEliwood" - 'Français: HarkenEliwood'
- "Français: KissWood" - 'Français: KissWood'
- "Français: Ligh Novel FR" - 'Français: Ligh Novel FR'
- "Français: MassNovel" - 'Français: MassNovel'
- "Français: MTL Novel (FR)" - 'Français: MTL Novel (FR)'
- "Français: NovelDeGlace" - 'Français: NovelDeGlace'
- "Français: Novhell" - 'Français: Novhell'
- "Français: PhenixScans" - 'Français: PhenixScans'
- "Français: Warrior Legend Trad" - 'Français: Warrior Legend Trad'
- "Français: WorldNovel" - 'Français: WorldNovel'
- "Français: WuxiaLnScantrad" - 'Français: WuxiaLnScantrad'
- "Français: Xiaowaz" - 'Français: Xiaowaz'
- "Bahasa Indonesia: Baca Light Novel" - 'Bahasa Indonesia: Baca Light Novel'
- "Bahasa Indonesia: IndoWebNovel" - 'Bahasa Indonesia: IndoWebNovel'
- "Bahasa Indonesia: MeioNovel" - 'Bahasa Indonesia: MeioNovel'
- "Bahasa Indonesia: Risenovel" - 'Bahasa Indonesia: Risenovel'
- "Bahasa Indonesia: MTL Novel (ID)" - 'Bahasa Indonesia: MTL Novel (ID)'
- "Bahasa Indonesia: NovelBookID" - 'Bahasa Indonesia: NovelBookID'
- "Bahasa Indonesia: NovelRingan" - 'Bahasa Indonesia: NovelRingan'
- "Bahasa Indonesia: SakuraNovel" - 'Bahasa Indonesia: SakuraNovel'
- "Bahasa Indonesia: Sekte Novel" - 'Bahasa Indonesia: Sekte Novel'
- "Bahasa Indonesia: WBNovel" - 'Bahasa Indonesia: WBNovel'
- "日本語: kakuyomu" - '日本語: kakuyomu'
- "日本語: Syosetu" - '日本語: Syosetu'
- "조선말, 한국어: Agitoon" - '조선말, 한국어: Agitoon'
- "조선말, 한국어: Fortune Eternal" - '조선말, 한국어: Fortune Eternal'
- "Polski: Novelki" - 'Polski: Novelki'
- "Português: Better Novels" - 'Português: Better Novels'
- "Português: Blog do Amon Novels" - 'Português: Blog do Amon Novels'
- "Português: Central Novel" - 'Português: Central Novel'
- "Português: Kiniga" - 'Português: Kiniga'
- "Português: LaNovels" - 'Português: LaNovels'
- "Português: Light Novel Brasil" - 'Português: Light Novel Brasil'
- "Português: MTL Novel (PT)" - 'Português: MTL Novel (PT)'
- "Português: Novel Mania" - 'Português: Novel Mania'
- "Português: Tsundoku Traduções" - 'Português: Tsundoku Traduções'
- "Русский: Автор Тудей" - 'Русский: Автор Тудей'
- "Русский: Bookhamster" - 'Русский: Bookhamster'
- "Русский: Bookriver" - 'Русский: Bookriver'
- "Русский: Erolate" - 'Русский: Erolate'
- "Русский: EzNovels" - 'Русский: EzNovels'
- "Русский: ficbook" - 'Русский: ficbook'
- "Русский: LitSpace" - 'Русский: LitSpace'
- "Русский: Свободный Мир Ранобэ" - 'Русский: Свободный Мир Ранобэ'
- "Русский: Jaomix" - 'Русский: Jaomix'
- "Русский: MTL Novel (RU)" - 'Русский: MTL Novel (RU)'
- "Русский: Neobook" - 'Русский: Neobook'
- "Русский: NovelCool (RU)" - 'Русский: NovelCool (RU)'
- "Русский: НовелОВХ" - 'Русский: НовелОВХ'
- "Русский: Ranobes (RU)" - 'Русский: Ranobes (RU)'
- "Русский: Renovels" - 'Русский: Renovels'
- "Русский: RanobeLib" - 'Русский: RanobeLib'
- "Русский: RanobeHub" - 'Русский: RanobeHub'
- "Русский: РанобэРФ" - 'Русский: РанобэРФ'
- "Русский: Rulate" - 'Русский: Rulate'
- "Русский: Ruvers" - 'Русский: Ruvers'
- "Русский: NovelTL" - 'Русский: NovelTL'
- "Русский: ТопЛиба" - 'Русский: ТопЛиба'
- "Русский: Целлюлоза" - 'Русский: Целлюлоза'
- "Español: AllNovelRead" - 'Español: AllNovelRead'
- "Español: AnimesHoy12" - 'Español: AnimesHoy12'
- "Español: Hasu Translations" - 'Español: Hasu Translations'
- "Español: LightNovelDaily" - 'Español: LightNovelDaily'
- "Español: MTL Novel (ES)" - 'Español: MTL Novel (ES)'
- "Español: Novelas Ligera" - 'Español: Novelas Ligera'
- "Español: Oasis Translations" - 'Español: Oasis Translations'
- "Español: Pancho Translations" - 'Español: Pancho Translations'
- "Español: ReinoWuxia" - 'Español: ReinoWuxia'
- "Español: SkyNovels" - 'Español: SkyNovels'
- "Español: TC & Sega" - 'Español: TC & Sega'
- "Español: Traducciones Amistosas" - 'Español: Traducciones Amistosas'
- "Español: TuNovelaLigera" - 'Español: TuNovelaLigera'
- "Español: Yuuki Tls" - 'Español: Yuuki Tls'
- "ไทย: Novel Lucky" - 'ไทย: Novel Lucky'
- "ไทย: Novel PDF" - 'ไทย: Novel PDF'
- "Türkçe: Araz Novel" - 'Türkçe: Araz Novel'
- "Türkçe: E-KİTAPLAR" - 'Türkçe: E-KİTAPLAR'
- "Türkçe: EpikNovel" - 'Türkçe: EpikNovel'
- "Türkçe: kakikata" - 'Türkçe: kakikata'
- "Türkçe: Kodeks Library" - 'Türkçe: Kodeks Library'
- "Türkçe: MangaTR" - 'Türkçe: MangaTR'
- "Türkçe: NABİ SCANS" - 'Türkçe: NABİ SCANS'
- "Türkçe: Namevt" - 'Türkçe: Namevt'
- "Türkçe: Novel oku" - 'Türkçe: Novel oku'
- "Türkçe: NovelTR" - 'Türkçe: NovelTR'
- "Türkçe: Ragnar Scans" - 'Türkçe: Ragnar Scans'
- "Türkçe: ThNovels" - 'Türkçe: ThNovels'
- "Türkçe: TurkceLightNovels" - 'Türkçe: TurkceLightNovels'
- "Türkçe: WebNovelOku" - 'Türkçe: WebNovelOku'
- "Українська: BakaInUA" - 'Українська: BakaInUA'
- "Українська: Смаколики" - 'Українська: Смаколики'
- "Українська: UA Ranobe Club" - 'Українська: UA Ranobe Club'
- "Tiếng Việt: Light Novel VN" - 'Tiếng Việt: Light Novel VN'
- "Tiếng Việt: Hako" - 'Tiếng Việt: Hako'
- "Tiếng Việt: Nettruyen" - 'Tiếng Việt: Nettruyen'
- "Tiếng Việt: Truyện Chữ" - 'Tiếng Việt: Truyện Chữ'
- "Tiếng Việt: Truyen Conect" - 'Tiếng Việt: Truyen Conect'
- "Tiếng Việt: Truyện Full" - 'Tiếng Việt: Truyện Full'
- "Multi: Komga" - 'Multi: Komga'
validations: validations:
required: true required: true
@@ -264,14 +265,15 @@ body:
id: severity id: severity
attributes: attributes:
label: Severity label: Severity
description: Select the severity of the issue you want to report. description: Select the issue severity level.
multiple: false multiple: false
options: options:
- Wrong formatting - Wrong Formatting
- Wrong content - Wrong Content
- Missing chapter - Missing Chapter
- Missing images - Missing Images
- Can't load novels - Can't Load Novels
- Domain Changed
- Other - Other
validations: validations:
required: true required: true
@@ -279,42 +281,43 @@ body:
- type: textarea - type: textarea
id: reproduce-steps id: reproduce-steps
attributes: attributes:
label: Steps to reproduce label: Steps To Reproduce
description: Provide an example of the issue. description: Describe the steps to reproduce the issue.
placeholder: | placeholder: |
Example: Example:
1. First step 1. Open the plugin
2. Second step 2. Search for a novel
3. Issue here 3. Error appears
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: expected-behavior id: expected-behavior
attributes: attributes:
label: Expected behavior label: Expected Behavior
description: What should happen?
placeholder: | placeholder: |
Example: Example:
"This should happen..." "The search results should display correctly..."
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: actual-behavior id: actual-behavior
attributes: attributes:
label: Actual behavior label: Actual Behavior
description: What actually happened?
placeholder: | placeholder: |
Example: Example:
"This happened instead..." "An error message appeared instead..."
validations: validations:
required: true required: true
- type: input - type: input
id: lnreader-version id: lnreader-version
attributes: attributes:
label: LNReader version label: LNReader Version
description: | description: Find this in **More → About**.
You can find your LNReader version in **More → About**.
placeholder: | placeholder: |
Example: "2.0.0" Example: "2.0.0"
validations: validations:
@@ -323,9 +326,8 @@ body:
- type: input - type: input
id: plugin-version id: plugin-version
attributes: attributes:
label: Plugin version label: Plugin Version
description: | description: Find this in **Browse → Installed** next to the plugin name.
You can find your Plugin version in **Browse → Installed** and scrolling to the desired source.
placeholder: | placeholder: |
Example: "1.0.1" Example: "1.0.1"
validations: validations:
@@ -334,9 +336,8 @@ body:
- type: input - type: input
id: android-version id: android-version
attributes: attributes:
label: Android version label: Android Version
description: | description: Find this in your device settings.
You can find this somewhere in your Android settings.
placeholder: | placeholder: |
Example: "Android 15" Example: "Android 15"
validations: validations:
@@ -345,24 +346,24 @@ body:
- type: textarea - type: textarea
id: other-details id: other-details
attributes: attributes:
label: Other details label: Other Details
description: Any additional information or screenshots.
placeholder: | placeholder: |
Additional details and attachments. Additional context, screenshots, or relevant information.
- type: checkboxes - type: checkboxes
id: acknowledgements id: acknowledgements
attributes: attributes:
label: Acknowledgements 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: 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 required: true
- label: I have written a short but informative title. - label: I have written a clear and descriptive title.
required: true 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 required: true
- label: I have updated all installed extensions. - label: I have updated all installed plugins to the latest version.
required: true 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 required: true
+14 -13
View File
@@ -1,38 +1,39 @@
name: Feature request name: Request Feature
description: Suggest a feature to improve a source description: Suggest an improvement for an existing plugin
labels: [Feature Request] labels: [Feature Request]
body: body:
- type: textarea - type: textarea
id: feature-description id: feature-description
attributes: attributes:
label: Describe your suggested feature label: Feature Description
description: How can an existing extension be improved? description: Describe the feature you would like to see added.
placeholder: | placeholder: |
Example: Example:
"It should work like this..." "Add support for latest novels list in Royal Road plugin..."
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: other-details id: other-details
attributes: attributes:
label: Other details label: Other Details
description: Any additional context or mockups.
placeholder: | placeholder: |
Additional details and attachments. Additional information, use cases, or examples.
- type: checkboxes - type: checkboxes
id: acknowledgements id: acknowledgements
attributes: attributes:
label: Acknowledgements 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: 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 required: true
- label: I have written a short but informative title. - label: I have written a clear and descriptive title.
required: true 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 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 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 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 name: Request Plugin
description: Suggest a new source for LNReader description: Request a new plugin for LNReader
labels: [Source Request] labels: [Plugin Request]
body: body:
- type: input - type: input
id: name id: name
attributes: attributes:
label: Source name label: Plugin Name
description: The name of the website or platform.
placeholder: |
Example: "Novel Updates"
validations: validations:
required: true required: true
- type: input - type: input
id: link id: link
attributes: attributes:
label: Source link label: Website URL
description: The URL of the website.
placeholder: |
Example: "https://example.com"
validations: validations:
required: true required: true
@@ -20,6 +26,7 @@ body:
id: language id: language
attributes: attributes:
label: Language label: Language
description: The primary language of the website.
placeholder: | placeholder: |
Example: "English" Example: "English"
validations: validations:
@@ -28,21 +35,22 @@ body:
- type: textarea - type: textarea
id: other-details id: other-details
attributes: attributes:
label: Other details label: Other Details
description: Any additional information about the website.
placeholder: | placeholder: |
Additional details and attachments. Why this plugin would be useful, special features, etc.
- type: checkboxes - type: checkboxes
id: acknowledgements id: acknowledgements
attributes: attributes:
label: Acknowledgements 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: 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 required: true
- label: I have written a title with source name. - label: I have used the plugin name as the issue title.
required: true 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 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 required: true
+39 -38
View File
@@ -1,15 +1,16 @@
# DO NOT EDIT # DO NOT EDIT THIS FILE DIRECTLY
# THIS FILE IS AUTO GENERATED FROM blank_report_issue.yml in the .github/scripts folder. # 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 name: Report Issue
description: Report a source issue in LNReader description: Report a plugin issue in LNReader
labels: [Bug] labels: [Bug]
body: body:
- type: dropdown - type: dropdown
id: source id: source
attributes: attributes:
label: Plugin label: Plugin
description: Select the plugin associated with the issue. description: Select the affected plugin(s).
multiple: true multiple: true
options: options:
{#CHANGE#} {#CHANGE#}
@@ -20,14 +21,15 @@ body:
id: severity id: severity
attributes: attributes:
label: Severity label: Severity
description: Select the severity of the issue you want to report. description: Select the issue severity level.
multiple: false multiple: false
options: options:
- Wrong formatting - Wrong Formatting
- Wrong content - Wrong Content
- Missing chapter - Missing Chapter
- Missing images - Missing Images
- Can't load novels - Can't Load Novels
- Domain Changed
- Other - Other
validations: validations:
required: true required: true
@@ -35,42 +37,43 @@ body:
- type: textarea - type: textarea
id: reproduce-steps id: reproduce-steps
attributes: attributes:
label: Steps to reproduce label: Steps To Reproduce
description: Provide an example of the issue. description: Describe the steps to reproduce the issue.
placeholder: | placeholder: |
Example: Example:
1. First step 1. Open the plugin
2. Second step 2. Search for a novel
3. Issue here 3. Error appears
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: expected-behavior id: expected-behavior
attributes: attributes:
label: Expected behavior label: Expected Behavior
description: What should happen?
placeholder: | placeholder: |
Example: Example:
"This should happen..." "The search results should display correctly..."
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: actual-behavior id: actual-behavior
attributes: attributes:
label: Actual behavior label: Actual Behavior
description: What actually happened?
placeholder: | placeholder: |
Example: Example:
"This happened instead..." "An error message appeared instead..."
validations: validations:
required: true required: true
- type: input - type: input
id: lnreader-version id: lnreader-version
attributes: attributes:
label: LNReader version label: LNReader Version
description: | description: Find this in **More → About**.
You can find your LNReader version in **More → About**.
placeholder: | placeholder: |
Example: "2.0.0" Example: "2.0.0"
validations: validations:
@@ -79,9 +82,8 @@ body:
- type: input - type: input
id: plugin-version id: plugin-version
attributes: attributes:
label: Plugin version label: Plugin Version
description: | description: Find this in **Browse → Installed** next to the plugin name.
You can find your Plugin version in **Browse → Installed** and scrolling to the desired source.
placeholder: | placeholder: |
Example: "1.0.1" Example: "1.0.1"
validations: validations:
@@ -90,9 +92,8 @@ body:
- type: input - type: input
id: android-version id: android-version
attributes: attributes:
label: Android version label: Android Version
description: | description: Find this in your device settings.
You can find this somewhere in your Android settings.
placeholder: | placeholder: |
Example: "Android 15" Example: "Android 15"
validations: validations:
@@ -101,24 +102,24 @@ body:
- type: textarea - type: textarea
id: other-details id: other-details
attributes: attributes:
label: Other details label: Other Details
description: Any additional information or screenshots.
placeholder: | placeholder: |
Additional details and attachments. Additional context, screenshots, or relevant information.
- type: checkboxes - type: checkboxes
id: acknowledgements id: acknowledgements
attributes: attributes:
label: Acknowledgements 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: 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 required: true
- label: I have written a short but informative title. - label: I have written a clear and descriptive title.
required: true 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 required: true
- label: I have updated all installed extensions. - label: I have updated all installed plugins to the latest version.
required: true 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 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);
});
+13 -9
View File
@@ -6,23 +6,28 @@ on:
- opened - opened
- edited - edited
concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number }}
cancel-in-progress: true
jobs: jobs:
auto-label: auto-label:
name: Auto Label Issues
if: ${{ github.event.issue.body && contains(github.event.issue.body, '### Plugin') }} if: ${{ github.event.issue.body && contains(github.event.issue.body, '### Plugin') }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout Repository
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Extract the severity from issue body - name: Extract Severity From Issue Body
id: extract-severity id: extract-severity
run: | run: |
USER_SELECTED_SEVERITY=$(echo "${{ github.event.issue.body }}" | grep "### Severity" -A 2 | tail -n 1 | sed 's/[[:space:]]*$//') USER_SELECTED_SEVERITY=$(echo "${{ github.event.issue.body }}" | grep "### Severity" -A 2 | tail -n 1 | sed 's/[[:space:]]*$//')
SELECTED_SEVERITY="" SELECTED_SEVERITY=""
case "$USER_SELECTED_SEVERITY" in 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" SELECTED_SEVERITY="$USER_SELECTED_SEVERITY"
;; ;;
*) *)
@@ -31,14 +36,14 @@ jobs:
esac esac
echo "SELECTED_SEVERITY=$SELECTED_SEVERITY" >> $GITHUB_ENV echo "SELECTED_SEVERITY=$SELECTED_SEVERITY" >> $GITHUB_ENV
- name: Extract the plugin from issue body - name: Extract Plugin From Issue Body
id: parse-issue 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:]]*$//') 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 echo "SELECTED_PLUGIN=$SELECTED_PLUGIN" >> $GITHUB_ENV
- name: Determine corresponding label - name: Determine Corresponding Label
id: determine-label id: determine-label
run: | 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/^[^:]*: //' )" 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 # Save to GitHub environment
printf "LABELS<<EOF\n%s\nEOF\n" "$LABELS_WITH_PREFIX" >> $GITHUB_ENV printf "LABELS<<EOF\n%s\nEOF\n" "$LABELS_WITH_PREFIX" >> $GITHUB_ENV
- name: Add Labels To Issue
- name: Add label to the issue
if: env.LABELS != '' if: env.LABELS != ''
uses: actions-ecosystem/action-add-labels@v1 uses: actions-ecosystem/action-add-labels@v1
with: with:
@@ -59,6 +63,6 @@ jobs:
Severity: ${{ env.SELECTED_SEVERITY }} Severity: ${{ env.SELECTED_SEVERITY }}
${{ env.LABELS }} ${{ env.LABELS }}
- name: Handle missing label - name: Handle Missing Label
if: env.LABELS == '' if: env.LABELS == ''
run: echo "No matching label found for the selected plugin." run: echo "No matching label found for the selected plugin."
+9 -4
View File
@@ -1,4 +1,4 @@
name: Issue moderator name: Issue Moderator
on: on:
issues: issues:
@@ -6,11 +6,16 @@ on:
issue_comment: issue_comment:
types: [created] types: [created]
concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number }}
cancel-in-progress: false
jobs: jobs:
autoclose: autoclose:
name: Auto Close Invalid Issues
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Moderate issues - name: Moderate Issues
uses: tachiyomiorg/issue-moderator-action@v2 uses: tachiyomiorg/issue-moderator-action@v2
with: with:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}
@@ -18,7 +23,7 @@ jobs:
duplicate-check-enabled: true duplicate-check-enabled: true
duplicate-check-labels: | duplicate-check-labels: |
["Source Request", "Domain Changed"] ["Plugin Request", "Domain Changed"]
existing-check-enabled: false existing-check-enabled: false
@@ -36,7 +41,7 @@ jobs:
}, },
{ {
"type": "title", "type": "title",
"regex": ".*(Source name|Short description).*", "regex": ".*(Plugin name|Short description).*",
"message": "You did not fill out the description in the title" "message": "You did not fill out the description in the title"
} }
] ]
+11 -8
View File
@@ -1,19 +1,22 @@
name: Lock threads name: Lock Threads
on: on:
# Daily
schedule: schedule:
- cron: "0 0 * * *" - cron: '0 0 * * *'
# Manual trigger
workflow_dispatch: workflow_dispatch:
inputs:
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false
jobs: jobs:
lock: lock:
name: Lock Inactive Threads
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: dessant/lock-threads@v2 - name: Lock Inactive Issues And Pull Requests
uses: dessant/lock-threads@v5
with: with:
github-token: ${{ github.token }} github-token: ${{ github.token }}
issue-lock-inactive-days: "2" issue-lock-inactive-days: '2'
pr-lock-inactive-days: "2" pr-lock-inactive-days: '2'
+14 -10
View File
@@ -1,29 +1,33 @@
name: Prettier name: Format Check
on: on:
pull_request: pull_request:
branches: [master] branches: [master]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs: jobs:
Prettier: format-check:
name: Check Code Formatting
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout Code - name: Checkout Repository
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Use Node.js - name: Setup Node.js
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: '20' node-version: '20'
- name: Install Dependencies - name: Install Prettier
run: | run: |
rm package.json rm package.json
rm package-lock.json rm package-lock.json
npm init -y npm init -y
npm pkg set type="module" npm install prettier@3.2.5
npm i prettier@3.2.5
- name: Prettier - name: Check Code Formatting
run: npx prettier --check "./src/**/*.{ts,tsx,js,css}" run: npx prettier --check "./src/**/*.{ts,tsx,js,css}"
@@ -2,35 +2,42 @@ name: Publish Plugins
on: on:
push: push:
branches:
- master
concurrency: concurrency:
group: ${{ github.workflow }} group: ${{ github.workflow }}
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
Publish: publish:
name: Publish Plugins
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - name: Checkout Repository
uses: actions/checkout@v4
with: with:
token: ${{ secrets.REPO_SCOPED_TOKEN }} token: ${{ secrets.REPO_SCOPED_TOKEN }}
- uses: actions/setup-node@v3
- name: Setup Node.js
uses: actions/setup-node@v4
with: with:
node-version: '20' node-version: '20'
- name: Install Dependencies - name: Install Dependencies
run: npm install --omit=dev --ignore-scripts run: npm install --omit=dev --ignore-scripts
- name: Setup Git - name: Configure Git
run: | run: |
git config user.name "github-actions[bot]" git config user.name "github-actions[bot]"
git config user.email 41898282+github-actions[bot]@users.noreply.github.com git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- if: github.repository == 'LNReader/lnreader-plugins' - name: Publish Plugins (Main Repository)
name: Publish Plugins Main Repo if: github.repository == 'LNReader/lnreader-plugins'
run: npm run publish:plugins 2>> $GITHUB_STEP_SUMMARY run: npm run publish:plugins 2>> $GITHUB_STEP_SUMMARY
shell: bash shell: bash
- if: github.repository != 'LNReader/lnreader-plugins' - name: Publish Plugins (Fork - All Branches)
name: Publish Plugins All Branches if: github.repository != 'LNReader/lnreader-plugins'
run: npm run publish:plugins -- --all-branches run: npm run publish:plugins -- --all-branches
shell: bash shell: bash
+45 -31
View File
@@ -4,20 +4,25 @@ on:
issues: issues:
types: [labeled] types: [labeled]
concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number }}
cancel-in-progress: true
jobs: jobs:
auto-label: 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 runs-on: ubuntu-latest
env: env:
REPO: ${{ github.repository }} REPO: ${{ github.repository }}
ISSUE_NUMBER: ${{ github.event.issue.number }} ISSUE_NUMBER: ${{ github.event.issue.number }}
steps: steps:
- name: Get Source Request URL - name: Get Plugin Website URL
id: get_url id: get_url
env: env:
ISSUE_BODY: ${{ github.event.issue.body }} ISSUE_BODY: ${{ github.event.issue.body }}
run: | 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 "URL=$URL" >> $GITHUB_OUTPUT
echo "Using URL: \`$URL\`" >> $GITHUB_STEP_SUMMARY 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"') 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 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 id: check_madara
env: env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }} BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }} USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: | 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 "🔍 Checking for Madara theme..." >> $GITHUB_STEP_SUMMARY
echo "madara=true" >> $GITHUB_OUTPUT 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 || \
echo "✅ Madara Theme Detected" >> $GITHUB_STEP_SUMMARY 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
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 "madara=true" >> $GITHUB_OUTPUT echo "madara=true" >> $GITHUB_OUTPUT
echo "✅ Madara Theme Detected" >> $GITHUB_STEP_SUMMARY echo "✅ Madara Theme Detected" >> $GITHUB_STEP_SUMMARY
else else
echo "madara=false" >> $GITHUB_OUTPUT echo "madara=false" >> $GITHUB_OUTPUT
echo "❌ Madara Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi fi
- name: Check Lighnovelwp theme - name: Check Lightnovelwp Theme
id: check_lighnovelwp id: check_lighnovelwp
if: always() && steps.check_madara.outputs.madara != 'true'
env: env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }} BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }} USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: | 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=true" >> $GITHUB_OUTPUT
echo "✅ Lighnovelwp Theme Detected" >> $GITHUB_STEP_SUMMARY echo "✅ Lightnovelwp 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
else else
echo "lighnovelwp=false" >> $GITHUB_OUTPUT echo "lighnovelwp=false" >> $GITHUB_OUTPUT
echo "❌ Lightnovelwp Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi fi
- name: Check HotNovelPub theme - name: Check HotNovelPub Theme
id: check_hotnovelpub id: check_hotnovelpub
if: always() && steps.check_madara.outputs.madara != 'true' && steps.check_lighnovelwp.outputs.lighnovelwp != 'true'
env: env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }} BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }} USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: | run: |
if curl --location --silent --fail "https://api.$BASE_URL" -H "User-Agent: $USER_AGENT" | grep -q "Hello\!"; then echo "🔍 Checking for HotNovelPub theme..." >> $GITHUB_STEP_SUMMARY
echo "hotnovelpub=true" >> $GITHUB_OUTPUT if curl --location --silent --fail --max-time 10 "https://api.$BASE_URL" -H "User-Agent: $USER_AGENT" 2>/dev/null | grep -q "Hello\!" || \
echo "✅ HotNovelPub Theme Detected" >> $GITHUB_STEP_SUMMARY curl --location --silent --fail --max-time 10 "http://api.$BASE_URL" -H "User-Agent: $USER_AGENT" 2>/dev/null | grep -q "Hello\!"; then
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=true" >> $GITHUB_OUTPUT echo "✅ HotNovelPub Theme Detected" >> $GITHUB_STEP_SUMMARY
echo "✅ HotNovelPub Theme Detected" >> $GITHUB_STEP_SUMMARY else
else echo "hotnovelpub=false" >> $GITHUB_OUTPUT
echo "hotnovelpub=false" >> $GITHUB_OUTPUT echo "❌ HotNovelPub Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi fi
- name: Check Fictioneer theme - name: Check Fictioneer Theme
id: check_fictioneer id: check_fictioneer
if: always() && steps.check_madara.outputs.madara != 'true' && steps.check_lighnovelwp.outputs.lighnovelwp != 'true' && steps.check_hotnovelpub.outputs.hotnovelpub != 'true'
env: env:
BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }} BASE_URL: ${{ steps.get_base_url.outputs.BASE_URL }}
USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }} USER_AGENT: ${{ steps.get_user_agent.outputs.USER_AGENT }}
run: | 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 "🔍 Checking for Fictioneer theme..." >> $GITHUB_STEP_SUMMARY
echo "fictioneer=true" >> $GITHUB_OUTPUT 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 || \
echo "✅ Fictioneer Theme Detected" >> $GITHUB_STEP_SUMMARY 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
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 "fictioneer=true" >> $GITHUB_OUTPUT echo "fictioneer=true" >> $GITHUB_OUTPUT
echo "✅ Fictioneer Theme Detected" >> $GITHUB_STEP_SUMMARY echo "✅ Fictioneer Theme Detected" >> $GITHUB_STEP_SUMMARY
else else
echo "fictioneer=false" >> $GITHUB_OUTPUT echo "fictioneer=false" >> $GITHUB_OUTPUT
echo "❌ Fictioneer Theme Not Found" >> $GITHUB_STEP_SUMMARY
fi fi
- name: Add Label - name: Add Theme Label To Issue
if: always()
env: env:
MADARA: ${{ steps.check_madara.outputs.madara }} MADARA: ${{ steps.check_madara.outputs.madara }}
LIGHNOVELWP: ${{ steps.check_lighnovelwp.outputs.lighnovelwp }} LIGHNOVELWP: ${{ steps.check_lighnovelwp.outputs.lighnovelwp }}
@@ -108,14 +117,19 @@ jobs:
FICTIONEER: ${{ steps.check_fictioneer.outputs.fictioneer }} FICTIONEER: ${{ steps.check_fictioneer.outputs.fictioneer }}
GH_TOKEN: ${{ github.token }} GH_TOKEN: ${{ github.token }}
run: | run: |
echo "## Theme Detection Result" >> $GITHUB_STEP_SUMMARY
if [[ "$MADARA" == "true" ]]; then if [[ "$MADARA" == "true" ]]; then
echo "🏷️ Adding label: Theme: Madara" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Madara" -R $REPO gh issue edit $ISSUE_NUMBER --add-label "Theme: Madara" -R $REPO
elif [[ "$LIGHNOVELWP" == "true" ]]; then elif [[ "$LIGHNOVELWP" == "true" ]]; then
echo "🏷️ Adding label: Theme: Lighnovelwp" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Lighnovelwp" -R $REPO gh issue edit $ISSUE_NUMBER --add-label "Theme: Lighnovelwp" -R $REPO
elif [[ "$HOTNOVELPUB" == "true" ]]; then elif [[ "$HOTNOVELPUB" == "true" ]]; then
echo "🏷️ Adding label: Theme: Hotnovelpub" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Hotnovelpub" -R $REPO gh issue edit $ISSUE_NUMBER --add-label "Theme: Hotnovelpub" -R $REPO
elif [[ "$FICTIONEER" == "true" ]]; then elif [[ "$FICTIONEER" == "true" ]]; then
echo "🏷️ Adding label: Theme: Fictioneer" >> $GITHUB_STEP_SUMMARY
gh issue edit $ISSUE_NUMBER --add-label "Theme: Fictioneer" -R $REPO gh issue edit $ISSUE_NUMBER --add-label "Theme: Fictioneer" -R $REPO
else else
echo "No Theme Detected" >> $GITHUB_STEP_SUMMARY echo "❌ No Theme Detected" >> $GITHUB_STEP_SUMMARY
fi 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
+1 -1
View File
@@ -2,7 +2,7 @@
<p> <p>
<img alt="LNReader plugins counting" src="https://raw.githubusercontent.com/LNReader/lnreader-plugins/plugins/v3.0.0/total.svg"> <img alt="LNReader plugins counting" src="https://raw.githubusercontent.com/LNReader/lnreader-plugins/plugins/v3.0.0/total.svg">
<img alt="GitHub issues by-label" src="https://img.shields.io/github/issues/lnreader/lnreader-plugins/Source%20Request?color=success&label=source%20requests"> <img alt="GitHub issues by-label" src="https://img.shields.io/github/issues/lnreader/lnreader-plugins/Plugin%20Request?color=success&label=plugin%20requests">
<img alt="GitHub issues by-label" src="https://img.shields.io/github/issues/lnreader/lnreader-plugins/Bug?color=red&label=bugs"> <img alt="GitHub issues by-label" src="https://img.shields.io/github/issues/lnreader/lnreader-plugins/Bug?color=red&label=bugs">
</p> </p>
+2 -2
View File
@@ -192,8 +192,8 @@ if (!ONLY_NEW)
<rect width="80" height="20" fill="url(#s)"/> <rect width="80" height="20" fill="url(#s)"/>
</g> </g>
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"> <g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110">
<text aria-hidden="true" x="255" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="390">Plugins</text> <text aria-hidden="true" x="255" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="390">plugins</text>
<text x="255" y="140" transform="scale(.1)" fill="#fff" textLength="390">Plugins</text> <text x="255" y="140" transform="scale(.1)" fill="#fff" textLength="390">plugins</text>
<text aria-hidden="true" x="635" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="210">${totalPlugins}</text> <text aria-hidden="true" x="635" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="210">${totalPlugins}</text>
<text x="635" y="140" transform="scale(.1)" fill="#fff" textLength="210">${totalPlugins}</text> <text x="635" y="140" transform="scale(.1)" fill="#fff" textLength="210">${totalPlugins}</text>
</g> </g>