-
ReleaseKit v0.7.0 Stable
released this
2026-11-02 14:00:17 +00:00 | 0 commits to main since this releaseReleaseKit v0.7.0
Summary
ReleaseKit improves source-publication integrity, cancellation, credential-safe
diagnostics, partial-result reporting, and temporary-file cleanup. It also bounds
retained Go failure diagnostics and remote attachment comparison work while
preserving the existing public facades and configuration formats.Publication and Git operations
- Exact tag pushes disable submodule recursion, correcting inherited
push.recurseSubmodules=onlysettings that could report success without
publishing the release tag. - ReleaseKit-owned Git inspection and preparation use original objects when
replacement refs exist. Committed module identity, release notes, validation
inputs, and build source eligibility use that consistent view. Ordinary dirty
builds remain supported, with their source eligibility reported separately. - A verified local tag object remains available in
PublicationResult.TagObject
when later inspection fails. Errors identify a possibly retained local ref
when its object ID could not be established. Failed verification stops before
a push. - HTTP(S) userinfo is masked in owned Git diagnostics and CLI output, including
literal apostrophes in credentials and failed CI checkout preparation. Native
Git authentication, exact endpoint comparisons, and the raw captured
PublicationResult.Endpointvalue retain their existing behavior. - Child environment overlays preserve the working-directory-derived
PWDon
POSIX systems. Native Git hooks now receive the expected directory environment
when ReleaseKit is invoked from another checkout or module subdirectory.
Cancellation and diagnostic retention
- Buffered subprocess output has bounded I/O teardown after cancellation or
child exit, including when descendants retain inherited output descriptors.
Piped Git-reader cancellation closes owned pipes and joins child cleanup.
Cancellation remains recognizable througherrors.Is; ordinary execution
failures preserve their underlying causes. - A queued blob read rechecks cancellation after acquiring the reader mutex,
preserving a healthy batch session for later reads. - Status-only Go commands and dependency preparation retain a 1 MiB diagnostic
tail. Failed commands identify omitted earlier output. Existing streaming
output continues to be forwarded in full, and commands requiring returned
output keep their complete capture.
Builds and hosted delivery
- Completed build artifacts are reported only after hashing succeeds. A hashing
failure identifies the affected output and preserves earlier completed
artifacts and their digests. - Temporary allocation and cleanup failures retain their paths and underlying
causes, including candidate builds, native version checks, delivery builds,
tag-message files, and build receipts. - A managed-build cleanup failure after confirmed hosted delivery returns an
error alongsideDeliveryCompleteand the confirmed asset observations. The
CLI reports completed remote work and the local cleanup failure, returning
operational status 1. - Gitea attachment downloads follow at most ten redirects, retaining cycle
detection and per-origin authorization handling. Limit exhaustion is
unverifiable content. - Remote attachment comparison reads at most the locally verified expected size
plus one byte. Shorter or longer content conflicts; equal-length content still
requires the expected digest. Read, close, and cancellation errors remain
inspection failures, with existing attempted-write reconciliation preserved.
Shared Git observations, validation sequencing, artifact declaration matching,
and CLI workflows were consolidated internally. Consumer-facing types continue
to belong to the rootreleasekitand runtimebuildinfofacades.Compatibility and upgrade guidance
The module identifier remains
go.maximumdirect.net/releasekit, and the Go
consumer minimum remains 1.26.0. Existing v0.6.0 API calls, profile fields, and
build receipt formats remain supported. This minor release changes operational
behavior through the diagnostic and redirect budgets and cleanup-error reporting
described above.When adopting v0.7.0:
- Update library and CLI dependencies to v0.7.0 using the existing import paths
and profiles. - Handle a delivery error together with
DeliveryResult.State. For
DeliveryComplete, address the reported local cleanup path; the confirmed
hosted delivery is already complete. Continue to resolve partial, conflicting,
and unknown outcomes through their existing recovery guidance. - Retain candidate validation's streamed
Outputwhen complete test diagnostics
are needed. Status-only failure text now contains the retained tail and an
omission notice when applicable. - When using Git replacement refs, expect release evidence to be evaluated
against original committed objects. A build of dirty or replacement-derived
working content can succeed while remaining ineligible for binary delivery. - Inspect the reported local tag ref after a tag-creation or verification
failure, including whenTagObjectis empty. Continue to treat the raw
PublicationResult.Endpointas sensitive when handling it in application
output or logs.
See the publication guide,
build guide,
delivery guide,
CLI contract,
and Gitea integration guide
for current behavior. Source publication and hosted delivery retain their
separate outcomes under the maintainer procedure.Downloads
- Exact tag pushes disable submodule recursion, correcting inherited
-
ReleaseKit v0.6.0 Stable
released this
2026-11-01 23:43:20 +00:00 | 39 commits to main since this releaseReleaseKit v0.6.0
Summary
ReleaseKit adds file-based delivery credentials, optional checks for forbidden
committed files, neutral delivery coordination with explicit Gitea selection, and
authenticated, read-only credential preflight. It also corrects dependency
preparation, publication recovery, and build cancellation handling.Changes
- Delivery profiles can select a plain token file through
token_file.
Relative paths resolve from the checkout root; a nonblank token environment
value takes precedence. The CLI trims file contents and reports unreadable
or blank files as credential-loading failures. Library callers continue to
supply the token explicitly through the destination. ValidationSpec.ForbiddenFilesandvalidation.forbidden_filesselect
literal repository-relative paths that must be absent from the committed
candidate. This optional check can protect a local token-file path. It
inspects committed path metadata independently of module/shared-file inputs;
it does not inspect file contents or history.releasekit.DeliveryRequest.Destinationnow uses the facade-owned
releasekit.DeliveryDestination. SetForge: releasekit.ForgeGiteafor
Gitea delivery. The removedGiteaDestinationtype has no compatibility
alias.- Delivery profiles must include
"forge": "gitea". The selection is
required only whendeliverorci-deliveris requested; the URL does not
infer a backend.check,build, and sourcepublishremain independent of
delivery selection and credentials. releasekit.PreflightDeliveryallows callers to check a destination without
a checkout or tag.Deliverperforms the same read-only preflight
automatically. For Gitea, the check authenticates through repository-scoped
reads and makes no test release or asset writes.DeliveryPreflightErrorexposes classified failures and retains the
underlying cause. Successful preflight confirms authentication and repository
access plus available permission evidence; it does not guarantee future
release or asset writes. Gitea's code-push permission metadata does not
establish release-write or asset-write permission.- The CLI keeps
RELEASEKIT_GITEA_TOKENas its default token environment
setting and preserves configured environment/file precedence. Selection,
local credential-loading, and classified preflight configuration/access
errors return status 2; unavailable preflight and cancellation during
preflight/preparation return status 1. Later authorization failures follow
delivery outcomes. An unresolved write returns status 3, including when
cancellation prevents reconciliation; known delivery failures return 1. - Binary
ci-deliverchecks credentials before application dependency
downloads and checks again during delivery. The automatic check now precedes
full local artifact size and digest verification; those checks still finish
before hosted writes.
Correctness and efficiency
- Dependency preparation now resolves the containing checkout root, including
when called from a subdirectory or filesystem alias.ModuleDiris relative
to that root, and empty selection prepares the root module. Standalone use
retains the supplied directory as its base, including Go-only use when Git
is unavailable. Damaged checkout metadata and operational discovery failures
remain errors before dependency downloads. - Preparation overrides alternate module-file selection from inherited or
persistentGOFLAGS, while retaining other effective Go settings. Downloads
therefore use the selected module's ordinary metadata. - Candidate checking rejects a derived release tag that Git cannot create
before running validation. CI delivery also validates the selected module's
complete tag before dependency preparation. - Publication recovery treats a peeled-only tag observation as unresolved,
retains the original push failure, and reportsPublicationUnknownwith CLI
status 3. Complete tag observations retain their existing recovery behavior. - Cancellation and deadline expiration during build source inspection remain
identifiable througherrors.Is; partial results retain completed artifacts.
Local artifact inspection errors also retain their underlying causes through
delivery. - Gitea asset operations classify a missing or nonpositive service release ID
as a malformed observation before making an asset request. Page-only release
lookup retains its existing minimal response requirements. - Asset delivery uses linear pending-asset bookkeeping and sorts only missing
assets once, reducing repeated work during uploads and reconciliation.
Compatibility
This pre-1.0 minor release changes the public destination type and requires
explicit forge selection for delivery. Gitea is the supported backend.
Preparation callers that previously used a checkout subdirectory as their
implicit module selection must now select that module withModuleDir.
AmbientGOFLAGSno longer redirects preparation to an alternate module file.The module identifier remains
go.maximumdirect.net/releasekit, and the Go
consumer minimum remains 1.26.0. Receipt schemas and the separate source
publication and hosted-delivery outcomes retain their existing definitions.Upgrade guidance
Select v0.6.0 for library and CLI dependencies, then update integrations as
follows:- Replace
releasekit.GiteaDestinationwith
releasekit.DeliveryDestinationand set
Forge: releasekit.ForgeGiteain each API request. - Add
"forge": "gitea"to every profile used fordeliveror
ci-deliver, including profiles loaded from a tagged CI checkout. Keep the
existingbase_url, owner, repository, token environment, and token file
settings. - If handling preflight failures in Go, use
errors.Asto inspect
*releasekit.DeliveryPreflightErrorand useerrors.Isorerrors.Ason
its unwrapped cause as needed. - Continue to treat successful preflight as evidence of repository access,
not a guarantee that a later write will be accepted. Source publication
continues to use Git authentication and does not require hosted delivery
credentials. - For dependency preparation of a nested module, supply its repository-relative
path throughDependencyPreparationRequest.ModuleDir, even when
RepositoryDiralready points inside that module. Root-module consumers can
keepModuleDirempty. - To adopt file-based credentials, store the token in an ignored local file
and configuredelivery.token_file. Optionally add that same
repository-relative path tovalidation.forbidden_files. Credential loading
and candidate file validation are independent selections; configuring the
file alone does not enable the validator.
See the delivery guide, configuration reference,
CLI contract, and Gitea integration guide
for current behavior.Downloads
- Delivery profiles can select a plain token file through
-
ReleaseKit v0.1.0 Stable
released this
2026-10-07 02:50:32 +00:00 | 226 commits to main since this releaseReleaseKit v0.1.0
Summary
ReleaseKit's initial release provides an opinionated Go library and executable
for candidate validation, annotated source-tag publication, version injection,
selected-target builds, and Gitea release delivery.The root
releasekitfacade owns release orchestration. The separatebuildinfo
facade supplies lightweight runtime version access. Both belong to one Go module
with a Go 1.25.0 minimum language version.Capabilities
- Run the standard offline Go test suite once, followed by optional
product-specific checks and selected-target build verification. - Publish the exact annotated tag for a validated candidate already on
authoritativemain, with bounded recovery after failed or ambiguous pushes. - Cross-build selected Go targets with shared version injection, artifact names,
digests, and a native version smoke check. Source-only projects select no
binary targets. - Deliver committed release notes and declared assets to Gitea, preserving
existing content and reporting partial, conflicting, and uncertain outcomes. - Use one managed build-and-deliver operation or supply retained prebuilt
artifacts for retries and separate build/delivery environments. - Prepare tagged CI checkouts and dependencies through the shared
ci-deliver
command and maintained Woodpecker workflow.
See the CLI contract,
configuration reference,
consumer delivery guide,
and runtime version guide
for supported behavior.Adoption and compatibility
Consumers can select this initial baseline with:
go get gitea.maximumdirect.net/eric/ReleaseKit@v0.1.0 go install gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit@v0.1.0Profiles declare product identity, additional checks, selected binaries and
targets, and a Gitea destination. Applications obtain their embedded version
throughbuildinfo.Version().For consumers experimenting with earlier development revisions, rename the
ReleaseRequest.Validatecallback toAdditionalChecksand remove repeated
standard-suite commands from profilechecks.DeliveryRequest.Buildnow
accepts a*BuildSpecfor managed builds; usePrebuiltfor an existing
BuildResult.Compatibility follows the release policy: before
v1.0.0, minor releases may change documented contracts with migration guidance;
patch releases preserve contracts within their minor line.ReleaseKit's deliverables are this immutable source tag and the hosted page
containing this complete note. Consumer migration and live Woodpecker deployment
remain adoption work tracked in the product roadmap.Downloads
- Run the standard offline Go test suite once, followed by optional