Skip to content

build(deps): bump python from 3.12-slim to 3.14-slim in /admin-api in the docker-admin-api-minor-patch group#1

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/docker/admin-api/docker-admin-api-minor-patch-6dafb4a59b
Closed

build(deps): bump python from 3.12-slim to 3.14-slim in /admin-api in the docker-admin-api-minor-patch group#1
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/docker/admin-api/docker-admin-api-minor-patch-6dafb4a59b

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 16, 2026

Bumps the docker-admin-api-minor-patch group in /admin-api with 1 update: python.

Updates python from 3.12-slim to 3.14-slim

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Bumps the docker-admin-api-minor-patch group in /admin-api with 1 update: python.


Updates `python` from 3.12-slim to 3.14-slim

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.14-slim
  dependency-type: direct:production
  dependency-group: docker-admin-api-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file docker Pull requests that update docker code labels May 16, 2026
@github-advanced-security
Copy link
Copy Markdown

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

Copy link
Copy Markdown
Contributor

@ciprianiacobescu ciprianiacobescu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bulk approval of Dependabot dependency update. Manual merge after CI workflow remediation completes.

@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github May 16, 2026

Looks like python is no longer updatable, so this is no longer needed.

@dependabot dependabot Bot closed this May 16, 2026
@dependabot dependabot Bot deleted the dependabot/docker/admin-api/docker-admin-api-minor-patch-6dafb4a59b branch May 16, 2026 17:43
ciprianiacobescu pushed a commit that referenced this pull request May 23, 2026
…vices, errors surface

Three restore-correctness bugs surfaced when validating that
backup → down -v → restore actually achieves the user's success
criterion ("after a restore I do not need to change anything").

