ci: phase 4 automation — web job, lint-httpapi, golangci
CI / changes (push) Successful in 10s
CI / openapi (push) Has been skipped
CI / web (push) Failing after 41s
CI / go (push) Successful in 52s
CI / docker-web (push) Successful in 2m14s
CI / docker-bird (push) Successful in 1m2s
CI / bird2 (push) Successful in 21s
CI / docker-go (push) Successful in 3m34s

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-05-20 00:23:14 +07:00
co-authored by Cursor
parent ea65451160
commit 64516c316d
4 changed files with 68 additions and 1 deletions
+1 -1
View File
@@ -234,7 +234,7 @@ npx @redocly/cli lint docs/openapi.yaml
# birdfmt: go test ./internal/birdfmt/... -count=1
```
**Рекомендуется (не внедрено):** CI job `web`; `.golangci.yml`; pre-commit gofmt/prettier.
**Рекомендуется (частично внедрено):** CI job `web` (Gitea); `scripts/lint-httpapi.sh` в job `go`; `.golangci.yml` (локально); pre-commit gofmt/prettier.
**Только code review:** слои SQL; роли; idempotency; OpenAPI bodies; secrets в compose.
+22
View File
@@ -121,6 +121,26 @@ jobs:
- name: Lint OpenAPI (Redocly)
run: npx --yes @redocly/cli@1 lint docs/openapi.yaml
# ---------------------------------------------------------------------------
web:
needs: [changes]
if: needs.changes.outputs.web == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
cache-dependency-path: web/package-lock.json
- name: npm ci, check, lint
run: |
set -euxo pipefail
cd web
npm ci
npm run check
npm run lint
# ---------------------------------------------------------------------------
go:
needs: [changes]
@@ -135,6 +155,8 @@ jobs:
cache-dependency-path: go.sum
- name: Vet
run: go vet ./...
- name: Lint httpapi (ERR-01 / ARCH-01)
run: sh scripts/lint-httpapi.sh
- name: Test
run: go test ./... -race -count=1
- name: Build all commands
+17
View File
@@ -0,0 +1,17 @@
run:
timeout: 5m
linters:
enable:
- gofmt
- govet
- errcheck
issues:
exclude-use-default: false
max-issues-per-linter: 50
max-same-issues: 20
linters-settings:
gofmt:
simplify: true
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env sh
# Engineering gates for internal/httpapi (ERR-01, ARCH-01).
set -eu
ROOT="$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
HTTPAPI="internal/httpapi"
FAIL=0
echo "==> ERR-01: no err.Error() in 5xx problem details"
if grep -rE 'writeProblem\(w, http\.StatusInternalServerError.*err\.Error\(\)' "$HTTPAPI" 2>/dev/null; then
FAIL=1
fi
if grep -rE 'writeProblem\(w, http\.StatusBadGateway.*err\.Error\(\)' "$HTTPAPI" 2>/dev/null; then
FAIL=1
fi
echo "==> ARCH-01: no SQL/pgx queries in httpapi"
if grep -rE 'pool\.(Query|Exec|QueryRow)|SELECT |INSERT INTO |UPDATE .* SET |DELETE FROM ' "$HTTPAPI" 2>/dev/null; then
FAIL=1
fi
if [ "$FAIL" -ne 0 ]; then
echo "lint-httpapi: failed" >&2
exit 1
fi
echo "lint-httpapi: ok"