mirror of
https://github.com/armbian/build.git
synced 2026-09-08 23:59:54 +08:00
Adds a Renovate custom-regex manager that keeps the CLI tools pinned in the build scripts (shellcheck, shfmt, oras, bat) up to date — it opens a PR when a newer GitHub release is published. depName is read from the release URL the scripts already carry, so the sources need no extra markup; an explicit variable-name allow-list limits tracking to these tools. Config lives in renovate.json5 with the line contract documented in plain language. Scoped to custom.regex so GitHub Actions and Python stay with Dependabot.
102 lines
5.7 KiB
JSON
102 lines
5.7 KiB
JSON
{
|
||
$schema: "https://docs.renovatebot.com/renovate-schema.json",
|
||
extends: ["config:recommended"],
|
||
|
||
// Run ONLY our custom regex manager. We deliberately do NOT enable the
|
||
// github-actions / pip managers — those are owned by Dependabot
|
||
// (.github/dependabot.yml); no point duplicating it.
|
||
enabledManagers: ["custom.regex"],
|
||
|
||
dependencyDashboard: true,
|
||
labels: ["dependencies"],
|
||
timezone: "Europe/Zagreb",
|
||
schedule: ["* 1 * * 6"], // Saturday, 01:00–01:59 Zagreb time
|
||
|
||
customManagers: [
|
||
{
|
||
customType: "regex",
|
||
managerFilePatterns: ["/^lib/.*\\.sh$/"],
|
||
|
||
// ════════════════════════════════════════════════════════════════
|
||
// HOW TO MAKE A PINNED TOOL VERSION TRACKED BY RENOVATE
|
||
// (read THIS, not the regex — humans are bad at reading regexes)
|
||
// ════════════════════════════════════════════════════════════════
|
||
//
|
||
// Several build scripts pin a CLI tool to a version that is then
|
||
// downloaded from GitHub Releases. Renovate keeps that pin fresh
|
||
// by opening a PR when a newer release appears. For Renovate to
|
||
// see a line, the line must look EXACTLY like this (leading tabs
|
||
// / indentation are fine):
|
||
//
|
||
// SHELLCHECK_VERSION=${SHELLCHECK_VERSION:-0.11.0} # https://github.com/koalaman/shellcheck/releases
|
||
// └──────┬─────────┘ └────────┬─────────┘└──┬──┘ └──────────────────────┬────────────────────────┘
|
||
// NAME_VERSION ${ … :- VERSION } bare single "#" + https://github.com/OWNER/REPO/releases
|
||
// (allow-listed) default-value form brace
|
||
//
|
||
// From that line Renovate takes:
|
||
// • the version ("0.11.0") → currentValue
|
||
// • OWNER/REPO from the URL → depName
|
||
// datasource is forced to github-releases; a leading "v" on the
|
||
// upstream tag (v0.11.0) is stripped automatically.
|
||
//
|
||
// Note: depName comes from the github.com URL that the upstream
|
||
// scripts already write — so NO extra "# renovate:" annotation is
|
||
// added to those files. That keeps them byte-identical to upstream
|
||
// and conflict-free when iav-main is synced.
|
||
//
|
||
// ─── STRICT RULES ───────────────────────────────────────────────
|
||
// Break ANY of these and the line is SILENTLY dropped: Renovate
|
||
// just stops tracking it, the version quietly rots, and the only
|
||
// visible sign is that the tool disappears from the Dependency
|
||
// Dashboard issue. So:
|
||
//
|
||
// 1. NAME must be in the allow-list inside `matchStrings` below
|
||
// (currently SHELLFMT | SHELLCHECK | ORAS | BATCAT). A brand
|
||
// new tool is NOT tracked until you add its NAME there. This
|
||
// is intentional — it stops Renovate from grabbing pins that
|
||
// must stay fixed (e.g. a RUST_VERSION held back on purpose).
|
||
//
|
||
// 2. The version after ":-" must be BARE digits and dots — no
|
||
// quotes, no leading "v":
|
||
// OK ${ORAS_VERSION:-1.3.2}
|
||
// BAD ${ORAS_VERSION:-"1.3.2"} ← quotes kill the match
|
||
// BAD ${ORAS_VERSION:-v1.3.2} ← leading v kills it
|
||
//
|
||
// 3. Use the default-value form ${NAME:-VERSION} — with the
|
||
// "${", the ":-", and the closing "}". A plain NAME=1.3.2
|
||
// (no braces) is NOT matched.
|
||
//
|
||
// 4. The version and its github.com URL comment MUST be on the
|
||
// same physical line. No line-continuation "\", no wrapping.
|
||
//
|
||
// 5. Between the closing "}" and the comment there may only be
|
||
// spaces/tabs. Code BEFORE the assignment is fine (indent, an
|
||
// `if`, a leading `&&`), but nothing may come AFTER the "}"
|
||
// except the comment:
|
||
// OK [[ -n $x ]] && ORAS_VERSION=${ORAS_VERSION:-1.3.2} # https://github.com/oras-project/oras/releases
|
||
// BAD ORAS_VERSION=${ORAS_VERSION:-1.3.2} && do_thing # … ← trailing code kills the match
|
||
// Keep the "# https://…/releases" comment LAST on the line.
|
||
//
|
||
// 6. The comment must be a single "#" then the canonical URL
|
||
// https://github.com/OWNER/REPO/releases :
|
||
// OK # https://github.com/sharkdp/bat/releases
|
||
// BAD ## https://… ← double hash kills it
|
||
// BAD # http://github.com/… ← must be https
|
||
// BAD # see github.com/x/y ← must start https://github.com/ and end /releases
|
||
//
|
||
// 7. To track a NEW tool: (a) write its line in the shape above,
|
||
// and (b) add its NAME to the alternation in `matchStrings`.
|
||
// ════════════════════════════════════════════════════════════════
|
||
matchStrings: [
|
||
// separator is [[:blank:]] (space/tab only, NOT \s) so the version
|
||
// and its release-URL comment must sit on ONE physical line —
|
||
// \s would also cross newlines and could grab an unrelated URL.
|
||
"\\b(?:SHELLFMT|SHELLCHECK|ORAS|BATCAT)_VERSION=\\$\\{[A-Z_]+:-(?<currentValue>[0-9][0-9.]*)\\}[[:blank:]]*#[[:blank:]]*https://github\\.com/(?<depName>[^/]+/[^/\\s]+)/releases",
|
||
],
|
||
datasourceTemplate: "github-releases",
|
||
extractVersionTemplate: "^v?(?<version>.+)$",
|
||
versioningTemplate: "semver",
|
||
},
|
||
],
|
||
}
|