Kai Ole Hartwig
pinup · documentation

Managers, datasources, versionings

Three registries, addressed by the names a configuration uses. A manager reads a file and yields dependencies with byte ranges. A datasource answers a dependency's releases. A versioning orders them and rewrites the value.

  • enabledManagers is a closed list: a manager not listed there does not run
  • custom.regex must be named for the custom managers to run

Managers

NameReadsNotes
dockerfileDockerfile, Containerfile, *.DockerfileFROM, COPY --from, # syntax=; ARG-interpolated images; digest pins stay or arrive with pinDigests
gitlabci.gitlab-ci.ymlimage: and services: at any depth, as a string and as an object; include: component: pins (gitlab-tags on the component's project); $VAR tags are reported as unresolvable, not guessed
kustomizekustomization.yamlimages: with newTag/digest, remote resources and components with ?ref=, helmCharts:
npmpackage.json, lock filesdependencies of every kind, engines.node (node-version), packageManager, pnpm.overrides; workspaces read and refresh the root lock
composercomposer.json, composer.lockrequire, require-dev, config.platform.php, repositories of type composer in file order, then Packagist; the locked version is the starting point of an update
gomodgo.mod, go.sumthe go directive (golang-version), requires, // indirect on a security fix; go mod tidy next to every module with a go.sum
terraform*.tf, .terraform.lock.hclrequired_providers, registry modules; a provider bump moves version and hashes in the lock along
terraform-version.terraform-versiontfenv's file, the value as written
custom.regexwhatever managerFilePatterns namesee Configuration

Datasources

NameAsksNotes
dockerthe registry's /v2/ APItags, a tag's digest when pinning; bearer tokens per realm; the estate's own registry with the platform token, others anonymously
gitlab-tags, gitlab-releases, gitlab-packagesa GitLab instance's REST APIthe instance from the environment unless registryUrls names another; paginated
github-releases, github-tagsapi.github.comwith GITHUB_COM_TOKEN when set; otherwise the 60-per-hour limit
npmthe registry's package documentregistryUrls; deprecated as a string or a boolean
packagistthe Composer repository protocolPackagist and every registry that speaks it, GitLab's group registry with its provider format included; repositories in file order until one has the package
pypithe JSON APIunder the PEP 503 name; a release yanked in every file is deprecated
node-versionnodejs.org/dist/index.jsonread once per process
golang-versiongo.devthe Go toolchain
gothe module proxy, or the instance for modules therea go/vN tag in a subdirectory of a project is resolved over its tags
helma chart repository's index.yamlneeds registryUrls; the index is fetched once per repository
terraform-provider, terraform-modulethe registry protocol (discovery first)OpenTofu's or HashiCorp's registry; provider hashes for the lock
git-tags, git-refsgit ls-remoteany repository git reaches; git-refs for a branch pinned by commit
custom.*whatever customDatasources declaredefaultRegistryUrlTemplate, format, transformTemplates; apk indexes (custom.wolfi and those from PINUP_APK_VIEWS) are served natively from the APKINDEX

A datasource's failure is a warning in the plan against that dependency, never a failed run for the repository.

Versionings

NameOrdersNotes
semverstrict semvera leading v stays as written
semver-partialsemver with partial versions1 and 1.2 are ranges
semver-coercedanything that starts like a version
looseleading numeric componentsno notion of prerelease: 1.0.0-alpha is stable here, and Satisfies is equality
dockerimage tagsversion and compatibility segment (22-alpine3.21); a different suffix or component count is a different image, not an update
apkWolfi/Alpine package versions-rN revisions, epochs
composerComposer constraints^, ~, *, stability flags, dev- branches
npmnpm ranges^, ~, x, ||, hyphen ranges
nodeNode.jssemver, engines ranges as npm ranges
goGo modulesv prefix, pseudo-versions, +incompatible
go-mod-directivethe go directive1.27 admits 1.27.x
hashicorpTerraform constraints~>, >=, ,
regexregex:<pattern>named groups major, minor, patch, prerelease, compatibility
pep440Python versionsepoch, a/b/rc, .post, .dev, local; specifier sets

A datasource names its default versioning; a rule's versioning or an annotation's versioning= overrides it.

Next

Back to pinup

The overview: the problem, the fit check, the quickstart, every chapter.

pinup →
Back to pinup

The plan

The JSON every run writes before it writes anything else.

Read →
The plan