generated from mathias/template-go-web
Phase C: the CI stage now shows the latest run's per-JOB status (Lint/Test, Build, Deploy, …), each coloured by outcome, from the Gitea /actions/tasks per-job entries — replacing the static cd.yml job-id list when live. LatestRunJobs/RunNodes + RunSummary.State aggregate, all test-first. Version: injected at build via -ldflags from `git describe --tags` (CI checkout now fetch-depth:0 + --build-arg), served in /api/atlas.json, shown in the header. No more hand-maintained version label drifting from the git tag. Verified: build/vet/lint(0)/test green; version ldflag served correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
// Package gitea reads the repo's own Gitea Actions run history from the
|
|
// in-cluster Gitea service (public read — no token), so the atlas can show the
|
|
// pipeline's live executions.
|
|
package gitea
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
// base is the in-cluster Gitea service by default; override with GITEA_BASE.
|
|
func base() string {
|
|
if b := os.Getenv("GITEA_BASE"); b != "" {
|
|
return b
|
|
}
|
|
return "http://gitea-http.gitea.svc.cluster.local:3000"
|
|
}
|
|
|
|
// Runs returns the raw /actions/tasks JSON for mathias/cad-atlas (newest first).
|
|
func Runs() ([]byte, error) {
|
|
url := base() + "/api/v1/repos/mathias/cad-atlas/actions/tasks?limit=20"
|
|
client := &http.Client{Timeout: 5 * time.Second}
|
|
resp, err := client.Get(url) //nolint:noctx // short-lived, timeout on the client
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
body, err := io.ReadAll(io.LimitReader(resp.Body, 4<<20))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.StatusCode != http.StatusOK {
|
|
return nil, fmt.Errorf("gitea runs: %s", resp.Status)
|
|
}
|
|
return body, nil
|
|
}
|