User plugin issue labeling (#1397)

* Add automatic issue labeling

* branch issue fix

* try debug

* maybe

* fix indents

* f it I use js

* disable for testing

* changed id

* added git

* Update issue template with plugin dropdown options

* Only push on change

* Add multiple

* save keys file and additional safety

* Update issue template with plugin dropdown options

* delete updated_issue.yml

* Add Language in front of plugin name

* Update issue template with plugin dropdown options

* Add Labels

* debug auto labeling

* new extraction method

* SELECTED_PLUGINS not available

* Maybe

* maybe this

* Now

* please

* Now really

* maybe

* debug

* debug

* remove linebreak

* delete "

* delete " differently

* corrected split

* fix multiline issue

* maybe this way

* Added Severity

* Update issue template with plugin dropdown options

* ignore if not plugin issue

* add string infront of labels

* Update issue template with plugin dropdown options

* Test job skip

* Test job skip 2

* Test job skip 2.1

* reactivated checks

* Added [skip ci] to commit message

* change label format

* pr test

* test change

* deactivate skip

* activate skip

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Patrick Loser
2025-02-01 03:02:01 +01:00
committed by GitHub
parent 00b4c21779
commit 0e37fbc567
6 changed files with 482 additions and 8 deletions
+229 -8
View File
@@ -2,14 +2,236 @@ name: Issue report
description: Report a source issue in LNReader
labels: [Bug]
body:
- type: input
- type: dropdown
id: source
attributes:
label: Source information
description: |
You can find the source name in **Browse → Sources**.
placeholder: |
Example: "ReadLightNovel"
label: Plugin
description: Select the plugin associated with the issue.
multiple: true
options:
- "‎العربية: ArNovel"
- "‎العربية: Azora"
- "‎العربية: dilar tube"
- "‎العربية: HizoManga"
- "‎العربية: Kol Novel"
- "‎العربية: Novel4Up"
- "‎العربية: Novels Paradise"
- "‎العربية: Olaoe.cyou"
- "‎العربية: Rewayat Club"
- "‎العربية: Riwyat"
- "‎العربية: Sunovels"
- "中文, 汉语, 漢語: 69书吧"
- "中文, 汉语, 漢語: Linovelib"
- "中文, 汉语, 漢語: Linovelib(繁體)"
- "English: FirstKissNovel"
- "English: AllNovelFull"
- "English: Arcane Translations"
- "English: Archive Of Our Own"
- "English: Srank Manga"
- "English: Belle Reservoir"
- "English: BestLightNovel"
- "English: BoxNovel"
- "English: Citrus Aurora"
- "English: Coral Boutique"
- "English: CPUnovel"
- "English: DaoNovel"
- "English: DaoTranslate"
- "English: Divine Dao Library"
- "English: Dragon Tea"
- "English: Dream Big Translations"
- "English: Dusk Blossoms"
- "English: Early Novel"
- "English: ElloTL"
- "English: Eternalune"
- "English: FanNovel"
- "English: Fans Translations"
- "English: Fenrir Translations"
- "English: Foxaholic"
- "English: Foxteller"
- "English: Faq Wiki"
- "English: Free Web Novel"
- "English: Galaxy Translations"
- "English: Genesis"
- "English: Guavaread"
- "English: Hiraeth Translation"
- "English: HotNovelPub"
- "English: Ippotranslations"
- "English: KnoxT"
- "English: Lib Read"
- "English: LightNovelCave"
- "English: LightNovelPub"
- "English: LightNovelPub Vip"
- "English: Light Novel Updates"
- "English: LightNovelWord"
- "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: Novel Fire"
- "English: NovelFull"
- "English: Novel Hall"
- "English: NovelMultiverse"
- "English: NovelsKnight"
- "English: NovelTranslate"
- "English: Novel Updates"
- "English: Panda Machine Translations"
- "English: Pastel Tales"
- "English: PawRead"
- "English: Rainofsnow"
- "English: Ranobes"
- "English: Read From Net"
- "English: ReadNovelFull"
- "English: Re:Library"
- "English: Requiem Translations"
- "English: ReadLiteNovel"
- "English: Royal Road"
- "English: Salmon Latte"
- "English: Scribble Hub"
- "English: SleepyTranslations"
- "English: SonicMTL"
- "English: StorySeedling"
- "English: System Translation"
- "English: TranslatinOtaku"
- "English: Universal Novel"
- "English: VyNovel"
- "English: Webnovel"
- "English: WebNovelLover"
- "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: 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"
- "Русский: НовелОВХ"
- "Русский: Ranobes (RU)"
- "Русский: Renovels"
- "Русский: RanobeLib"
- "Русский: RanobeHub"
- "Русский: РанобэРФ"
- "Русский: Rulate"
- "Русский: Ruvers"
- "Русский: NovelTL"
- "Русский: ТопЛиба"
- "Русский: Целлюлоза"
- "Español: AllNovelRead"
- "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: 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: Kodeks Library"
- "Türkçe: MangaTR"
- "Türkçe: NABİ SCANS"
- "Türkçe: Namevt"
- "Türkçe: Novel oku"
- "Türkçe: Novelokutr"
- "Türkçe: NovelTR"
- "Türkçe: ThNovels"
- "Türkçe: TurkceLightNovels"
- "Türkçe: WebNovelOku"
- "Українська: Смаколики"
- "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
- type: dropdown
id: severity
attributes:
label: Severity
description: Select the severity of the issue you want to report.
multiple: false
options:
- Wrong formatting
- Wrong content
- Missing chapter
- Missing images
- Can't load novels
- Other
validations:
required: true
@@ -91,5 +313,4 @@ body:
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).
required: true
- label: I will fill out all of the requested information in this form.
required: true
+110
View File
@@ -0,0 +1,110 @@
name: Issue report
description: Report a source issue in LNReader
labels: [Bug]
body:
- type: dropdown
id: source
attributes:
label: Plugin
description: Select the plugin associated with the issue.
multiple: true
options:
{#CHANGE#}
validations:
required: true
- type: dropdown
id: severity
attributes:
label: Severity
description: Select the severity of the issue you want to report.
multiple: false
options:
- Wrong formatting
- Wrong content
- Missing chapter
- Missing images
- Can't load novels
- Other
validations:
required: true
- type: textarea
id: reproduce-steps
attributes:
label: Steps to reproduce
description: Provide an example of the issue.
placeholder: |
Example:
1. First step
2. Second step
3. Issue here
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
placeholder: |
Example:
"This should happen..."
validations:
required: true
- type: textarea
id: actual-behavior
attributes:
label: Actual behavior
placeholder: |
Example:
"This happened instead..."
validations:
required: true
- type: input
id: lnreader-version
attributes:
label: LNReader version
description: |
You can find your LNReader version in **More → About**.
placeholder: |
Example: "1.1.19"
validations:
required: true
- type: input
id: android-version
attributes:
label: Android version
description: |
You can find this somewhere in your Android settings.
placeholder: |
Example: "Android 11"
validations:
required: true
- type: textarea
id: other-details
attributes:
label: Other details
placeholder: |
Additional details and attachments.
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
options:
- label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I have updated the app to version **[1.1.19](https://github.com/LNReader/lnreader/releases/latest)**.
required: true
- label: I have updated all installed extensions.
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).
required: true
+40
View File
@@ -0,0 +1,40 @@
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();
+1
View File
@@ -0,0 +1 @@
{}
+64
View File
@@ -0,0 +1,64 @@
name: Auto Label Issues
on:
issues:
types:
- opened
- edited
jobs:
auto-label:
if: ${{ github.event.issue.body && contains(github.event.issue.body, '### Plugin') }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Extract the 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")
SELECTED_SEVERITY="$USER_SELECTED_SEVERITY"
;;
*)
SELECTED_SEVERITY="Other"
;;
esac
echo "SELECTED_SEVERITY=$SELECTED_SEVERITY" >> $GITHUB_ENV
- name: Extract the plugin from issue body
id: parse-issue
run: |
SELECTED_PLUGIN=$(echo "${{ github.event.issue.body }}" | grep "### Plugin" -A 2 | tail -n 1 | sed 's/[[:space:]]*$//')
echo "SELECTED_PLUGIN=$SELECTED_PLUGIN" >> $GITHUB_ENV
- 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/^[^:]*: //' )"
# Add "Plugin: " in front of each label
LABELS_WITH_PREFIX="$(echo "$LABELS" | sed 's/^/Plugin: /')"
# Save to GitHub environment
printf "LABELS<<EOF\n%s\nEOF\n" "$LABELS_WITH_PREFIX" >> $GITHUB_ENV
- name: Add label to the issue
if: env.LABELS != ''
uses: actions-ecosystem/action-add-labels@v1
with:
labels: |
BUG
Severity: ${{ env.SELECTED_SEVERITY }}
${{ env.LABELS }}
- name: Handle missing label
if: env.LABELS == ''
run: echo "No matching label found for the selected plugin."
+38
View File
@@ -0,0 +1,38 @@
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