Added to web/package.json devDeps: eslint (9, flat config) + eslint-plugin-svelte + typescript-eslint + globals; prettier + prettier-plugin-svelte; vitest (jsdom env) + jsdom. New scripts: lint, lint:fix, format, format:check, test, test:watch. Configs: - web/eslint.config.js — flat config, TS + Svelte, browser/node globals, no-explicit-any as warn, unused-vars as error (ignores _-prefixed). - web/.prettierrc.json — single-quote, 100 width, svelte parser override. - web/.prettierignore — dist/node_modules/build/lockfiles. - web/vite.config.ts — vitest test block via reference directive, jsdom env, globals enabled. Sample test: web/src/lib/utils.test.ts (6 tests covering relativeTime, truncateMiddle, debounce — all passing). CI: new web job in .gitea/workflows/ci.yml (npm ci, check [advisory], lint [advisory], format:check [advisory], test [gate], build [gate]). Advisory steps use continue-on-error until the baseline is clean — matching the existing golangci-lint advisory pattern. Known baseline surfaced by the new toolchain (pre-existing, not caused by R8): svelte-check 154 errors (133-file config cascade), eslint 126 errors + 12 warnings (unused vars, @html XSS, unused CSS), prettier 175 unformatted files. Fixing these is a follow-up cleanup. VERSION 0.7.9 -> 0.7.10. Plan R8 marked done; C.1 updated.
100 lines
2.8 KiB
YAML
100 lines
2.8 KiB
YAML
# Oikos CI (Gitea Actions). Gates the deploy webhook on a green run (plan M1).
|
|
# Mirrors `make lint`, `make test`, and the generated-code drift guard.
|
|
name: ci
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
|
|
jobs:
|
|
build-test:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
postgres:
|
|
image: timescale/timescaledb:2.17.2-pg16
|
|
env:
|
|
POSTGRES_DB: oikos
|
|
POSTGRES_USER: oikos
|
|
POSTGRES_PASSWORD: oikos_dev
|
|
ports:
|
|
- 5432:5432
|
|
options: >-
|
|
--health-cmd "pg_isready -U oikos"
|
|
--health-interval 5s
|
|
--health-timeout 5s
|
|
--health-retries 10
|
|
env:
|
|
OIKOS_TEST_DATABASE_URL: postgres://oikos:oikos_dev@postgres:5432/oikos?sslmode=disable
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-go@v5
|
|
with:
|
|
go-version: "1.26"
|
|
cache: true
|
|
|
|
- name: go vet
|
|
run: go vet ./...
|
|
|
|
- name: golangci-lint
|
|
uses: golangci/golangci-lint-action@v6
|
|
with:
|
|
version: latest
|
|
args: --timeout 5m
|
|
continue-on-error: true # advisory until the lint baseline is clean
|
|
|
|
- name: govulncheck
|
|
run: |
|
|
go install golang.org/x/vuln/cmd/govulncheck@latest
|
|
govulncheck ./... || true # advisory
|
|
|
|
- name: generated code is up to date
|
|
run: make generate-check
|
|
|
|
- name: build
|
|
run: go build ./...
|
|
|
|
- name: test (race + coverage)
|
|
run: go test -race -covermode=atomic -coverprofile=coverage.out -timeout 300s ./...
|
|
|
|
- name: coverage gates (policy + learning ≥ 80%, others ≥ 60%)
|
|
run: |
|
|
go tool cover -func=coverage.out | tail -1
|
|
# Note: policy/ and learning/ packages land in Phase 3; enforce
|
|
# their 80% gate then. For now, report total coverage.
|
|
|
|
docker-build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: docker build (verify image builds; no push)
|
|
run: docker build -f compose/oikos/Dockerfile -t oikos:ci .
|
|
|
|
web:
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: web
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '22'
|
|
cache: npm
|
|
cache-dependency-path: web/package-lock.json
|
|
- run: npm ci
|
|
- name: svelte-check (advisory — baseline not yet clean)
|
|
run: npm run check
|
|
continue-on-error: true
|
|
- name: eslint (advisory — baseline not yet clean)
|
|
run: npm run lint
|
|
continue-on-error: true
|
|
- name: prettier format check (advisory — baseline not yet clean)
|
|
run: npm run format:check
|
|
continue-on-error: true
|
|
- name: test
|
|
run: npm run test
|
|
- name: build
|
|
run: npm run build
|