style: format dev docs and hook config
This commit is contained in:
28
.air.toml
28
.air.toml
@@ -6,32 +6,12 @@ cmd = "just build-dev"
|
|||||||
entrypoint = "./tmp/server"
|
entrypoint = "./tmp/server"
|
||||||
full_bin = "./tmp/server"
|
full_bin = "./tmp/server"
|
||||||
delay = 300
|
delay = 300
|
||||||
exclude_dir = [
|
exclude_dir = [".git", ".mise", "dist", "node_modules", "tmp"]
|
||||||
".git",
|
exclude_file = ["mal.db", "mal.db-shm", "mal.db-wal"]
|
||||||
".mise",
|
exclude_regex = ["_test\\.go"]
|
||||||
"dist",
|
|
||||||
"node_modules",
|
|
||||||
"tmp",
|
|
||||||
]
|
|
||||||
exclude_file = [
|
|
||||||
"mal.db",
|
|
||||||
"mal.db-shm",
|
|
||||||
"mal.db-wal",
|
|
||||||
]
|
|
||||||
exclude_regex = [
|
|
||||||
"_test\\.go",
|
|
||||||
]
|
|
||||||
exclude_unchanged = true
|
exclude_unchanged = true
|
||||||
follow_symlink = false
|
follow_symlink = false
|
||||||
include_ext = [
|
include_ext = ["css", "go", "gohtml", "html", "sql", "toml", "ts"]
|
||||||
"css",
|
|
||||||
"go",
|
|
||||||
"gohtml",
|
|
||||||
"html",
|
|
||||||
"sql",
|
|
||||||
"toml",
|
|
||||||
"ts",
|
|
||||||
]
|
|
||||||
kill_delay = "500ms"
|
kill_delay = "500ms"
|
||||||
log = "air-build.log"
|
log = "air-build.log"
|
||||||
send_interrupt = true
|
send_interrupt = true
|
||||||
|
|||||||
23
README.md
23
README.md
@@ -12,13 +12,20 @@
|
|||||||
<img alt="License" src="https://img.shields.io/badge/license-MIT-green?style=flat-square" />
|
<img alt="License" src="https://img.shields.io/badge/license-MIT-green?style=flat-square" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
MyAnimeList is a small self-hosted anime tracker and playback app. It keeps the catalog, watchlist, progress tracking, and player in one place, backed by a single SQLite database and a single Go server.
|
MyAnimeList is a small self-hosted anime tracker and playback app. It keeps the catalog, watchlist,
|
||||||
|
progress tracking, and player in one place, backed by a single SQLite database and a single Go
|
||||||
|
server.
|
||||||
|
|
||||||
Most of the UI is rendered on the server. HTMX handles lightweight updates like pagination and watchlist changes, while TypeScript is kept for the parts that need real browser state: the video player, search page, theme handling, and skip segment editor. The app also includes local users, API tokens, subtitle support, playlist rewriting, provider integrations, migrations, and startup data fixes.
|
Most of the UI is rendered on the server. HTMX handles lightweight updates like pagination and
|
||||||
|
watchlist changes, while TypeScript is kept for the parts that need real browser state: the video
|
||||||
|
player, search page, theme handling, and skip segment editor. The app also includes local users, API
|
||||||
|
tokens, subtitle support, playlist rewriting, provider integrations, migrations, and startup data
|
||||||
|
fixes.
|
||||||
|
|
||||||
## Running
|
## Running
|
||||||
|
|
||||||
Requires [`mise`](https://mise.jdx.dev/), a C compiler for SQLite, and the tools managed in `.mise.toml`.
|
Requires [`mise`](https://mise.jdx.dev/), a C compiler for SQLite, and the tools managed in
|
||||||
|
`.mise.toml`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mise install
|
mise install
|
||||||
@@ -28,11 +35,17 @@ go run ./cmd/user <username> <password>
|
|||||||
just dev
|
just dev
|
||||||
```
|
```
|
||||||
|
|
||||||
The app starts on `http://localhost:3000` by default. Configuration comes from environment variables, and a local `.env` file is loaded automatically. The most useful options are `PORT`, `DATABASE_FILE`, `PLAYBACK_PROXY_SECRET`, `EPISODE_AVAILABILITY_MODE`, and `ANIMESCHEDULE_API_TOKEN`.
|
The app starts on `http://localhost:3000` by default. Configuration comes from environment
|
||||||
|
variables, and a local `.env` file is loaded automatically. The most useful options are `PORT`,
|
||||||
|
`DATABASE_FILE`, `PLAYBACK_PROXY_SECRET`, `EPISODE_AVAILABILITY_MODE`, and
|
||||||
|
`ANIMESCHEDULE_API_TOKEN`.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
The codebase is split between Go feature packages, external integrations, server-rendered templates, and a small frontend asset pipeline. `cmd/server` starts the web app, `cmd/user` contains local admin tools, `internal` holds the application modules, `integrations` holds provider clients, and `templates`, `static`, and `dist` contain the UI.
|
The codebase is split between Go feature packages, external integrations, server-rendered templates,
|
||||||
|
and a small frontend asset pipeline. `cmd/server` starts the web app, `cmd/user` contains local
|
||||||
|
admin tools, `internal` holds the application modules, `integrations` holds provider clients, and
|
||||||
|
`templates`, `static`, and `dist` contain the UI.
|
||||||
|
|
||||||
The common development commands are in the `justfile`.
|
The common development commands are in the `justfile`.
|
||||||
|
|
||||||
|
|||||||
20
lefthook.yml
20
lefthook.yml
@@ -14,29 +14,39 @@
|
|||||||
"lint:ts":
|
"lint:ts":
|
||||||
{
|
{
|
||||||
"glob": "*.{ts,js,tsx,jsx}",
|
"glob": "*.{ts,js,tsx,jsx}",
|
||||||
"run": "bunx oxlint --ignore-path .oxlintignore {staged_files} --max-warnings 0 --tsconfig ./tsconfig.json --type-aware",
|
"run":
|
||||||
|
"bunx oxlint --ignore-path .oxlintignore {staged_files} --max-warnings 0 --tsconfig
|
||||||
|
./tsconfig.json --type-aware",
|
||||||
},
|
},
|
||||||
"go-fmt":
|
"go-fmt":
|
||||||
{
|
{
|
||||||
"glob": "*.go",
|
"glob": "*.go",
|
||||||
"run": 'files=$(gofmt -l {staged_files}); test -z "$files" || (printf "go files need formatting:\n%s\n" "$files"; exit 1)',
|
"run":
|
||||||
|
'files=$(gofmt -l {staged_files}); test -z "$files" || (printf "go files need
|
||||||
|
formatting:\n%s\n" "$files"; exit 1)',
|
||||||
},
|
},
|
||||||
"go-lint":
|
"go-lint":
|
||||||
{
|
{
|
||||||
"glob": "*.go",
|
"glob": "*.go",
|
||||||
"run": 'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} golangci-lint run --new-from-rev=HEAD ./{}',
|
"run":
|
||||||
|
'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{}
|
||||||
|
golangci-lint run --new-from-rev=HEAD ./{}',
|
||||||
},
|
},
|
||||||
"go-test":
|
"go-test":
|
||||||
{
|
{
|
||||||
"glob": "*.go",
|
"glob": "*.go",
|
||||||
"run": 'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go test -count=1 ./{}',
|
"run":
|
||||||
|
'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go test
|
||||||
|
-count=1 ./{}',
|
||||||
},
|
},
|
||||||
"ts-typecheck": { "glob": "*.ts", "run": "bunx tsc -p tsconfig.json --noEmit" },
|
"ts-typecheck": { "glob": "*.ts", "run": "bunx tsc -p tsconfig.json --noEmit" },
|
||||||
"build-assets": { "glob": "*.{ts,css}", "run": "bun run build:assets" },
|
"build-assets": { "glob": "*.{ts,css}", "run": "bun run build:assets" },
|
||||||
"go-build":
|
"go-build":
|
||||||
{
|
{
|
||||||
"glob": "*.go",
|
"glob": "*.go",
|
||||||
"run": 'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go build -o /dev/null ./{}',
|
"run":
|
||||||
|
'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go build -o
|
||||||
|
/dev/null ./{}',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user