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
113 lines
3.4 KiB
YAML
113 lines
3.4 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
pull_request:
|
|
branches: [master]
|
|
|
|
jobs:
|
|
format:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Install make
|
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends make
|
|
- uses: actions/checkout@v7
|
|
- uses: actions/setup-go@v7
|
|
with:
|
|
go-version-file: go.mod
|
|
- run: make format
|
|
- run: git diff --exit-code
|
|
|
|
goreleaser-lint:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- uses: goreleaser/goreleaser-action@v7.2.3
|
|
with:
|
|
args: check
|
|
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Install make
|
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends make
|
|
- uses: actions/checkout@v7
|
|
- uses: actions/setup-go@v7
|
|
with:
|
|
go-version-file: go.mod
|
|
- run: make ci-lint
|
|
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Install make
|
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends make build-essential
|
|
- uses: actions/checkout@v7
|
|
- uses: actions/setup-go@v7
|
|
with:
|
|
go-version-file: go.mod
|
|
- run: make test
|
|
|
|
e2e:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
dind:
|
|
image: docker:29-dind
|
|
env:
|
|
DOCKER_TLS_CERTDIR: ""
|
|
# GitHub honours this. The Forgejo runner ignores a workflow's options
|
|
# and takes `privileged` from its own config, which is set there.
|
|
options: --privileged
|
|
# containerd needs a little over ten seconds to boot on this runner and
|
|
# dockerd waits exactly ten, a limit no flag changes. Start containerd
|
|
# first and hand dockerd the socket, and there is no race to lose.
|
|
# The containerd image store keeps layers in /var/lib/containerd, on the
|
|
# container's own overlayfs, where nested overlay mounts fail. overlay2
|
|
# keeps them in the /var/lib/docker volume instead.
|
|
cmd:
|
|
- sh
|
|
- -c
|
|
- >-
|
|
containerd &
|
|
sleep 8;
|
|
exec dockerd-entrypoint.sh dockerd --containerd /run/containerd/containerd.sock
|
|
--feature containerd-snapshotter=false
|
|
--host=tcp://0.0.0.0:2375 --host=unix:///var/run/docker.sock
|
|
env:
|
|
DOCKER_HOST: tcp://dind:2375
|
|
TESTCONTAINERS_RYUK_DISABLED: true
|
|
steps:
|
|
- name: Install make
|
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends make
|
|
- uses: actions/checkout@v7
|
|
- uses: actions/setup-go@v7
|
|
with:
|
|
go-version-file: e2e/go.mod
|
|
- uses: oven-sh/setup-bun@v2
|
|
- name: Wait for Docker
|
|
run: |
|
|
for i in $(seq 1 120); do
|
|
docker info >/dev/null 2>&1 && exit 0
|
|
sleep 1
|
|
done
|
|
echo "Docker daemon not ready" >&2
|
|
exit 1
|
|
- name: Install Playwright browsers
|
|
run: make e2e-install
|
|
- run: make e2e
|
|
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Install make and UPX
|
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends make upx-ucl
|
|
- uses: actions/checkout@v7
|
|
- uses: actions/setup-go@v7
|
|
with:
|
|
go-version-file: go.mod
|
|
- uses: oven-sh/setup-bun@v2
|
|
- uses: goreleaser/goreleaser-action@v7.2.3
|
|
with:
|
|
install-only: true
|
|
- run: make build
|