diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..524b9650a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,83 @@ +name: 🐛 Bug Report +description: Something in the Web UI is broken or misbehaving. +labels: [] +title: '[Bug] ' +body: + - type: checkboxes + id: checks + attributes: + label: Before submitting + description: Issues that fail these checks may be closed without review. + options: + - label: I'm using the latest Stable or Daily version of Shoko Server. + required: true + - label: I'm using the correct Web UI version for my server (Stable Server → Stable WebUI, Daily Server → Daily WebUI). + required: true + - label: I've searched this repository for a similar issue. + required: true + + - type: input + id: server-version + attributes: + label: Shoko Server Version + description: Shown in Settings → General (e.g. `5.3.3.0`). If the Web UI crashes before you can reach Settings, the versions are also shown on the crash page. + placeholder: '5.3.3.0' + validations: + required: true + + - type: dropdown + id: server-channel + attributes: + label: Server Channel + options: + - Stable + - Daily + validations: + required: true + + - type: input + id: webui-version + attributes: + label: Web UI Version + description: Shown in Settings → General, next to the server version (e.g. `2.5.11`); also visible on the crash page. + placeholder: '2.5.11' + validations: + required: true + + - type: dropdown + id: webui-channel + attributes: + label: Web UI Channel + options: + - Stable + - Daily + validations: + required: true + + - type: textarea + id: description + attributes: + label: Description + description: What happened, and what did you expect to happen instead? + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Steps to Reproduce + description: | + Numbered steps starting from a fresh page load. Example: + 1. Open `WebUI → Collection` + 2. Click `...` + 3. See error + validations: + required: true + + - type: textarea + id: evidence + attributes: + label: Screenshots + description: Screenshots of the error, including the browser toast if one appears. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..6df532bb1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Shoko Discord + url: https://discord.gg/vpeHDsg + about: For support questions and general discussion, please use Discord instead of opening an issue. + - name: Shoko Server Issues + url: https://github.com/ShokoAnime/ShokoServer/issues + about: If the problem only appears server-side (importing, AniDB, renaming), report it on ShokoServer instead. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..70843b167 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,30 @@ +name: ✨ Feature Request +description: Suggest a new feature or an improvement to an existing one. +labels: [] +title: '[Feature Request] ' +body: + - type: checkboxes + id: checks + attributes: + label: Before submitting + options: + - label: I've searched this repository for a similar feature request. + required: true + - label: This request is not related to allowing Shoko to download anime episodes or rip them from streaming sites. + required: true + + - type: textarea + id: description + attributes: + label: Feature Description + description: What do you want to see, and what problem does it solve? Include the relevant page/section of the Web UI (e.g. `Collection`, `Settings → Import`). + validations: + required: true + + - type: textarea + id: examples + attributes: + label: Examples / Mockups + description: Mockups, screenshots from other apps, or a concrete example of the behavior you'd expect. Delete this section if not applicable. + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..fb9bcc396 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,13 @@ +## Summary + + + + +## Changes + + + + +## Screenshots + + diff --git a/.github/workflows/Release-Dev-Auto.yml b/.github/workflows/release-dev-auto.yml similarity index 98% rename from .github/workflows/Release-Dev-Auto.yml rename to .github/workflows/release-dev-auto.yml index 070349d16..6617a2814 100644 --- a/.github/workflows/Release-Dev-Auto.yml +++ b/.github/workflows/release-dev-auto.yml @@ -100,7 +100,7 @@ jobs: update-manifest: needs: release-dev-auto if: success() - uses: ./.github/workflows/Update-Manifest.yml + uses: ./.github/workflows/update-manifest.yml with: version: ${{ needs.release-dev-auto.outputs.version_tag }} prerelease: true diff --git a/.github/workflows/Release-Manual.yml b/.github/workflows/release-manual.yml similarity index 95% rename from .github/workflows/Release-Manual.yml rename to .github/workflows/release-manual.yml index 44b62bcf8..465de8908 100644 --- a/.github/workflows/Release-Manual.yml +++ b/.github/workflows/release-manual.yml @@ -69,8 +69,14 @@ jobs: runtime: node@24 cache: true + - name: Format Check + run: pnpm dprint + - name: Lint - run: pnpm lint --quiet + run: pnpm oxlint + + - name: Stylelint + run: pnpm stylelint - name: Update version in package.json run: pnpm version ${{ github.event.inputs.version }} --no-git-tag-version @@ -105,7 +111,7 @@ jobs: update-manifest: needs: release if: success() - uses: ./.github/workflows/Update-Manifest.yml + uses: ./.github/workflows/update-manifest.yml with: version: ${{ needs.release.outputs.version }} prerelease: ${{ fromJSON(needs.release.outputs.prerelease) }} diff --git a/.github/workflows/Update-Manifest.yml b/.github/workflows/update-manifest.yml similarity index 100% rename from .github/workflows/Update-Manifest.yml rename to .github/workflows/update-manifest.yml diff --git a/.github/workflows/Lint-PR.yml b/.github/workflows/validate-pr.yml similarity index 66% rename from .github/workflows/Lint-PR.yml rename to .github/workflows/validate-pr.yml index 4b4cef09d..c3ade65cb 100644 --- a/.github/workflows/Lint-PR.yml +++ b/.github/workflows/validate-pr.yml @@ -1,12 +1,12 @@ -name: Lint-PR +name: Validate-PR on: pull_request: types: [opened, synchronize] jobs: - lint-and-build: + validate-pr: runs-on: ubuntu-latest - name: Lint check PR + name: Validate PR steps: - name: Checkout @@ -19,8 +19,14 @@ jobs: runtime: node@24 cache: true + - name: Format Check + run: pnpm dprint + - name: Lint - run: pnpm lint --quiet + run: pnpm oxlint + + - name: Stylelint + run: pnpm stylelint - name: Test run: pnpm test diff --git a/AGENTS.md b/AGENTS.md index 13b664976..ff49400c8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -80,9 +80,9 @@ This project uses the **React Compiler** (via `@rolldown/plugin-babel`). The com ## Verification & CI - **Verification is `pnpm test` (Vitest unit tests) + `pnpm lint` (typecheck: `pnpm tscheck`).** Test coverage is deliberately limited to regression protection of high-risk modules (`filterTree.ts`, auto-match logic/regexes); never add coverage tooling or UI/DOM assertions. -- **Other CI workflows:** `Release-Dev-Auto.yml` (auto build on `master` push), `Release-Manual.yml`, `Update-Manifest.yml`, CodeQL. +- **Other CI workflows:** `release-dev-auto.yml` (auto build on `master` push), `release-manual.yml`, `update-manifest.yml`, CodeQL. - **Pre-commit:** Husky runs `lint-staged` (configured in `lint-staged.config.js`), which executes `dprint fmt`, `oxlint`, and `stylelint` on staged files. `stylelint` only covers `src/css/*.css` (flat, not recursive). -- **PR CI:** `.github/workflows/Lint-PR.yml` runs `pnpm lint --quiet`, then `pnpm test`. +- **PR CI:** `.github/workflows/validate-pr.yml` runs `pnpm lint --quiet`, then `pnpm test`. - **Agent lint workflow:** - After every file edit, run `./node_modules/.bin/dprint fmt ` to format just that file. - After completing edits on a file, run `./node_modules/.bin/oxlint --fix ` to catch lint errors early (auto-fixes import order and other fixable rules) — fix any remaining errors before moving on.