feat: poll apt repo to verify reprepro accepted upload #70

Open
opened 2026-05-24 11:21:55 +02:00 by heiko · 0 comments
Owner

After a successful dupload run, gogogo has no feedback on whether reprepro
accepted the uploaded packages. A validation/polling step would make the
publish phase self-verifying and enable safe staging-dir cleanup with
confirmed acceptance.

Proposed behaviour

Add an optional verify_url field to each publish.destinations entry of
type dupload. When set, gogogo polls the given APT repo base URL after
upload until the expected package version appears (or a timeout is reached).

Example config:

publish:
  destinations:
    myrepo:
      type: dupload
      host: myrepo
      verify_url: https://apt.example.com

Polling strategy:

  • Construct the Packages.gz / Release URL from verify_url + distribution + arch
  • Retry with backoff until the package/version appears or timeout
  • On confirmed acceptance: log success; on timeout: warn but do not fail the run

Motivation

Without reprepro feedback:

  • We cannot distinguish "dupload succeeded but reprepro rejected" from
    "everything worked"
  • We cannot reliably purge staged files knowing reprepro holds them
    (currently gogogo purges payload files after dupload exits 0, but
    reprepro may still reject the upload asynchronously)

Staging directory moved to XDG cache and sidecar-based dedup added in
the accompanying commit; this issue tracks the verification step.

After a successful dupload run, gogogo has no feedback on whether reprepro accepted the uploaded packages. A validation/polling step would make the publish phase self-verifying and enable safe staging-dir cleanup with confirmed acceptance. ## Proposed behaviour Add an optional `verify_url` field to each `publish.destinations` entry of type `dupload`. When set, gogogo polls the given APT repo base URL after upload until the expected package version appears (or a timeout is reached). Example config: ```yaml publish: destinations: myrepo: type: dupload host: myrepo verify_url: https://apt.example.com ``` Polling strategy: - Construct the `Packages.gz` / `Release` URL from `verify_url` + distribution + arch - Retry with backoff until the package/version appears or timeout - On confirmed acceptance: log success; on timeout: warn but do not fail the run ## Motivation Without reprepro feedback: - We cannot distinguish "dupload succeeded but reprepro rejected" from "everything worked" - We cannot reliably purge staged files knowing reprepro holds them (currently gogogo purges payload files after dupload exits 0, but reprepro may still reject the upload asynchronously) ## Related Staging directory moved to XDG cache and sidecar-based dedup added in the accompanying commit; this issue tracks the verification step.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
heiko/gogogo#70
No description provided.