• v0.2.0 e030794969

    # ReleaseKit v0.2.0

    eric released this 2026-10-08 12:48:07 +00:00 | 81 commits to main since this release

    Summary

    ReleaseKit adds declarative candidate validation and module-selected release
    tooling for Woodpecker. Consumers can replace repeated release checks with typed
    Go selections or equivalent profile settings, while retaining product-specific
    assertions through AdditionalChecks and profile checks.

    New features

    • A facade-owned ValidationSpec on ReleaseRequest and corresponding profile
      validation object select shared checks for both Check and Publish.
      Structured ValidationError diagnostics identify the failed check, relevant
      paths and locations, compilation targets, directives, and size measurements.
      Wrapping preserves underlying causes and cancellation.
    • Race testing selects the race detector for the one standard Go suite. Separate
      full vet automatically disables test-time vet and runs after successful tests.
      Selected package-compilation targets run afterward with CGO_ENABLED=0,
      independently of executable artifacts. Source-only libraries can check target
      compatibility and retain page-only delivery.
    • Go formatting checks inspect committed regular Go source and report formatting
      differences while preserving files.
    • Offline Markdown validation checks local destinations and supported heading
      fragments, including inline/reference links, images, and autolinks. Heading
      anchors support visible text, duplicate headings, and Unicode. Outside-checkout
      destinations are reported as out of scope by default; consumers can select
      boundary enforcement. Submodule contents remain out of scope.
    • Independent module-distribution selections inspect committed workspace files
      and filesystem module replacements. Versioned replacements are permitted.
    • Optional file-size validation checks individual committed blobs, including
      symlink text, with a configurable limit and literal file/directory exclusions.
      Enabling the check selects a default limit of 1,000,000 bytes; only sizes
      strictly greater than the selected limit fail.
    • ExpectedPushURL and profile expected_push_url require an exact match with
      Git's effective push destination during publication preflight. A mismatch
      returns ErrUnexpectedPushURL before candidate validation or tag creation.
      Local Check ignores the publication expectation.
    • The maintained Woodpecker consumer template selects ReleaseKit from the
      released application's module configuration. It verifies the event tag and
      commit before building the tool, prepares tool dependencies in temporary module
      metadata, and preserves tagged module files. Retries use the triggering tag's
      dependency selection. ReleaseKit's self-bootstrap template also supports
      fetching missing tool dependencies after tag verification.

    See the configuration reference,
    candidate check guide,
    publication guide,
    and delivery guide
    for supported behavior and adoption examples.

    Compatibility

    The minimum Go version remains 1.25.0. The root orchestration facade and separate
    lightweight buildinfo runtime facade keep their existing responsibilities.
    Goldmark and golang.org/x/mod are new internal dependencies; prepare the module
    cache before offline validation or builds.

    Omitted validation selections preserve v0.1.0 defaults. Existing profiles and
    product-specific checks continue to work. Race testing requires the native
    toolchain's race prerequisites and reports an error when they are unavailable.
    Markdown and file-size checks are enabled by non-nil Go specifications or profile
    objects, including empty objects; omission or null disables them.

    ReleaseRequest gains fields, so callers using positional struct literals must
    convert them to keyed literals. Validation diagnostics now include structured
    detail and additional context. Go callers can inspect ValidationError with
    errors.As and underlying causes with errors.Is; CLI integrations should use
    exit classifications rather than complete diagnostic strings.

    Source publication still completes at confirmed publication of the intended
    annotated tag. Hosted Gitea delivery retains its separate status. ReleaseKit's
    deliverables remain the source tag and hosted note page.

    Upgrade guidance

    1. Update the module dependency:

      go get gitea.maximumdirect.net/eric/ReleaseKit@v0.2.0
      

      Consumers using a separately installed executable can update it with:

      go install gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit@v0.2.0
      
    2. Use v0.2.0 tooling before adding new profile fields. Select the shared checks
      appropriate to the product and remove the corresponding duplicate commands
      from additional checks. Retain assertions about product behavior. Package
      compilation belongs under validation; executable deliverables use build.

    3. For module-based CI, adopt the updated
      tag-delivery template
      and remove the independent RELEASEKIT_VERSION workflow pin. Ensure the
      application module declares ReleaseKit, align local tool bootstrap with that
      selection, and retain the product's Go image, delivery profile, and secret
      mapping. The
      Woodpecker guidance
      describes temporary module metadata, older-tag retries, self-bootstrap, and
      separately installed tools.

    COPYRIGHT |
    LICENSE |
    ATTRIBUTION

    Downloads