Commit Graph

13 Commits

Author SHA1 Message Date
unkin-agent 42307f285f Adopt golib/pg for migrations and pool construction
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
encapi's schema was a cumulative IF NOT EXISTS blob re-executed inline on every
start: it grows forever, records nothing, and cannot express a change that is
not a fresh CREATE. golib owns that mechanism now, so encapi keeps the SQL and
drops the runner.

- Move the DDL verbatim into migrations/0001_init.sql, embedded via
  migrations.FS. It stays IF NOT EXISTS-guarded, so the first start against the
  live database re-runs it as a no-op and only lands the schema_migrations row.
- Build the pool with pg.NewMigrated under the advisory lock named
  encapi-migrations, and delete the inline migrate(). database.New now takes a
  context and a logger; main.go hands it the signal context so a start blocked
  on the migration lock still dies on SIGTERM.
- Render the DSN with pg.DSN. The env var contract is untouched — the fields are
  still resolved by internal/config, because encapi defaults DBUSER and DBNAME
  to "encapi" where pg.DSNFromEnv treats both as required.
- Guard the set: embedded files must match migrations/, every CREATE must be
  idempotent, the derived lock key is pinned, and a container test proves the
  adoption path over a database that predates schema_migrations.
- Plumb GOPRIVATE=git.unkin.net for the first cross-repo Go dependency:
  exported by the Makefile, set in the Dockerfile and the woodpecker Go steps,
  documented in the README.
2026-09-02 00:17:04 +10:00
benvin 554e2e4f9c Merge pull request 'ci: add buildkit_config CA trust for artifactapi push' (#5) from benvin/buildx-ca-config into main
Reviewed-on: #5
2026-08-15 18:47:15 +10:00
unkin-agent 245a46aa5d ci: add buildkit_config CA trust for artifactapi push
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
2026-08-15 18:31:01 +10:00
benvin e86b24f493 Merge pull request 'ci: use CA-baked plugin-docker-buildx image for artifactapi push' (#4) from benvin/buildx-ca-plugin-image into main
Reviewed-on: #4
2026-08-15 18:21:10 +10:00
unkin-agent 749059d235 ci: use CA-baked plugin-docker-buildx image for artifactapi push
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
The upstream woodpeckerci/plugin-docker-buildx image does not trust the
internal CA, so pushes/pulls against artifactapi.k8s.syd1.au.unkin.net
fail. Swap both the docker.yaml push step (docker-encapi) and the
build.yaml PR dry-run step to the custom CA-baked image published at
artifactapi.k8s.syd1.au.unkin.net/docker-internal/plugin-docker-buildx:latest.
2026-08-15 18:04:16 +10:00
benvin 17f043d856 Merge pull request 'ci: push images to artifactapi registry instead of gitea' (#3) from benvin/push-artifactapi into main
Reviewed-on: #3
2026-07-30 20:56:25 +10:00
unkinben 4d8ec0f54c ci: push images to artifactapi registry instead of gitea
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
Hard switch of the docker push target from the Gitea registry to the
artifactapi local docker registry (docker-internal); the Gitea VM and its
registry are being retired. Drops the droneci/DRONECI_PASSWORD creds since
artifactapi accepts unauthenticated in-cluster pushes. Also updates the README image path.

Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
2026-07-30 00:34:59 +10:00
benvin 1dc02ce5cf Merge pull request 'fix: add missing cmd/ (gitignore excluded source dirs)' (#2) from benvin/fix-missing-cmd into main
ci/woodpecker/tag/release Pipeline was successful
ci/woodpecker/tag/docker Pipeline was successful
Reviewed-on: #2
v0.1.1
2026-07-05 17:18:26 +10:00
unkinben 2946db9b49 fix pre-commit go-vet for multi-package layout
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
The dnephin go-vet hook runs 'go vet' at the repo root, which has no Go files
(all live under cmd/, internal/, pkg/), failing with 'no Go files'. Replace it
with a local 'go vet ./...' hook, mirroring artifactapi.
2026-07-05 17:11:55 +10:00
unkinben 7e9fec60d4 fix: add missing cmd/ (gitignore was excluding source dirs)
ci/woodpecker/pr/pre-commit Pipeline failed
ci/woodpecker/pr/build Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
The initial commit's .gitignore had unanchored 'encapi' and 'encapi-cli'
patterns intended for built binaries; they also matched the cmd/encapi and
cmd/encapi-cli source directories, so those were silently never committed. The
tag build then failed with 'stat /build/cmd/encapi: directory not found'.

- anchor the binary ignores to the repo root (/encapi, /encapi-cli)
- add the cmd/encapi (server) and cmd/encapi-cli (CLI) main packages
2026-07-05 17:04:18 +10:00
benvin 02ef30ee17 Merge pull request 'initial implementation: encapi ENC server + CLI' (#1) from benvin/initial-implementation into main
ci/woodpecker/tag/release Pipeline failed
ci/woodpecker/tag/docker Pipeline failed
Reviewed-on: #1
v0.1.0
2026-07-05 00:10:17 +10:00
unkinben 373d21a744 initial implementation: encapi ENC server + CLI
Postgres-backed External Node Classifier for Puppet, replacing Cobbler.
- encapi HTTP server (chi + pgx): read/write API + two ENC document shapes
  (reshaped for the exec terminus; cobbler-wire for enc_direct_facts.rb)
- encapi-cli: classify/node/role/status CRUD + import-cobbler seeder
- pkg/client Go SDK; unit tests across all packages (DB via testcontainers)
- Dockerfile (distroless), Makefile, nfpm RPM (encapi-cli + encapi-enc wrapper),
  Woodpecker CI, docs/cutover.md
2026-07-04 23:45:15 +10:00
gitadmin b83d214e9a Initial commit 2026-07-04 23:40:45 +10:00