Kai Ole Hartwig
pinup · Dokumentation

Konfiguration

pinup liest Renovates Konfigurationssprache. Ein Repository mit renovate.json behält sie. Der Wechsel von Renovate ändert kein Byte in einem Repository.

  • Drei Schichten: die Konfiguration des Laufs, die Datei des Repositories, die Presets
  • Merge-Semantik: Renovates, gemessen dagegen
  • Schlüssel:pinup migrate stuft jeden ein

Drei Schichten

Die Konfiguration des Laufs

--config: eine Datei oder ein local>-Preset von der Plattform (local>gruppe/runner, local>gruppe/runner:release-fast). Das ist die Datei des Estates: Regeln, Custom Manager, Presets.

Die Datei des Repositories

PINUP_RUNNER_PROJECT nennt das Runner-Projekt, wenn --config eine Datei ist

Genau eine von .pinup.yaml, .pinup.yml, .pinup.json, .pinup.jsonc, renovate.json, renovate.json5, .renovaterc und .renovaterc.json. Zwei davon sind ein Fehler, keine stille Wahl: die unterlegene würde wochenlang bearbeitet, ohne zu wirken. Deshalb ist die Liste auch keine Rangfolge. Ihr extends darf die Datei des Laufs als local><runner-projekt> nennen; pinup beantwortet den Namen aus der Datei, mit der es gestartet wurde, ohne Fetch, und auch den alten Namen des Projekts, nachdem die Datei umgezogen ist. So wechselt ein Estate seinen Runner, ohne die Repositories anzufassen.

Presets

Renovates eingebaute Namen (config:recommended, :disableDependencyDashboard …) kommen aus pinups eigener Preset-Bibliothek, geschrieben aus beobachtetem Verhalten, nicht aus Renovates Quelltext. local>-Presets anderer Projekte werden von der Plattform geholt.

Merge-Semantik

Die Regeln sind Renovates, gemessen dagegen:

Jeder aufgelöste Wert behält seine ganze Herkunftskette. pinup print-config --config … --explain packageRules[25].automerge zeigt jede Quelle, die einen Pfad gesetzt hat, Gewinner zuletzt. Ein gehaltenes Update im Plan nennt die Regel genauso.

Die Schlüssel

pinup migrate --config … stuft jeden Schlüssel ein. Unterstützt heißt: der Schlüssel tut, was er in Renovate tut, gemessen. Teilweise nennt die Differenz. Nicht unterstützt heißt: nichts liest ihn, und der Lauf sagt es.

Unterstützt

$schema, addLabels, additionalBranchPrefix, allowedCommands, allowedVersions, automerge, branchPrefix, branchTopic, commitMessageAction, commitMessageExtra, commitMessageLowerCase, commitMessagePrefix, commitMessageSuffix, commitMessageTopic, customDatasources, customManagers, dependencyDashboard, dependencyDashboardApproval, dependencyDashboardTitle, description, enabled, enabledManagers, extends, extractVersion, fetchChangeLogs, groupName, groupSlug, ignoreDeps, ignorePaths, ignoreUnstable, internalChecksFilter, labels, lockFileMaintenance, matchCurrentValue, matchDatasources, matchDepNames, matchDepTypes, matchFileNames, matchManagers, matchPackageNames, matchUpdateTypes, minimumReleaseAge, minimumReleaseAgeBehaviour, osvVulnerabilityAlerts, packageRules, pinDigests, platformAutomerge, postUpgradeTasks, prBodyDefinitions, prBodyNotes, prConcurrentLimit, prHourlyLimit, rangeStrategy, registryUrls, schedule, semanticCommitScope, semanticCommitType, semanticCommits, separateMajorMinor, timezone, versioning, vulnerabilityAlerts – und pinups eigene analyze, matchEffective, trustEffective.

Teilweise

Nicht unterstützt

Ein Schlüssel, der hier nicht steht, wird nicht gelesen; migrate listet ihn als nicht unterstützt.

pinups eigene Schlüssel

SchlüsselWoBedeutung
analyzeRegelfragt einen Analyzer, was sich bei den Updates dieser Abhängigkeit wirklich geändert hat; standardmäßig aus, weil er beide Versionen holt
matchEffectiveRegelmatcht das Label des Analyzers: patch, minor, major, breaking-values; feuert nie, solange das Label unbekannt ist
trustEffectiveRegellässt einen Automerge stehen, den eine matchEffective-Regel eingeschaltet hat, obwohl das deklarierte Label strenger ist; ohne ihn gewinnt das strengere Label

Custom Manager

