version_resolver

package
v0.6.65 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package version_resolver maps a runtime name and user-supplied version string to a Docker image reference.

Version inputs are intentionally loose — a major ("3"), a minor ("3.12"), or a full patch pin ("3.12.7") are all valid. Missing precision is filled in by querying endoflife.date, which picks the latest non-EOL release that matches the prefix.

Responses are cached per product for 24 hours. A failed refresh serves the previous data so a transient outage to endoflife.date does not block builds.

Runtimes with multi-stage Dockerfiles (nodejs, java) expose separate builder and runner images through Resolution. Single-stage runtimes return the same image for both.

Two inputs are always rejected: strings that do not parse as a version prefix (letters, extra dots, wildcards), and versions whose end-of-life date has already passed.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cycle

type Cycle struct {
	Cycle       string   `json:"cycle"`
	Latest      string   `json:"latest"`
	EOL         EOLDate  `json:"eol"`
	ReleaseDate string   `json:"releaseDate"`
	LTS         FlexBool `json:"lts"`
}

Cycle is a single release line as returned by endoflife.date.

type EOLClient

type EOLClient interface {
	Cycles(product string) ([]Cycle, error)
}

EOLClient fetches release cycle data for a given product. The product name matches endoflife.date's URL slug (e.g. "python", "nodejs").

func NewHTTPClient

func NewHTTPClient() EOLClient

NewHTTPClient returns an EOLClient backed by endoflife.date with a 24-hour cache.

type EOLDate

type EOLDate struct {
	// contains filtered or unexported fields
}

EOLDate is either "no end-of-life" (the zero value) or a calendar date. The endoflife.date API encodes this as either the boolean false or a "YYYY-MM-DD" string, so a custom unmarshaler is required.

func NewEOLDate

func NewEOLDate(date string) EOLDate

NewEOLDate constructs an EOLDate from a "YYYY-MM-DD" string. Pass "" to represent a release with no scheduled end-of-life.

func (EOLDate) Expired

func (e EOLDate) Expired() bool

Expired reports whether the end-of-life date has already passed.

func (EOLDate) String

func (e EOLDate) String() string

func (*EOLDate) UnmarshalJSON

func (e *EOLDate) UnmarshalJSON(b []byte) error

type FlexBool added in v0.6.57

type FlexBool struct {
	// contains filtered or unexported fields
}

FlexBool unmarshals a JSON value that is either a boolean or a date string (e.g. Node.js LTS end dates). Any truthy value is treated as true.

func NewFlexBool added in v0.6.57

func NewFlexBool(v bool) FlexBool

func (FlexBool) Bool added in v0.6.57

func (f FlexBool) Bool() bool

func (*FlexBool) UnmarshalJSON added in v0.6.57

func (f *FlexBool) UnmarshalJSON(b []byte) error

type Resolution

type Resolution struct {
	// BuilderImage is the primary FROM image (used for single-stage builds and
	// the first stage of multi-stage builds).
	BuilderImage string
	// RunnerImage is the lightweight runtime image used in the final stage of
	// multi-stage builds. It equals BuilderImage for single-stage runtimes.
	RunnerImage string
	// Version is the resolved version tag (e.g. "3.12", "21") without the
	// image name, useful when constructing secondary images inside a Dockerfile.
	Version string
	// Warning is non-empty when the resolved version is end-of-life.
	Warning string
}

Resolution holds the images produced for a single resolve call.

type Resolver

type Resolver struct {
	// contains filtered or unexported fields
}

Resolver resolves user-supplied runtime versions to concrete Docker image references using live release-cycle data from endoflife.date.

func New

func New(client EOLClient) *Resolver

New returns a Resolver backed by the given EOLClient.

func (*Resolver) Resolve

func (r *Resolver) Resolve(runtime, version string) (Resolution, error)

Resolve returns the Docker images for the given runtime and version string.

An empty version picks the latest stable release. A partial version (major or major.minor) is resolved to the most recent non-EOL cycle in that line. A full patch version is validated against the known cycle data and passed through, subject to the runtime's maximum tag granularity.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL