All checks were successful
CI / goreleaser-lint (push) Successful in 11s
CI / format (push) Successful in 44s
CI / lint (push) Successful in 5m30s
CI / test (push) Successful in 7m24s
CI / build (push) Successful in 7m8s
Release / release (push) Successful in 7m28s
CI / e2e (push) Successful in 26m54s
Upgrades every dependency in the code and the packaging, and adds a JS runtime to the container image so yt-dlp can solve YouTube JS challenges. ## Code - **Go server:** `modernc.org/sqlite` 1.59.0 → 1.60.1, `modernc.org/libc` 1.77.1, `xstrings` 1.6.2, `go-strftime` 1.1.0 (all indirect; no direct module had a newer version). - **Go e2e:** `moby/moby/api` 1.56.1, `moby/moby/client` 0.6.1, `gopsutil` 4.26.9, `klauspost/compress` 1.20.1. - **Webapp:** `vite` 8.3.2, `@tabler/icons-vue` 3.48.0, `dompurify` 3.4.16, `eslint-plugin-vue` 10.11.1. - **TypeScript 5.9.3 → 6.0.3.** Version 6 is now stable and inside the `typescript-eslint` range (`<6.1.0`). TypeScript 7 still breaks `typescript-eslint`. - `package-lock.json` stays on lockfile format v2 to keep the diff small. ## Packaging and CI - **Alpine 3.23 → 3.24** in `Containerfile` and `e2e/Dockerfile.e2e`. - **`docker:27-dind` → `docker:29-dind`** for the e2e CI service. - **`goreleaser-action` v6.4.0 → v7.2.3**, **`setup-qemu-action` / `setup-buildx-action` v3 → v4**. The only breaking change in their release notes is the Node 24 runtime. - **`golangci-lint` v2.13.2 → v2.14.0.** ## JS runtime for yt-dlp yt-dlp solves YouTube JS challenges with `yt-dlp-ejs` and a JS runtime. - **amd64 and arm64:** the image installs `deno` and `yt-dlp-ejs`. - **armv7:** Alpine ships no deno for armv7 (3.24 or edge). The image installs `nodejs` and writes `--js-runtimes node` to `/etc/yt-dlp.conf`, because yt-dlp only runs deno unless told otherwise. hako does not pass `--ignore-config`, so the file applies. ## Verification - `go test -race ./...`, e2e `go vet`, `golangci-lint` v2.14.0 (0 issues). - `eslint`, `vite build`, `goreleaser check`. - Built the `Containerfile` for `linux/amd64`, `linux/arm64` and `linux/arm/v7`. `yt-dlp -v` reports `JS runtimes: deno-2.7.4` on amd64/arm64 and `node-24.18.1` on armv7. - A real YouTube URL on amd64 resolved formats with deno as the JS challenge provider. Not tested on arm64 or armv7. - The e2e suite was not run locally. ## Known issues - **Docker 29 dind** is not tested yet. The e2e job starts `containerd` and `dockerd` with a custom command; this PR's CI run will show if it still works. - **`vue-tsc` reports 9 type errors, all also present on `master`:** the 8 known from #2, plus `process` in `vite.config.ts` (no `@types/node`). TypeScript 5.9.3 gives the same error. Reviewed-on: #3
108 lines
3.1 KiB
Makefile
108 lines
3.1 KiB
Makefile
PROJECT_NAME := hako
|
|
CGO_ENABLED := 0
|
|
|
|
DIST_PATH := ./dist
|
|
TEST_OPTIONS := -v -failfast -race -bench=. -benchtime=100000x -cover -coverprofile=coverage.out
|
|
TEST_TIMEOUT := 5m
|
|
|
|
GOLANGCI_LINT_VERSION := v2.14.0
|
|
|
|
# The Playwright CLI must match the module the e2e tests link against.
|
|
PLAYWRIGHT_MODULE := github.com/mxschmitt/playwright-go
|
|
PLAYWRIGHT_CMD := $(PLAYWRIGHT_MODULE)/cmd/playwright
|
|
|
|
.DEFAULT_GOAL := help
|
|
|
|
## help: Display this help message
|
|
.PHONY: help
|
|
help:
|
|
@echo "Available targets:"
|
|
@grep -E '^## ' $(MAKEFILE_LIST) | sed 's/## / /' | sort
|
|
|
|
## clean: Clean test cache, build files
|
|
.PHONY: clean
|
|
clean:
|
|
@rm -rf $(DIST_PATH)
|
|
@rm -rf webapp/dist
|
|
@rm -rf webapp/node_modules
|
|
@rm -f webapp/bun.lockb
|
|
@go clean -modcache -testcache
|
|
|
|
## clean-devdata: Clear devdata database and files (keeps config.yaml)
|
|
.PHONY: clean-devdata
|
|
clean-devdata:
|
|
@rm -rf devdata/data
|
|
@rm -f devdata/hako.db devdata/hako.db-shm devdata/hako.db-wal
|
|
|
|
## build: Build project using goreleaser (snapshot)
|
|
.PHONY: build
|
|
build: build-webapp
|
|
goreleaser build --snapshot --clean
|
|
|
|
## build-webapp: Build the webapp
|
|
.PHONY: build-webapp
|
|
build-webapp:
|
|
@which bun > /dev/null || (echo "Error: Bun is not installed. Install it from https://bun.sh" && exit 1)
|
|
@cd webapp && bun install && bun --bun node_modules/.bin/vite build
|
|
|
|
## build-docker: Build Docker image locally via goreleaser
|
|
.PHONY: build-docker
|
|
build-docker: build-webapp
|
|
goreleaser release --snapshot --clean
|
|
|
|
## run: Build frontend and run the server
|
|
.PHONY: run
|
|
run: build-webapp run-server
|
|
|
|
## run-server: Run the API server only (without building webapp)
|
|
.PHONY: run-server
|
|
run-server:
|
|
CGO_ENABLED=$(CGO_ENABLED) go run ./cmd/$(PROJECT_NAME)/*.go server --config devdata/config.yaml
|
|
|
|
## run-webapp: Run the webapp in dev mode with hot-reload
|
|
.PHONY: run-webapp
|
|
run-webapp:
|
|
@which bun > /dev/null || (echo "Error: Bun is not installed. Install it from https://bun.sh" && exit 1)
|
|
@cd webapp && bun --bun node_modules/.bin/vite --mode development
|
|
|
|
## format: Format code and tidy modules
|
|
.PHONY: format
|
|
format:
|
|
go fmt ./...
|
|
go mod tidy
|
|
|
|
## ci-lint: Run golangci-lint at the pinned version
|
|
.PHONY: ci-lint
|
|
ci-lint:
|
|
@go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)
|
|
$$(go env GOPATH)/bin/golangci-lint run ./...
|
|
|
|
## lint: Run all linters
|
|
.PHONY: lint
|
|
lint: lint-server lint-webapp
|
|
|
|
## lint-server: Check the server for linting errors
|
|
.PHONY: lint-server
|
|
lint-server:
|
|
@golangci-lint run ./...
|
|
|
|
## lint-webapp: Check the webapp for linting errors
|
|
.PHONY: lint-webapp
|
|
lint-webapp:
|
|
@which bun > /dev/null || (echo "Error: Bun is not installed. Install it from https://bun.sh" && exit 1)
|
|
@cd webapp && bun --bun node_modules/.bin/eslint .
|
|
|
|
## test: Run tests with coverage
|
|
.PHONY: test
|
|
test:
|
|
CGO_ENABLED=1 go test $(TEST_OPTIONS) -timeout=$(TEST_TIMEOUT) ./...
|
|
|
|
## e2e: Run end-to-end integration tests
|
|
.PHONY: e2e
|
|
e2e:
|
|
@./scripts/e2e.sh
|
|
|
|
## e2e-install: Install Playwright browsers
|
|
.PHONY: e2e-install
|
|
e2e-install:
|
|
@cd e2e && go run $(PLAYWRIGHT_CMD)@$$(go list -m -f '{{.Version}}' $(PLAYWRIGHT_MODULE)) install --with-deps chromium
|