customManagers mit customType: regex arbeiten wie in Renovate: RE2-Ausdrücke mit benannten Gruppen (depName, currentValue, currentDigest, datasource, versioning, registryUrl, packageName, extractVersion), die *Template-Schlüssel mit einer Handlebars-Teilmenge ({{{x}}}, {{#if}}/{{else}}, {{#if (equals a "b")}}), matchStringsStrategyany und recursive. Eine eingefangene Gruppe schlägt ihr Template. # renovate: und # pinup: werden beide gelesen.

Umgebung

VariableBedeutung
PINUP_PLATFORMgitlab (Standard) oder github; ein GitHub-Token ohne GitLab-Instanz in der Umgebung heißt github
PINUP_GITLAB_URL / CI_SERVER_URLdie GitLab-Instanz
PINUP_GITLAB_TOKEN / GITLAB_TOKENPersonal Access Token (api, write_repository); CI_JOB_TOKEN, wenn keiner gesetzt ist (nur lesend)
PINUP_GITHUB_URL / GITHUB_SERVER_URLder GitHub-Host; github.com, wenn leer
PINUP_GITHUB_TOKEN / GITHUB_TOKENToken mit repo, oder fine-grained mit Contents, Pull Requests und Issues read/write
PINUP_REGISTRY_HOST / CI_REGISTRYdie Container-Registry des Estates; nur dort wird der Token gegen einen Pull-Token getauscht
GITHUB_COM_TOKENfür github-*-Lookups und Release-Notes, gebunden an api.github.com
PINUP_GIT_NAME, PINUP_GIT_EMAILwer committet
PINUP_SIGNING_FORMAT, PINUP_SIGNING_KEYopenpgp oder ssh und der Schlüssel; unsigniert nur mit dem ausdrücklichen Wort none
PINUP_CACHEder Lookup-Cache (bbolt)
PINUP_ALLOWED_COMMANDSJSON-Array verankerter Muster, denen ein postUpgradeTasks-Kommando entsprechen muss; Sache des Runners, nie eines Repositories
PINUP_PLUGIN_ENVVariablen, die ein Task neben PATH, LANG, TZ sehen darf
PINUP_TASK_NETRCeine .netrc, die in das eigene HOME jedes Tasks geschrieben wird; nie als Variable
PINUP_EXECUTION_TIMEOUTMinuten pro Task
PINUP_RUNNER_PROJECTdas Projekt, dessen Konfiguration die Repositories einbinden
PINUP_APK_VIEWSapk-Indexe, die nativ bedient werden, neben dem öffentlichen Wolfi-Repository

Konfiguration prüfen: pinup advise

pinup advise löst eine Konfiguration so auf, wie ein Lauf es tut, und sagt, was sich ändern sollte. Jeder Befund trägt seinen Pointer, die Schicht, die den Wert geschrieben hat – Datei, Preset oder Default –, und, wo die Datei den Wert selbst setzt, einen Fix.

 

pinup advise --config renovate.json --runner 'local>gruppe/pinup-runner'
pinup advise --config renovate.json --plan plan.json      # dazu, was die Läufe gefunden haben
pinup advise --config renovate.json --fix --out fixed.json
KategorieWas sie findet
compatSchlüssel, die pinup nicht liest; Regeln, die nie feuern; eine Regex mit Lookaround; ein Zeitplan, der nicht parst
hygieneein Wert, den ein Preset schon setzt; ein Preset, das zweimal eingebunden ist; eine Regel, die eine spätere komplett überdeckt
performanceein ignorePaths, das die geerbte Liste ersetzt statt ergänzt; ein Lock-Refresh ohne Zeitfenster
securityein Automerge, das Major-Updates einschließt; eine Registry über HTTP; Advisories abgeschaltet

Mit --plan kommen die Läufe dazu: Regeln, die keine Abhängigkeit erreicht hat, Manager ohne Funde, ein Repository, dessen Updates alle eine Einstellung hält.

--fix wendet die Fixes byte-genau auf JSON, JSONC und JSON5 an. Kommentare, Reihenfolge und Formatierung bleiben. Geschrieben wird erst nach einem Gate: die Datei wird vorher und nachher aufgelöst, und jede Zeile, die sich unterscheidet, muss unter einem Pointer liegen, den ein Fix angemeldet hat. Ein Fix ohne Anmeldung muss die Auflösung unverändert lassen. Ohne --out oder --write ist es ein Probelauf. --skip hält Checks zurück, die eine Entscheidung brauchen. Eine YAML-Datei wird berichtet, nicht umgeschrieben.

Alle Checks mit ID, Schwere und Fix stehen in docs/commands.md im Repository.

Weiter

Zurück zu pinup

Die Übersicht: Problem, Fit-Check, Quickstart, alle Kapitel.

pinup →
Zurück zu pinup

Manager, Datenquellen, Versionierungen

Welche Dateien gelesen werden, welche Registries gefragt werden, wie Versionen geordnet werden.

Lesen →
Manager, Datenquellen, Versionierungen