• v0.4.0 d127f2ee55

    Release v0.4.0
    Some checks failed
    go-ci / lint + build + test (pull_request) Successful in 53s
    manifest-check / manifest-vs-tag consistency (pull_request) Successful in 3m6s
    manifest-check / check (pull_request) Successful in 0s
    go-ci / lint + build + test (push) Successful in 52s
    release / decide + act (push) Successful in 8s
    release / release (push) Successful in 0s
    release / attach-release-asset (push) Failing after 34s
    deploy / deploy purser to /srv/docker/purser (release) Failing after 1m53s
    Stable

    carpenter released this 2026-08-21 17:12:56 +02:00 | 4 commits to main since this release

    Added

    • release: attach a compiled purser-linux-amd64 binary to each Forgejo release (#16)

      A new attach-release-asset job runs after the cut and uploads the binary to the draft release before the operator publishes it. The binary is built with the same -ldflags "-X …/version.Tag=${TAG}" injection used by the Docker image, so the login page and the Docker-deployed binary report the same tag. The job is a no-op on non-cut runs (update / noop mode) and on dry runs.

    The dashboard can now choose a certificate's expiry at issue time, up to PURSER_MAX_CERT_LIFETIME. Leaving the box empty gives PURSER_CERT_LIFETIME as before. The control stays hidden until the ceiling is raised above the default, so nothing changes for a deployment that does not opt in.

    A request above the ceiling is refused before anything is signed, with the limit named. A request shorter than PURSER_DOWNLOAD_WINDOW is refused too: no minTLSCertDuration is set on the provisioner, so the CA would sign a certificate that can expire before it finishes being installed.

    • docs: document dashboard password rotation with hashpw (#44)

      Operators now have a runbook for replacing the mounted bcrypt hash without putting the password in argv or adding a change-password form to Purser.

    Changed

    None.

    Fixed

    • version: add tests for the Tag → VCS revision → dev fallback chain (#29)

      internal/version had no test file; purser#7 carried a negative-control AC for the dev/unknown fallback that was never met. Six tests now cover the three arms — Tag set, VCS revision present, and neither. One arm pins the empty-revision guard: vcs.revision present with an empty value must fall through to "dev". A mutation-verified negative control asserts the chain never returns an empty or invented string. Each arm uses an injectable readBuildInfo hook so tests exercise the full chain regardless of whether VCS info is available in the CI container.

    • release: address Lookout review 4976 on attach-release-asset job

    Removed

    None.

    Deprecated

    None.

    Upgrade

    None.

    Downloads