Bug #4: dev-backup.sh:367 — `pg_dump` was called without `--clean
--if-exists`. The resulting dump had no DROP statements. When
dev-restore.sh piped it into psql against a non-empty schema (e.g.,
a freshly-seeded one), every INSERT failed with duplicate-key /
already-exists errors. Fix: add `--clean --if-exists` so the dump
emits `DROP INDEX IF EXISTS` + `DROP TABLE IF EXISTS` at the head.

Bug #5: dev-restore.sh:441 — `psql ... 2>/dev/null` silenced ALL
postgres errors. A 100%-broken restore would report "✅ pg_dump
restored to mintkey database" and the operator would not know.
Fix: remove `2>/dev/null`; add `--set ON_ERROR_STOP=on` so psql
exits non-zero on the FIRST error (rather than racing through
the dump leaving the DB partly-applied).

Bug #6: dev-restore.sh — did NOT stop services that hold open
postgres connections (keycloak, admin-api, mcp-server, broker,
kong-syncer, admin-ui). With the new `--clean` dump, the DROP
TABLE statements would block on row locks held by those services.
Fix: `docker compose stop` the connection-holders before psql,
then `docker compose up -d --wait` after.

Verification (this commit):
- Took a backup with the fix; decrypted+gunzipped the dump:
    DROP TABLE statements:  ~110
    DROP INDEX statements:  ~300
    CREATE TABLE statements: ~106
    INSERT INTO statements: ~5  (just the seed-job-default rows)
  → Bug #4 confirmed fixed.

End-to-end round-trip test (backup → down -v → restore → verify
agent+service intact) is the next step; user will create an
agent + service first so there's real data to round-trip.

Counts now of session-discovered backup/restore bugs:
  #1 ✅ fixed (51e7077) pg_dump silently skipped — Service field
  #2 ✅ fixed (a47a4e6) vault-adapter detection — same class
  #3 ✅ fixed (49d519a) host-file admin_password drift
  #3a ✅ fixed (77ab040) Makefile colon-pattern blocked make admin-password
  #4 ✅ fixed (this commit) pg_dump --clean
  #5 ✅ fixed (this commit) psql errors surfaced
  #6 ✅ fixed (this commit) restore stops dependent services
ciprianiacobescu pushed a commit that referenced this pull request May 23, 2026
…pter + proxy-plugin

Round-trip validation surfaced 2 more bugs after #4 #5 #6 were fixed.

Bug #7: dev-backup.sh:367 — pg_dump was called with `--no-privileges`,
which strips ALL `GRANT` / `REVOKE` statements from the dump. After
restore (DROP TABLE + CREATE TABLE), `mintkey_app` and
`mintkey_subscriber` had zero privileges on every table → every query
from admin-api / mcp-server / kong-syncer / proxy-plugin failed with
"permission denied for table services|agents|...".

Fix: drop `--no-privileges`. The dump now emits the same GRANTs that
liquibase migration 009-roles.yaml normally creates (212 GRANTs in a
fresh dump vs 0 before). Verified post-restore: agent key → 200 OK
without manual GRANT intervention.

Bug #8: dev-restore.sh — the service stop-list before the postgres
restore did not include `vault-adapter` or `proxy-plugin`. Two
distinct failures result:

  - vault-adapter holds an open SQLite file handle on
    /var/lib/vault/vault.db inside the vault_data volume. When that
    volume is replaced from the backup tarball, the kernel keeps
    serving the OLD inode to vault-adapter's file descriptor. Net
    effect: `GetCredential` returns "not found" for every credential
    even though the restored sqlite file is correct on disk. Proxy
    call → HTTP 502 "vault error".

  - proxy-plugin caches DEKs in-memory keyed by service_id. If
    service IDs survive the restore (they do — same UUIDs in the
    dump), the cache may shortcut to a stale "not found" or to an
    encrypted-DEK that the restored KEK can no longer decrypt.

Fix: add both to the stop-list. They get cleanly restarted by the
post-restore `docker compose up -d --wait`.

End-to-end verification with both fixes (round-trip test):
  - backup → docker compose down -v → up → dev-restore.sh
  - Zero manual SQL, zero manual restarts needed
  - Agent key works, request_token issues JWT, proxy call to GitHub
    API returns 200 authenticated as ciprianiacobescu
  - make admin-password returns the PRE-backup password
  - postgres row counts match baseline exactly (1/1/1/1/1/1/8)

Counts of session-discovered backup/restore bugs (all fixed):
  #1 ✅ pg_dump silently skipped — Service field (51e7077)
  #2 ✅ vault-adapter detection — same class (a47a4e6)
  #3 ✅ host-file admin_password drift (49d519a)
  #3a ✅ Makefile colon-pattern blocked `make admin-password` (77ab040)
  #4 ✅ pg_dump --clean --if-exists (a1dc9e3)
  #5 ✅ psql errors surfaced (a1dc9e3)
  #6 ✅ restore stops dependent services (a1dc9e3)
  #7 ✅ this commit — pg_dump includes GRANTs
  #8 ✅ this commit — restore stops vault-adapter + proxy-plugin
ciprianiacobescu pushed a commit that referenced this pull request May 23, 2026
…lthchecks

Round-trip validation v3 surfaced 2 more bugs after #4#8 were fixed.

Bug #9: dev-restore.sh processed manifest entries in order. The pg_dump
iteration stopped services, applied the dump, restarted them. Then the
volume iterations (vault_data, vault_kek, bootstrap_secrets) restored
tarballs WHILE vault-adapter / proxy-plugin were already running with
stale file handles into those volumes. Net effect: post-restore the
volumes were correct on disk, but vault-adapter served "GetCredential
not found" from the old inode → proxy → HTTP 502 "vault error".

Fix: after the manifest loop completes (so ALL volumes + the pg_dump
are restored), restart every data-dependent service ONCE. This drops
all stale handles + in-memory caches regardless of manifest order.

Bug #10: `docker compose restart` is fire-and-forget. It returns as
soon as the docker daemon kicks the containers, NOT when they're
actually responsive. End-to-end test showed admin-ui returning fast
enough to confuse the verifier into "Connection reset by peer" while
uvicorn was still bootstrapping in mcp-server / admin-api.

Fix: chain `docker compose up -d --wait --timeout 180` after the
restart. up -d is a no-op for already-running containers, but --wait
blocks until every service's compose healthcheck passes (or times out).
Callers can now hit /v1/tools/list_services immediately after the
script returns and get a real response, not Connection-reset.

Round-trip test v3 (with #7 #8 #9 #10):
  backup → docker compose down -v → up → dev-restore.sh → verify
  WITHOUT ANY manual SQL, manual GRANTs, manual restarts, or sleeps:
    [1/4] list_services     HTTP 200  ✅
    [2/4] request_token     HTTP 200  ✅
    [3/4] proxy → GitHub    HTTP 200  ✅  authenticated as ciprianiacobescu
    [4/4] admin password    yAPal2y2J... ✅ matches pre-backup

Success criterion met: "after restore I do not need to change anything."

Final tally of session-discovered backup/restore bugs (all fixed):
  #1 ✅ pg_dump silently skipped — Service field (51e7077)
  #2 ✅ vault-adapter detection — same class (a47a4e6)
  #3 ✅ host-file admin_password drift (49d519a)
  #3a ✅ Makefile colon-pattern blocked make admin-password (77ab040)
  #4 ✅ pg_dump --clean --if-exists (a1dc9e3)
  #5 ✅ psql errors surfaced (a1dc9e3)
  #6 ✅ restore stops dependent services (a1dc9e3)
  #7 ✅ pg_dump includes GRANTs (2fba9c3)
  #8 ✅ restore stops vault-adapter + proxy-plugin (2fba9c3)
  #9 ✅ this commit — post-loop service restart, manifest-order independent
  #10 ✅ this commit — restart waits for healthchecks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file docker Pull requests that update docker code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants