diff --git a/.github/ISSUE_TEMPLATE/report_issue.yml b/.github/ISSUE_TEMPLATE/report_issue.yml index d3130fc..988b251 100644 --- a/.github/ISSUE_TEMPLATE/report_issue.yml +++ b/.github/ISSUE_TEMPLATE/report_issue.yml @@ -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 - diff --git a/.github/ISSUE_TEMPLATE/request_feature.yml b/.github/ISSUE_TEMPLATE/request_feature.yml index a47a505..b240ef4 100644 --- a/.github/ISSUE_TEMPLATE/request_feature.yml +++ b/.github/ISSUE_TEMPLATE/request_feature.yml @@ -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 diff --git a/.github/ISSUE_TEMPLATE/request_plugin.yml b/.github/ISSUE_TEMPLATE/request_plugin.yml new file mode 100644 index 0000000..4c33f75 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/request_plugin.yml @@ -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 diff --git a/.github/ISSUE_TEMPLATE/request_source.yml b/.github/ISSUE_TEMPLATE/request_source.yml index 0757e3e..4c33f75 100644 --- a/.github/ISSUE_TEMPLATE/request_source.yml +++ b/.github/ISSUE_TEMPLATE/request_source.yml @@ -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 diff --git a/.github/scripts/blank_report_issue.yml b/.github/scripts/blank_report_issue.yml index 9eebdc8..eae8ef0 100644 --- a/.github/scripts/blank_report_issue.yml +++ b/.github/scripts/blank_report_issue.yml @@ -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 - diff --git a/.github/scripts/createOptions.cjs b/.github/scripts/createOptions.cjs deleted file mode 100644 index 6dc4ff1..0000000 --- a/.github/scripts/createOptions.cjs +++ /dev/null @@ -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(); diff --git a/.github/scripts/generate-issue-template-options.cjs b/.github/scripts/generate-issue-template-options.cjs new file mode 100644 index 0000000..41b3f2d --- /dev/null +++ b/.github/scripts/generate-issue-template-options.cjs @@ -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); +}); diff --git a/.github/workflows/issue_auto_label.yml b/.github/workflows/issue_auto_label.yml index c8ed0fe..855e718 100644 --- a/.github/workflows/issue_auto_label.yml +++ b/.github/workflows/issue_auto_label.yml @@ -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<> $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." diff --git a/.github/workflows/issue_moderator.yml b/.github/workflows/issue_moderator.yml index 10e6c21..481bc77 100644 --- a/.github/workflows/issue_moderator.yml +++ b/.github/workflows/issue_moderator.yml @@ -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 \ No newline at end of file + auto-close-ignore-label: do-not-autoclose diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index 7c0f04c..33cd335 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -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' diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index b673d2a..93fb35a 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -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}" diff --git a/.github/workflows/host_plugins.yml b/.github/workflows/publish-plugins.yml similarity index 59% rename from .github/workflows/host_plugins.yml rename to .github/workflows/publish-plugins.yml index 8822d83..1277e6a 100644 --- a/.github/workflows/host_plugins.yml +++ b/.github/workflows/publish-plugins.yml @@ -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 diff --git a/.github/workflows/theme_auto_label.yml b/.github/workflows/theme_auto_label.yml index 7c6364b..daf3203 100644 --- a/.github/workflows/theme_auto_label.yml +++ b/.github/workflows/theme_auto_label.yml @@ -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 diff --git a/.github/workflows/update-issue-template.yml b/.github/workflows/update-issue-template.yml new file mode 100644 index 0000000..47903b7 --- /dev/null +++ b/.github/workflows/update-issue-template.yml @@ -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 diff --git a/.github/workflows/update_plugin_list.yml b/.github/workflows/update_plugin_list.yml deleted file mode 100644 index ec4ab47..0000000 --- a/.github/workflows/update_plugin_list.yml +++ /dev/null @@ -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 diff --git a/README.md b/README.md index faa0e71..074e9ba 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

LNReader plugins counting -GitHub issues by-label +GitHub issues by-label GitHub issues by-label

diff --git a/scripts/build-plugin-manifest.js b/scripts/build-plugin-manifest.js index db1da6d..a19ecbb 100644 --- a/scripts/build-plugin-manifest.js +++ b/scripts/build-plugin-manifest.js @@ -192,8 +192,8 @@ if (!ONLY_NEW) - - Plugins + + plugins ${totalPlugins}