From c3365514735217b77ca9ca538a7e140a64459f0e Mon Sep 17 00:00:00 2001 From: apostasie Date: Mon, 6 Jul 2026 16:52:26 -0700 Subject: [PATCH 1/3] Limen 0.0.1 Signed-off-by: apostasie --- .allowed_signers | 1 + .editorconfig | 44 ++- .gitattributes | 10 + .github/actions/setup-aqua/action.yaml | 54 ++++ .github/workflows/CI.yml | 22 -- .github/workflows/ci.yaml | 82 ++++++ .github/workflows/update-aqua-checksum.yaml | 115 ++++++++ .gitignore | 25 ++ .limen/.shellcheckrc | 17 ++ .limen/.yamlfmt | 56 ++++ .limen/aqua-registry.yaml | 80 ++++++ .limen/just/build-go.just | 159 ++++++++++ .limen/just/build.just | 16 ++ .limen/just/do.just | 25 ++ .limen/just/fix-go.just | 28 ++ .limen/just/fix-homebrew.just | 65 +++++ .limen/just/fix-rust.just | 15 + .limen/just/fix.just | 43 +++ .limen/just/lint-go.just | 115 ++++++++ .limen/just/lint-homebrew.just | 137 +++++++++ .limen/just/lint-rust.just | 15 + .limen/just/lint.just | 213 ++++++++++++++ .limen/just/main.just | 65 +++++ .limen/just/release.just | 205 +++++++++++++ .limen/just/test-go.just | 105 +++++++ .limen/just/test.just | 17 ++ .limen/just/tools.just | 78 +++++ .limen/lychee.toml | 22 ++ Justfile | 6 + README.md | 7 +- aqua-checksums.json | 304 ++++++++++++++++++++ aqua-policy.yaml | 13 + aqua.yaml | 48 ++++ lib/lint.sh | 22 -- lib/log.sh | 83 ------ lib/utils.sh | 53 ---- logo.jpg | Bin 0 -> 247705 bytes mumbrew | 19 +- renovate.json5 | 32 +++ test.sh | 20 -- 40 files changed, 2222 insertions(+), 214 deletions(-) create mode 100644 .allowed_signers create mode 100644 .gitattributes create mode 100644 .github/actions/setup-aqua/action.yaml delete mode 100644 .github/workflows/CI.yml create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/update-aqua-checksum.yaml create mode 100644 .limen/.shellcheckrc create mode 100644 .limen/.yamlfmt create mode 100644 .limen/aqua-registry.yaml create mode 100644 .limen/just/build-go.just create mode 100644 .limen/just/build.just create mode 100644 .limen/just/do.just create mode 100644 .limen/just/fix-go.just create mode 100644 .limen/just/fix-homebrew.just create mode 100644 .limen/just/fix-rust.just create mode 100644 .limen/just/fix.just create mode 100644 .limen/just/lint-go.just create mode 100644 .limen/just/lint-homebrew.just create mode 100644 .limen/just/lint-rust.just create mode 100644 .limen/just/lint.just create mode 100644 .limen/just/main.just create mode 100644 .limen/just/release.just create mode 100644 .limen/just/test-go.just create mode 100644 .limen/just/test.just create mode 100644 .limen/just/tools.just create mode 100644 .limen/lychee.toml create mode 100644 Justfile create mode 100644 aqua-checksums.json create mode 100644 aqua-policy.yaml create mode 100644 aqua.yaml delete mode 100644 lib/lint.sh delete mode 100644 lib/log.sh delete mode 100644 lib/utils.sh create mode 100644 logo.jpg create mode 100644 renovate.json5 delete mode 100755 test.sh diff --git a/.allowed_signers b/.allowed_signers new file mode 100644 index 0000000..a87e50e --- /dev/null +++ b/.allowed_signers @@ -0,0 +1 @@ +spam_blackhole@farcloser.world namespaces="git" sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIACDOXbkl7DthgVLTVZr8TNQcyQUX00MAqB3mWHik/vhAAAABHNzaDo= apostasie@farcloser.world diff --git a/.editorconfig b/.editorconfig index a9bf84e..bd078af 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,8 @@ -# http://editorconfig.org +# DO NOT EDIT MANUALLY. +# This file is common to all projects and managed by limen. +# Global configuration changes proposals can be discussed on https://github.com/farcloser/limen + +# https://editorconfig.org root = true [*] @@ -9,9 +13,45 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.diff] +# --- whitespace-significant formats --- +[*.{diff,patch}] +trim_trailing_whitespace = false + +[*.md] trim_trailing_whitespace = false +# --- Go: tabs, rendered 4 wide (gofmt emits tabs; width is display-only) --- +[*.go] +indent_style = tab +indent_size = 4 + +# --- task runner / build --- +[{Justfile,justfile,.justfile}] +indent_size = 4 + +[*.just] +indent_size = 4 + [Makefile] indent_style = tab + +# --- data formats (YAML must be spaces, never tabs) --- +[*.{json,jsonc,yaml,yml,toml}] +indent_size = 2 + +# --- JavaScript / TypeScript (2-space matches Prettier/Biome defaults) --- +[*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}] +indent_size = 2 + +# --- CSS family --- +[*.{css,scss,sass,less,pcss}] +indent_size = 2 + +# --- HTML / templates --- +[*.{html,htm,vue,svelte,astro}] +indent_size = 2 + +# --- Rust: rustfmt is 4-space, 100-col --- +[*.rs] indent_size = 4 +max_line_length = 100 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fae95b7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +# Treat all files as binary, with no git magic updating line endings. +# This produces predictable results in different environments. +# +# Contributors on Windows will need to use a modern version of git +# and editors capable of LF line endings. +# +# See https://github.com/golangci/golangci-lint/issues/580 +# See https://github.com/golang/go/blob/master/.gitattributes + +* -text \ No newline at end of file diff --git a/.github/actions/setup-aqua/action.yaml b/.github/actions/setup-aqua/action.yaml new file mode 100644 index 0000000..d818972 --- /dev/null +++ b/.github/actions/setup-aqua/action.yaml @@ -0,0 +1,54 @@ +name: Setup aqua +description: > + Install aqua (pinned, checksum-verified), put its bin directory on PATH, and authorize the repository's committed policy. aqua itself is the one tool aqua cannot pin. Same pins as limen-install: the installer script is fetched at an exact tag and checksum-verified, and it installs an exact aqua version. +runs: + using: composite + steps: + - name: Install aqua (pinned, checksum-verified) + shell: bash + env: + # Bumped manually, as a pair: Renovate cannot recompute the sha256 + # that must change with the installer version. + AQUA_INSTALLER_VERSION: v4.0.2 + AQUA_INSTALLER_SHA256: 98b883756cdd0a6807a8c7623404bfc3bc169275ad9064dc23a6e24ad398f43d + # renovate: depName=aquaproj/aqua + AQUA_VERSION: v2.60.1 + run: | + # Pin the root explicitly: aqua's own Windows build defaults it to + # %LOCALAPPDATA% (adrg/xdg), while the shell installer and the + # hermetic Justfile PATH compute unix-style ~/.local/share — without + # this, the layers disagree on Windows and nothing resolves. Exported + # to GITHUB_ENV so the recipes' aqua agrees too. + AQUA_ROOT_DIR="${AQUA_ROOT_DIR:-$HOME/.local/share/aquaproj-aqua}" + # On windows the pin must be in NATIVE form: git-bash's $HOME is a + # POSIX-only path (/c/Users/...) that native binaries (aqua, + # aqua-proxy, just) misread as current-drive-relative — aqua would + # link tools under D:\c\... while bash's PATH looks in C:\Users\.... + # cygpath -m yields C:/Users/..., which every layer reads correctly + # (git-bash included). + if command -v cygpath >/dev/null 2>&1; then + AQUA_ROOT_DIR="$(cygpath -m "$AQUA_ROOT_DIR")" + fi + export AQUA_ROOT_DIR + echo "AQUA_ROOT_DIR=${AQUA_ROOT_DIR}" >>"$GITHUB_ENV" + tmp="$(mktemp -d)" + curl --proto '=https' --tlsv1.2 -fsSL -o "${tmp}/aqua-installer" \ + "https://raw.githubusercontent.com/aquaproj/aqua-installer/${AQUA_INSTALLER_VERSION}/aqua-installer" + # No single digest tool exists everywhere: linux and windows git-bash + # ship coreutils sha256sum, macOS ships perl shasum. (Nothing + # aqua-managed can help here — this checksum guards the aqua + # installer itself.) + if command -v sha256sum >/dev/null 2>&1; then + echo "${AQUA_INSTALLER_SHA256} ${tmp}/aqua-installer" | sha256sum -c - + else + echo "${AQUA_INSTALLER_SHA256} ${tmp}/aqua-installer" | shasum -a 256 -c - + fi + chmod +x "${tmp}/aqua-installer" + "${tmp}/aqua-installer" -v "${AQUA_VERSION}" + rm -rf "${tmp}" + echo "${AQUA_ROOT_DIR}/bin" >>"$GITHUB_PATH" + - name: Authorize the committed aqua policy + # Before aqua will read the repo's local registry, the committed policy + # must be allowed — every caller needs this, whatever it runs next. + shell: bash + run: aqua policy allow aqua-policy.yaml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml deleted file mode 100644 index a5243f6..0000000 --- a/.github/workflows/CI.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: CI - -on: [push, pull_request] - -jobs: - test: - # https://github.com/actions/runner-images - strategy: - matrix: - os: [macos-13, macos-14, macos-15] - runs-on: ${{ matrix.os }} - - steps: - - name: Checks-out repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - submodules: true - - - name: test - run: | - brew install shellcheck - ./test.sh diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..4dad5f2 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,82 @@ +# DO NOT EDIT MANUALLY. +# This workflow is generic — no project-specific content — and is destined to +# become part of the canonical baseline limen distributes. +# +# Design: minimal GitHub glue around the same tooling every developer runs +# locally. The only marketplace action is GitHub's own checkout, pinned by +# commit SHA (a tag can be moved to malicious code; a SHA cannot). Everything +# else is pinned, checksum-verified shell: aqua installs the repo's tools at +# the versions aqua.yaml pins, and `just` runs the exact recipes a laptop +# runs — CI green means the same thing as local green, by construction. +# Deliberately absent: runner egress filtering — the available options are +# third-party actions, which this workflow avoids on principle. +name: ci + +on: + push: + branches: [main] + pull_request: + +# No default token permissions: each job states what it needs. This workflow +# only ever reads the repository — it cannot write code, releases, or +# packages even if a step is compromised. +permissions: {} + +# A superseded run (new push to the same branch/PR) is cancelled, not raced. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +# Every run step is bash on every runner: without this, windows defaults to +# PowerShell, which never sees the git-bash environment setup-aqua prepares +# (the whole matrix is designed to run the recipes under git-bash). Explicit +# bash also means `-eo pipefail` everywhere, which the implicit linux/macos +# default lacks. +defaults: + run: + shell: bash + +jobs: + verify: + strategy: + fail-fast: false + matrix: + # Pinned images, not -latest: a runner bump is a reviewed change. + # macOS is not redundant: its /bin/bash is 3.2, the portability floor + # the shared recipes target. arm64 (ubuntu-24.04-arm) and windows + # cover the rest of the supported release matrix — windows runs the + # recipes under git-bash. + # These entries are also the default required-status-check contexts of + # the canonical limen:main ruleset (defaultRequiredChecks in + # internal/github/audit.go) — change the two together, in one release. + os: [ubuntu-24.04, ubuntu-24.04-arm, macos-15, windows-2025] + runs-on: ${{ matrix.os }} + # Generous for the windows leg: those runners are markedly slower, and the + # per-GOOS lint recipes now run three legs each. + timeout-minutes: 45 + permissions: + contents: read + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + # The token is not left behind in .git/config: nothing in this + # workflow talks to GitHub after checkout. + persist-credentials: false + # Full history and refs: `just lint commits` validates the commit + # range against the PR's base branch, which a shallow clone lacks. + fetch-depth: 0 + + - name: Install aqua (pinned, checksum-verified) + uses: ./.github/actions/setup-aqua + + - name: Install pinned tools + # Link-only: the shims download each tool lazily on first use (and it + # is verified against the committed aqua-checksums.json then), so a + # job only ever pays for the tools its recipes actually run. + run: aqua install --only-link + + - name: Lint + run: just lint + + - name: Test + run: just test diff --git a/.github/workflows/update-aqua-checksum.yaml b/.github/workflows/update-aqua-checksum.yaml new file mode 100644 index 0000000..7ff859e --- /dev/null +++ b/.github/workflows/update-aqua-checksum.yaml @@ -0,0 +1,115 @@ +# DO NOT EDIT MANUALLY. +# This workflow is generic — no project-specific content — and is destined to +# become part of the canonical baseline limen distributes. +# +# The other half of Renovate: the bot bumps versions in aqua.yaml but cannot +# do the repo-specific follow-up, so without this workflow every version-bump +# PR would merge half-applied. Two follow-ups, on pushes to Renovate's +# branches, one fix-up commit: +# 1. Regenerate aqua-checksums.json with real aqua — a bumped pin with a +# stale checksum breaks every install. +# 2. Converge the limen baseline: when the branch bumps the farcloser/limen +# pin, the repo's canonical files must move with it — a repo is coherent +# only when the limen that wrote its files is the limen it pins (an old +# baseline checked by the new limen is red, and vice versa). The +# branch's own pinned limen runs `fix`; on branches bumping anything +# else it is a no-op. +# +# This is a WRITE workflow — the hardening is deliberate: +# - `push:` on the branch prefix, never pull_request_target: it runs in the +# repo's own context, on branches only writers (the Renovate app) can +# create. +# - The checkout keeps no credential, and the update steps run with no +# secrets in their environment. Neither goes through `just` — the one +# sanctioned deviation: a write-capable workflow does not execute recipe +# code the branch controls. `aqua update-checksum` only downloads and +# hashes declared artifacts; the converge step executes exactly one +# binary, the checksum-pinned limen release the branch declares. +# - The push step runs only git, with the token scoped to that single step. +# - The branch name reaches the shell via env, never template interpolation +# (script-injection hygiene). +# - No loop: a push made with the default GITHUB_TOKEN triggers no further +# workflows — and the no-change early exit terminates recursion +# regardless. +# +# Known trade of the default token: GitHub suppresses workflow runs for +# commits it pushes, so the PR's CI does not re-run on the checksum commit. +# To get CI on the final state of Renovate PRs, add a fine-grained PAT (or +# GitHub App token) with contents:write as the UPDATE_AQUA_CHECKSUM_TOKEN +# secret — the workflow prefers it automatically. +name: update-aqua-checksum + +on: + push: + branches: ["renovate/**"] + +permissions: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +# Every run step is bash, explicitly: runner-OS shell defaults are a trap +# (windows defaults to PowerShell), and explicit bash adds `-eo pipefail`. +# Uniform across all canonical workflows so adding a runner never changes +# what the steps mean. +defaults: + run: + shell: bash + +jobs: + update: + runs-on: ubuntu-24.04 + timeout-minutes: 15 + permissions: + contents: write + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + + - name: Install aqua (pinned, checksum-verified) + uses: ./.github/actions/setup-aqua + + - name: Regenerate aqua-checksums.json + # No tool install: update-checksum only reads the manifest and hashes + # upstream artifacts — the smallest possible surface for a write job. + # Runs first: it is what makes the branch's limen pin installable for + # the converge step below. + run: aqua update-checksum --prune + + - name: Converge the limen baseline + # `aqua exec` resolves the branch's own farcloser/limen pin (checksums + # fresh from the step above), downloads it verified, and `limen fix` + # rewrites whatever the new baseline moved. A released limen leaves + # its own pin alone (it already matches), so this cannot ping-pong. + # Skipped in the limen repository itself: there the working tree IS + # the next baseline (the recipes run it via LIMEN_BIN), and a released + # limen "converging" it would revert in-flight baseline work. + if: github.repository != 'farcloser/limen' + run: aqua exec -- limen fix . + + - name: Push the update, if any + env: + BRANCH: ${{ github.ref_name }} + TOKEN: ${{ secrets.UPDATE_AQUA_CHECKSUM_TOKEN || github.token }} + run: | + [ -z "$(git status --porcelain)" ] && { echo "checksums and baseline already in sync"; exit 0; } + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + # `--all` is deliberate, not sloppiness. The tree is fully accounted + # for: a fresh checkout, aqua rooted outside the workspace, and + # exactly two writers between checkout and here — update-checksum + # and the pinned limen's fix. Whatever is dirty IS the payload. An + # enumerated path list would be wrong: the converge step's job is to + # commit whatever the NEW limen's baseline says, and a list baked + # into the older running workflow cannot know that surface (the + # updated workflow arrives in the very commit being built). Nor + # would a list add safety — the only writer that could plant a file + # is limen fix itself, and .limen/.github would be on any list. + git add --all + # Signed-off-by: `just do lint commits` enforces DCO on the PR range, + # bot commits included. + git commit -m "chore: update aqua checksums and converge the limen baseline" \ + -m "Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>" + git push "https://x-access-token:${TOKEN}@github.com/${GITHUB_REPOSITORY}.git" "HEAD:${BRANCH}" diff --git a/.gitignore b/.gitignore index 1848a53..4d505b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,28 @@ .DS_Store .idea _* + +# --- added by limen fix: baseline patterns --- +Thumbs.db +Desktop.ini +.vscode/ +*.swp +*~ +*.local +_scratch/ +WIP_* +/build +/target/ +**/*.rs.bk +*.pdb +node_modules/ +.svelte-kit/ +.vite/ +vite.config.*.timestamp-* +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# --- added by limen fix: baseline patterns --- +/tmp diff --git a/.limen/.shellcheckrc b/.limen/.shellcheckrc new file mode 100644 index 0000000..4bc2aa1 --- /dev/null +++ b/.limen/.shellcheckrc @@ -0,0 +1,17 @@ +# DO NOT EDIT MANUALLY. +# This file is common to all projects and managed by limen. +# If you need local overrides for this project, you can use inline `# shellcheck disable=SCXXXX`. +# Global configuration changes proposals can be discussed on https://github.com/farcloser/limen + +# .shellcheckrc — https://www.shellcheck.net/wiki/ + +# Follow `source`/`.`-ed files so shellcheck checks across includes. +# 'true' lets it follow even non-constant source paths (best for repos with libs). +external-sources=true + +# Opt INTO the optional checks shellcheck ships but doesn't run by default. +enable=quote-safe-variables # flags unquoted vars that should be quoted +# enable=require-variable-braces # enforce ${var} consistently (stylistic — deliberately off) +enable=check-unassigned-uppercase +enable=deprecate-which # `which` → `command -v` +enable=avoid-nullary-conditions diff --git a/.limen/.yamlfmt b/.limen/.yamlfmt new file mode 100644 index 0000000..8269a9c --- /dev/null +++ b/.limen/.yamlfmt @@ -0,0 +1,56 @@ +# DO NOT EDIT MANUALLY. +# This file is common to all projects and managed by limen. +# Global configuration changes proposals can be discussed on https://github.com/farcloser/limen + +# .yamlfmt — https://github.com/google/yamlfmt +# Formatter: the 'basic' formatter is the only one; these are its options. +formatter: + type: basic + + # LF everywhere, explicitly: yamlfmt's default flips to CRLF on Windows, + # which would flag every (correctly LF) file. Same doctrine as the pinned + # .editorconfig and .gitattributes: line endings never vary by platform. + line_ending: lf + + # --- indentation --- + indent: 2 # match your .editorconfig (2-space YAML) + include_document_start: false # don't force a leading `---` on every file + + # --- the defaults worth overriding --- + retain_line_breaks_single: true # collapse runs of blank lines to ONE, but keep + # intentional single blank lines (readability). + # Prefer this over retain_line_breaks, which keeps + # *all* blank lines and barely normalizes anything. + + scan_folded_as_literal: false # leave folded (>) scalars folded; don't rewrite to literal (|) + + # --- correctness / safety --- + disallow_anchors: false # set true ONLY if you want to forbid &anchors/*aliases + max_line_length: 0 # 0 = no wrapping. Leave OFF — yamlfmt's wrapping is + # crude and mangles long values; let humans wrap. + + # --- quoting / strings: leave alone --- + # yamlfmt is deliberately light on string normalization. Don't fight it; it won't + # aggressively re-quote, which is the safe default for mixed YAML (k8s, CI, etc.) + +# --- which files to format --- +# Every pattern below is doublestar syntax (`**/`, `{yaml,yml}` braces), which +# yamlfmt does NOT use unless told to: without this switch it hands patterns to +# the filesystem, where POSIX shrugs (ENOENT, silently no-op) but Windows +# hard-fails (`CreateFile .git/**: ... syntax is incorrect`). +doublestar: true + +include: + - "**/*.{yaml,yml}" + +gitignore_excludes: true + +exclude: + - ".git/**" + - "**/vendor/**" + - "**/testdata/**" # don't reformat fixtures — tests may assert exact bytes + - "**/*.gen.{yaml,yml}" # leave generated YAML alone + +# Stop at a file that fails to parse — malformed YAML must fail hard, in CI +# and everywhere else. +continue_on_error: false diff --git a/.limen/aqua-registry.yaml b/.limen/aqua-registry.yaml new file mode 100644 index 0000000..309fda0 --- /dev/null +++ b/.limen/aqua-registry.yaml @@ -0,0 +1,80 @@ +# DO NOT EDIT MANUALLY. +# This file is common to all projects and managed by limen. +# Most tools can be installed directly from aqua registry without local overrides. +# Addition of non-standard tools can be discussed on https://github.com/farcloser/limen + +packages: + # The /v2 module-path suffix is mandatory (Go semantic import versioning): + # `go install github.com/google/go-licenses@v2.x` is rejected by the + # toolchain. Go strips the /v2 when naming the binary; files spells it out. + - type: go_install + path: github.com/google/go-licenses/v2 + description: Report on the licenses of a Go project's dependencies + version_source: github_tag + files: + - name: go-licenses + - type: go_install + path: github.com/vbatts/git-validation + description: Validate git commit rules (DCO sign-off, subject length, …) + version_source: github_tag + # Graphviz `dot` as a single static Go binary: the real graphviz C code + # compiled to WASM, executed via wazero — no C toolchain, no shared + # libraries, which is why this can live in aqua while system graphviz + # cannot. Renders the PNGs of `just do test go profile`. The cmd/dot module is + # nested and untagged upstream, hence the explicit repo and the + # pseudo-version pin in aqua.yaml. + - type: go_install + name: github.com/goccy/go-graphviz/cmd/dot + path: github.com/goccy/go-graphviz/cmd/dot + repo_owner: goccy + repo_name: go-graphviz + description: Graphviz dot CLI, pure-Go build (WASM via wazero) + version_source: github_tag + # The Go team distributes govulncheck via `go install` only, by policy. The + # repo is not inferable from the golang.org import path, hence the explicit + # owner/name (same as the standard registry does for gopls). + - type: go_install + name: golang.org/x/vuln/cmd/govulncheck + path: golang.org/x/vuln/cmd/govulncheck + repo_owner: golang + repo_name: vuln + description: Scan dependencies against the Go vulnerability database + version_source: github_tag + # Same golang.org path situation as govulncheck: explicit name and repo. + - type: go_install + name: golang.org/x/tools/cmd/deadcode + path: golang.org/x/tools/cmd/deadcode + repo_owner: golang + repo_name: tools + description: Whole-program detection of unreachable functions + version_source: github_tag + # hadolint as pure Go, from the farcloser stable. The binary is the nested + # cmd/godolint package of the root module — explicit name and repo, same + # shape as go-graphviz's cmd/dot above (tags live at the repo root). + - type: go_install + name: github.com/farcloser/godolint/cmd/godolint + path: github.com/farcloser/godolint/cmd/godolint + repo_owner: farcloser + repo_name: godolint + description: Lint Dockerfiles (a pure-Go port of hadolint) + version_source: github_tag + # limen itself: every repo pins the version that enforces it, so the binary + # and the canonical files it embeds travel together (no version skew between + # the checker and the checked). Graduates to the standard registry once + # farcloser/limen is registered there. + - type: github_release + repo_owner: farcloser + repo_name: limen + description: Verify a repository against Farcloser engineering rules + asset: limen_{{trimV .Version}}_{{.OS}}_{{.Arch}}.tar.gz + format: tar.gz + files: + - name: limen + checksum: + type: github_release + asset: checksums.txt + algorithm: sha256 + supported_envs: + - darwin + - linux + - windows diff --git a/.limen/just/build-go.just b/.limen/just/build-go.just new file mode 100644 index 0000000..d40b303 --- /dev/null +++ b/.limen/just/build-go.just @@ -0,0 +1,159 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +# Ported from the historical Make build system, corrected along the way: +# - a "binary" is a DIRECTORY under cmd/ that contains Go sources — a stray +# file or docs directory no longer becomes a phantom target; +# - version stamping is reproducible: main.version carries `git describe`, +# and commit/date come from Go's own VCS embedding (`go version -m`) at +# their COMMIT values — never wall-clock build time, which made the same +# commit produce different binaries; +# - build tags are scoped to these commands, never exported globally where +# they would leak into tests and linters; +# - static states its preconditions (Linux, CGO) and fails fast instead of +# dying with a cryptic linker error; +# - a race build exists. +# Binaries land in build/ (covered by the canonical .gitignore). Projects +# declare `var version = "dev"` in each main package for the stamp to land. +# Extra flags: export BUILD_GO_FLAGS from the root Justfile, the home of all +# project customization (the variable name mirrors the task path), or set it +# on the invocation for a one-off. + +# netgo/osusergo force the pure-Go resolver and user lookups. No-ops when +# CGO_ENABLED=0 (pure Go already); with CGO they keep DNS and user handling +# out of libc, which is exactly what makes `static` viable on glibc. +go_tags := 'netgo,osusergo' + +# CGO is opt-in per invocation (`CGO_ENABLED=1 just do build go`). Defaulted to 0 +# explicitly for every recipe rather than left unset: go's own default is CGO +# on for native builds when a C toolchain exists, and unset must mean pure Go +# here. +export CGO_ENABLED := env('CGO_ENABLED', '0') + +# --- C toolchain hardening — only effective when CGO_ENABLED=1 -------------- +# The canonical hardening set (see the Red Hat compiler-flags guidance), +# platform-gated: stack-clash protection and the -z linker set are Linux-only +# (ld64 on macOS supports neither). +c_warnings := '-Wall -Werror=format-security' +c_security := '-fstack-protector-strong -fPIE -D_FORTIFY_SOURCE=2' + (if os() == 'linux' { ' -fstack-clash-protection' } else { '' }) +cgo_cflags_release := c_warnings + ' -O2 ' + c_security + ' -pipe' + +# Debug: -O0 with real debug info. FORTIFY_SOURCE is deliberately absent — it +# requires -O1 or higher and would only produce warnings at -O0. +cgo_cflags_debug := c_warnings + ' -O0 -g -grecord-gcc-switches -pipe' + +# libstdc++ assertions are a C++-only concern: valid in CXXFLAGS, not CFLAGS. +cgo_cxxflags_debug := cgo_cflags_debug + ' -D_GLIBCXX_ASSERTIONS' +cgo_ldflags := if os() == 'linux' { '-Wl,-z,defs -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack' } else { '' } + +default: release + +# Release: reproducible (trimpath, commit-time VCS stamp), stripped, PIE. +# Twin of the builds section in .goreleaser.yaml (the release builder, where +# a project ships one) — a flag change here must land there too. See the +# comment there for the differences that are intended. +release: (_banner "build go" "release") + #!/usr/bin/env bash + set -euo pipefail + version=$(git describe --tags --always --dirty 2>/dev/null || echo dev) + ldflags="-s -w -X main.version=${version}" + if [ "${CGO_ENABLED:-0}" = "1" ]; then + export CGO_CFLAGS='{{ cgo_cflags_release }}' + export CGO_CXXFLAGS='{{ cgo_cflags_release }}' + export CGO_LDFLAGS='{{ cgo_ldflags }}' + ldflags="-linkmode=external -extldflags=-pie ${ldflags}" + fi + extra=() + [ -z "${BUILD_GO_FLAGS:-}" ] || read -ra extra <<<"${BUILD_GO_FLAGS}" + mkdir -p build + for dir in cmd/*/; do + name=$(basename "${dir}") + ls "${dir}"*.go >/dev/null 2>&1 || continue + echo "→ build/${name}" + go build -trimpath -buildmode=pie -tags='{{ go_tags }}' \ + -ldflags "${ldflags}" ${extra[@]+"${extra[@]}"} -o "build/${name}" "./${dir%/}" + done + +# Debug: optimizations and inlining off, symbols kept, real paths kept — no +# trimpath, deliberately: debuggers want actual file locations. -debug suffix. +debug: (_banner "build go" "debug") + #!/usr/bin/env bash + set -euo pipefail + version=$(git describe --tags --always --dirty 2>/dev/null || echo dev) + ldflags="-X main.version=${version}" + if [ "${CGO_ENABLED:-0}" = "1" ]; then + export CGO_CFLAGS='{{ cgo_cflags_debug }}' + export CGO_CXXFLAGS='{{ cgo_cxxflags_debug }}' + export CGO_LDFLAGS='{{ cgo_ldflags }}' + ldflags="-linkmode=external -extldflags=-pie ${ldflags}" + fi + extra=() + [ -z "${BUILD_GO_FLAGS:-}" ] || read -ra extra <<<"${BUILD_GO_FLAGS}" + mkdir -p build + for dir in cmd/*/; do + name=$(basename "${dir}") + ls "${dir}"*.go >/dev/null 2>&1 || continue + echo "→ build/${name}-debug" + go build -buildmode=pie -gcflags='all=-N -l' -tags='{{ go_tags }}' \ + -ldflags "${ldflags}" ${extra[@]+"${extra[@]}"} -o "build/${name}-debug" "./${dir%/}" + done + +# Race: a diagnostic build with the race detector, which requires cgo (forced +# here) and, matching the test module, an external linkmode. Unstripped, real +# paths. -race suffix. +race: (_banner "build go" "race") + #!/usr/bin/env bash + set -euo pipefail + export CGO_ENABLED=1 + version=$(git describe --tags --always --dirty 2>/dev/null || echo dev) + extra=() + [ -z "${BUILD_GO_FLAGS:-}" ] || read -ra extra <<<"${BUILD_GO_FLAGS}" + mkdir -p build + for dir in cmd/*/; do + name=$(basename "${dir}") + ls "${dir}"*.go >/dev/null 2>&1 || continue + echo "→ build/${name}-race" + go build -race -tags='{{ go_tags }}' \ + -ldflags "-linkmode=external -X main.version=${version}" \ + ${extra[@]+"${extra[@]}"} -o "build/${name}-race" "./${dir%/}" + done + +# Static: fully static external link. Preconditions enforced, not commented: +# Linux only (macOS has no static libc), and CGO_ENABLED=1 (with CGO off, +# every build is already static — use `release`). No PIE: classic static and +# PIE conflict. -static suffix. +static: (_banner "build go" "static") + #!/usr/bin/env bash + set -euo pipefail + if [ "$(uname -s)" != "Linux" ]; then + echo "static builds require Linux: macOS has no static libc to link against." >&2 + exit 1 + fi + if [ "${CGO_ENABLED:-0}" != "1" ]; then + echo "static needs CGO_ENABLED=1 — a pure-Go build is already static (use \`just do build go\`)." >&2 + exit 1 + fi + version=$(git describe --tags --always --dirty 2>/dev/null || echo dev) + export CGO_CFLAGS='{{ cgo_cflags_release }}' + export CGO_CXXFLAGS='{{ cgo_cflags_release }}' + export CGO_LDFLAGS='{{ cgo_ldflags }}' + extra=() + [ -z "${BUILD_GO_FLAGS:-}" ] || read -ra extra <<<"${BUILD_GO_FLAGS}" + mkdir -p build + for dir in cmd/*/; do + name=$(basename "${dir}") + ls "${dir}"*.go >/dev/null 2>&1 || continue + echo "→ build/${name}-static" + go build -trimpath -tags='{{ go_tags }}' \ + -ldflags "-linkmode=external -extldflags=-static -s -w -X main.version=${version}" \ + ${extra[@]+"${extra[@]}"} -o "build/${name}-static" "./${dir%/}" + done diff --git a/.limen/just/build.just b/.limen/just/build.just new file mode 100644 index 0000000..9582374 --- /dev/null +++ b/.limen/just/build.just @@ -0,0 +1,16 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Go builds live in their own submodule: `just do build go` makes the release +# binaries, `just do build go ` (debug, race, static) makes a variant. +mod go 'build-go.just' + +# A submodule's recipe IS addressable as a dependency (go::default); only a +# bare module path (go) is not. +default: go::default diff --git a/.limen/just/do.just b/.limen/just/do.just new file mode 100644 index 0000000..34a69d2 --- /dev/null +++ b/.limen/just/do.just @@ -0,0 +1,25 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# The `do` namespace holds every shared task, so the top level stays free for +# a project's own recipes (a project may define its own `just lint`; the +# shared one is `just do lint`). + +# Show the shared tasks. +default: + @just --list do + +mod build 'build.just' +mod tools 'tools.just' +mod lint 'lint.just' +mod test 'test.just' +mod fix 'fix.just' + +# Flat (imported, not a module) so it takes arguments: `just do release v1.2.3`. +import 'release.just' diff --git a/.limen/just/fix-go.just b/.limen/just/fix-go.just new file mode 100644 index 0000000..5b8a1be --- /dev/null +++ b/.limen/just/fix-go.just @@ -0,0 +1,28 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +default: code mod + +# golangci-lint auto-fixes, once per supported platform (see _per-goos in +# _lib.just: platform-specific files are only analyzed for the GOOS that +# builds them). The formatter is build-graph-independent and runs once — last, +# so the fixes' edits end up formatted. +code: (_banner "fix go" "go") (_per-goos "golangci-lint run --fix") + golangci-lint fmt + +# Tidy go.mod/go.sum. +mod: (_banner "fix go" "mod") + go mod tidy + +# Update every dependency to its latest version, then tidy. +up: (_banner "fix go" "up") && mod + go get -u ./... diff --git a/.limen/just/fix-homebrew.just b/.limen/just/fix-homebrew.just new file mode 100644 index 0000000..ebe9c0b --- /dev/null +++ b/.limen/just/fix-homebrew.just @@ -0,0 +1,65 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +# The mutating counterpart of `just do lint homebrew` — brew's vendored +# RuboCop with --fix. Same machine-layer exception as the lint module: +# BREW_BIN is captured from the ambient PATH at just startup, never from the +# hermetic PATH (the reasoning lives in lint-homebrew.just and main.just). + +default: style + +# Repair what `just do lint homebrew style` reports; passes vacuously when the +# repository carries no formulas or casks. +style: (_banner "fix homebrew" "style") + #!/usr/bin/env bash + set -euo pipefail + {{ _skip_unless_macos }} + # --cached --others --exclude-standard: tracked *and* new untracked files, + # still honoring .gitignore (same as `fix just`). Modern tap layout ONLY — + # Formula/ and Casks/; the legacy locations are deliberately unsupported + # (see lint-homebrew.just). Discovery runs before the brew lookup so a + # repo without formulas passes vacuously even brew-less. + files=() + while IFS= read -r -d '' f; do + files+=("$f") + done < <(git ls-files -z --cached --others --exclude-standard \ + 'Formula/*.rb' 'Formula/**/*.rb' 'Casks/*.rb' 'Casks/**/*.rb') + if [ "${#files[@]}" -eq 0 ]; then + echo "no formulas or casks (Formula/, Casks/) — nothing to fix." + exit 0 + fi + {{ _require_brew }} + # shellcheck disable=SC2154 # BREW_BIN is exported by the canonical Justfile (main.just). + "$BREW_BIN" style --fix "${files[@]}" + +# Homebrew exists on macOS only: everywhere else this recipe degrades to a +# LOUD no-op — the twin of the variable in lint-homebrew.just; a change here +# must land there too. +[private] +_skip_unless_macos := ''' + if [ "$(uname -s)" != 'Darwin' ]; then + echo "homebrew is macOS-only — nothing to do on this platform (skipped, not failed)." + exit 0 + fi +''' + +# BREW_BIN comes from main.just (ambient-PATH capture) — the twin of the +# variable in lint-homebrew.just; a change here must land there too. +[private] +_require_brew := ''' + if [ -z "${BREW_BIN:-}" ]; then + echo "brew was not found on your PATH when just started." >&2 + echo "brew is a machine-layer tool — install it outside the repo (or export" >&2 + echo "BREW_BIN=/path/to/brew), then re-run." >&2 + exit 1 + fi +''' diff --git a/.limen/just/fix-rust.just b/.limen/just/fix-rust.just new file mode 100644 index 0000000..9182c1e --- /dev/null +++ b/.limen/just/fix-rust.just @@ -0,0 +1,15 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +rust: (_banner "fix" "rust") + cargo clippy --fix --all-targets --all-features --allow-dirty --allow-staged + cargo fmt --all diff --git a/.limen/just/fix.just b/.limen/just/fix.just new file mode 100644 index 0000000..77aad69 --- /dev/null +++ b/.limen/just/fix.just @@ -0,0 +1,43 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +default: limen just yaml + +# limen itself: repair what `just do lint limen` reports — rewrite drifted +# canonical files, create missing mandatory ones, restore aqua pins and +# regenerate aqua-checksums.json (network, when pins changed). Same LIMEN_BIN +# override as the lint recipe (see lint.just). +limen: (_banner "fix" "limen") + ${LIMEN_BIN:-limen} fix . + +# Repair what `just do lint github` reports — plans first, applies on consent +# (pass -yes for unattended use, -org for the organization). Never in +# the default set, same reasoning as the lint twin. +github *args: (_banner "fix" "github") + ${LIMEN_BIN:-limen} github fix {{ args }} + +just: (_banner "fix" "just") + #!/usr/bin/env bash + set -euo pipefail + # --cached --others --exclude-standard: tracked *and* new untracked files, + # still honoring .gitignore — so a not-yet-staged file is formatted too. + git ls-files -z --cached --others --exclude-standard 'justfile' 'Justfile' '*.just' '**/justfile' \ + | xargs -0 -I{} just --fmt --justfile {} + +yaml: (_banner "fix" "yaml") + yamlfmt -conf .limen/.yamlfmt + +# Go fixers live in their own submodule: `just do fix go` runs them all, +# `just do fix go ` (e.g. `just do fix go mod`) runs one. +mod go 'fix-go.just' +mod rust 'fix-rust.just' +mod homebrew 'fix-homebrew.just' diff --git a/.limen/just/lint-go.just b/.limen/just/lint-go.just new file mode 100644 index 0000000..2dea28f --- /dev/null +++ b/.limen/just/lint-go.just @@ -0,0 +1,115 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +default: code mod vuln licenses + +# golangci-lint, once per supported platform (see _per-goos in _lib.just: +# platform-specific files are only analyzed for the GOOS that builds them). +# The formatter is build-graph-independent and runs once. The last step bans +# blanket revive suppressions: nolintlint polices golangci directives, and +# revive findings proved environment-nondeterministic across the per-GOOS +# legs — the suppression itself then flakes as "unused". revive's own +# selective directives are invisible to nolintlint, hence stable. +code: (_banner "lint go" "go") (_per-goos "golangci-lint run") + golangci-lint fmt --diff + @if git grep -nE 'nolint:[a-z, ]*revive' -- '*.go'; then echo 'blanket revive suppression is banned — use //revive:disable-next-line: (or a disable/enable block) instead' >&2; exit 1; fi + +# go.mod/go.sum tidiness — fails printing the diff; `just do fix go mod` repairs. +mod: (_banner "lint go" "mod") + go mod tidy -diff + +# Known-vulnerability scan against the Go vulnerability database (network: +# govulncheck fetches vuln.go.dev), once per supported platform (see _per-goos +# in _lib.just: call paths and dependencies differ by GOOS). +vuln: (_banner "lint go" "vuln") (_per-goos "govulncheck ./...") + +# Dependency license compliance, once per supported platform (see _per-goos in +# _lib.just: each GOOS pulls its own dependencies). A project that needs extra +# flags — typically --ignore= for the module-layout false positives of +# https://github.com/google/go-licenses/issues/186 — exports them from its +# the root Justfile, the home of all project customization (the variable name +# mirrors the task path `lint go licenses`): +# export LINT_GO_LICENSES_FLAGS := '--ignore=gotest.tools/v3' +# For a one-off, set it on the invocation instead: +# LINT_GO_LICENSES_FLAGS='--ignore=x' just do lint go licenses +# +# GOROOT is passed explicitly because go-licenses recognizes stdlib packages by +# their location under GOROOT — but, being a go_install binary, its built-in +# default is the GOROOT of whatever toolchain COMPILED it. When that differs +# from the pinned toolchain on PATH (which is where packages actually load +# from), every stdlib package degrades to "does not have module info" errors. +licenses: (_banner "lint go" "licenses") (_per-goos 'GOROOT="$(go env GOROOT)" go-licenses check --include_tests --allowed_licenses=Apache-2.0,BSD-2-Clause,BSD-3-Clause,MIT ${LINT_GO_LICENSES_FLAGS:-} ./...') + +# Bounds-check-elimination report: every bounds check the compiler could NOT +# eliminate, for performance tuning. Informational — it never fails, so it is +# not in the default set; and it reports for the native architecture only, +# since BCE results are arch-specific and this is a report for the human +# reading it, not a gate. +bce: (_banner "lint go" "bce") + #!/usr/bin/env bash + set -euo pipefail + echo "Bounds Check Elimination Report" + echo "================================" + echo "" + output=$(go build -gcflags='-d=ssa/check_bce/debug=1' ./... 2>&1 | grep -v '^#' || true) + if [ -z "$output" ]; then + echo "No bounds checks detected (BCE fully eliminated)." + else + total=$(echo "$output" | wc -l | tr -d ' ') + echo "Total: $total bounds checks" + echo "" + echo "By file:" + echo "$output" | sed 's/:.*$//' | sort | uniq -c | sort -rn + echo "" + echo "Details:" + echo "$output" | sort + fi + +# Escape-analysis and inlining report — both come from the same compiler pass +# (-gcflags=-m): values the compiler moved to the heap (the prime source of GC +# pressure) and functions it refused to inline, with the reason. Informational +# like bce: never fails, native architecture only, not in the default set. +escape: (_banner "lint go" "escape") + #!/usr/bin/env bash + set -euo pipefail + output=$(go build -gcflags='-m' ./... 2>&1 | grep -v '^#' || true) + heap=$(echo "$output" | grep -E 'escapes to heap|moved to heap' || true) + noinline=$(echo "$output" | grep 'cannot inline' || true) + echo "Escape Analysis Report" + echo "======================" + if [ -z "$heap" ]; then + echo "No heap escapes." + else + echo "Total: $(echo "$heap" | wc -l | tr -d ' ') heap escapes" + echo "" + echo "By file:" + echo "$heap" | sed 's/:.*$//' | sort | uniq -c | sort -rn + echo "" + echo "$heap" | sort + fi + echo "" + echo "Inlining Failures" + echo "=================" + if [ -z "$noinline" ]; then + echo "None." + else + echo "Total: $(echo "$noinline" | wc -l | tr -d ' ') functions the compiler could not inline" + echo "" + echo "$noinline" | sort + fi + +# Unreachable functions, by whole-program call-graph analysis (deeper than the +# per-package `unused` linter in golangci). -test keeps library-only repos +# analyzable (test binaries serve as roots) and stops dead code from hiding +# behind test-only callers. Informational: native only, not in the default set. +deadcode: (_banner "lint go" "deadcode") + deadcode -test ./... diff --git a/.limen/just/lint-homebrew.just b/.limen/just/lint-homebrew.just new file mode 100644 index 0000000..d8a9787 --- /dev/null +++ b/.limen/just/lint-homebrew.just @@ -0,0 +1,137 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +# Homebrew formula linting runs through brew itself: brew vendors its own Ruby +# and its own RuboCop with the Homebrew cops, so this module needs no Ruby +# toolchain — installing rubocop separately would be the wrong setup (plain +# RuboCop does not know the formula audit rules). +# +# brew is the one tool here that is NOT on the hermetic PATH, deliberately: +# it is a machine-layer package manager (not aqua-pinnable), and the PATH +# exclusion exists to stop machine tools substituting for pinned ones — brew +# is not substituting for anything, it IS the subject under test; formulas +# only mean anything on a machine that has it. The exception stays narrow: +# BREW_BIN is captured from the AMBIENT PATH at just startup (see main.just), +# before the hermetic PATH locks down — the invoking shell knows where brew +# lives, whatever the prefix — and the hermetic PATH itself is untouched. + +default: style audit + +# Homebrew's RuboCop profile over every formula and cask in the repository; +# passes vacuously when there are none. The mutating twin is +# `just do fix homebrew style`. +style: (_banner "lint homebrew" "style") + #!/usr/bin/env bash + set -euo pipefail + {{ _skip_unless_macos }} + # --cached --others --exclude-standard: tracked *and* new untracked files, + # still honoring .gitignore (same as `lint just`). The patterns are the + # modern tap layout ONLY: Formula/ (sharded subdirectories included) and + # Casks/. The legacy layouts brew still reads (HomebrewFormula/, bare *.rb + # at the repository root) are deliberately unsupported — a formula living + # there is invisible here, so put it in Formula/. Discovery runs before + # the brew lookup so a repo without formulas passes vacuously even + # brew-less. + files=() + while IFS= read -r -d '' f; do + files+=("$f") + done < <(git ls-files -z --cached --others --exclude-standard \ + 'Formula/*.rb' 'Formula/**/*.rb' 'Casks/*.rb' 'Casks/**/*.rb') + if [ "${#files[@]}" -eq 0 ]; then + echo "no formulas or casks (Formula/, Casks/) — nothing to lint." + exit 0 + fi + {{ _require_brew }} + # shellcheck disable=SC2154 # BREW_BIN is exported by the canonical Justfile (main.just). + "$BREW_BIN" style "${files[@]}" + +# The semantic checker: URL/sha256 coherence, license tags, deprecated DSL, +# dependency ordering. brew addresses formulas by TAP NAME, never by path, so +# the project must declare which tap it is (export LINT_HOMEBREW_TAP := +# 'user/name' in the root Justfile) and this recipe registers the working tree +# as that tap — a symlink, so the audit judges the working tree, not a clone — +# for the duration of the run. Extra flags (CI wants --online, which does +# network calls) go through LINT_HOMEBREW_AUDIT_FLAGS. +audit: (_banner "lint homebrew" "audit") + #!/usr/bin/env bash + set -euo pipefail + {{ _skip_unless_macos }} + # Same vacuous pass as `style`: no formulas, nothing to audit, no brew + # (and no tap declaration) required. + if [ -z "$(git ls-files --cached --others --exclude-standard \ + 'Formula/*.rb' 'Formula/**/*.rb' 'Casks/*.rb' 'Casks/**/*.rb')" ]; then + echo "no formulas or casks (Formula/, Casks/) — nothing to audit." + exit 0 + fi + {{ _require_brew }} + tap="${LINT_HOMEBREW_TAP:-}" + case "$tap" in + */*) ;; + *) + echo "LINT_HOMEBREW_TAP is not set (or not 'user/name') — brew audit addresses formulas" >&2 + echo "by tap name, not by path. Export it in the root Justfile, e.g.:" >&2 + echo " export LINT_HOMEBREW_TAP := 'farcloser/tap'" >&2 + exit 1 + ;; + esac + # shellcheck disable=SC2154 # BREW_BIN is exported by the canonical Justfile (main.just). + link="$("$BREW_BIN" --repository)/Library/Taps/${tap%%/*}/homebrew-${tap##*/}" + created="" + if [ -e "$link" ] || [ -L "$link" ]; then + # Already tapped: proceed only when it is exactly this checkout — + # auditing a stale clone of the same tap would judge the wrong tree. + if [ "$(readlink "$link" 2>/dev/null || true)" != "$PWD" ]; then + echo "tap $tap is already installed at" >&2 + echo " $link" >&2 + echo "and is not this checkout — untap it (brew untap $tap) or audit there." >&2 + exit 1 + fi + else + mkdir -p "$(dirname "$link")" + ln -s "$PWD" "$link" + created="$link" + fi + cleanup() { + if [ -n "$created" ]; then + rm -f "$created" + fi + } + trap cleanup EXIT + # shellcheck disable=SC2086 # deliberate word-split of the flags knob. + "$BREW_BIN" audit --strict --tap "$tap" ${LINT_HOMEBREW_AUDIT_FLAGS:-} + +# Homebrew exists on macOS only: everywhere else these recipes degrade to a +# LOUD no-op, so a repository can keep homebrew in its lint/fix aggregates +# and still run the full suite on the linux/windows legs of the matrix. +# Injected into recipe bodies as a just variable (same mechanism as +# _require_brew below); the twin lives in fix-homebrew.just. +[private] +_skip_unless_macos := ''' + if [ "$(uname -s)" != 'Darwin' ]; then + echo "homebrew is macOS-only — nothing to do on this platform (skipped, not failed)." + exit 0 + fi +''' + +# BREW_BIN is captured from the ambient PATH in main.just (see the module +# comment); this only refuses when that capture came up empty. Injected into +# recipe bodies as a just variable because module recipes cannot share shell +# functions. +[private] +_require_brew := ''' + if [ -z "${BREW_BIN:-}" ]; then + echo "brew was not found on your PATH when just started." >&2 + echo "brew is a machine-layer tool — install it outside the repo (or export" >&2 + echo "BREW_BIN=/path/to/brew), then re-run." >&2 + exit 1 + fi +''' diff --git a/.limen/just/lint-rust.just b/.limen/just/lint-rust.just new file mode 100644 index 0000000..4f3b0b6 --- /dev/null +++ b/.limen/just/lint-rust.just @@ -0,0 +1,15 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +rust: (_banner "lint" "rust") + cargo fmt --all --check + cargo clippy --all-targets --all-features -- --deny warnings diff --git a/.limen/just/lint.just b/.limen/just/lint.just new file mode 100644 index 0000000..2605fc9 --- /dev/null +++ b/.limen/just/lint.just @@ -0,0 +1,213 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +default: links yaml shell dockerfile commits just aqua limen + +# Go linters live in their own submodule: `just do lint go` runs them all, +# `just do lint go ` (e.g. `just do lint go mod`) runs one. +mod go 'lint-go.just' +mod rust 'lint-rust.just' + +# Homebrew formula linting (`just do lint homebrew`): brew's own vendored +# tooling, resolved by absolute path — the machine-layer exception documented +# in the module itself. Explicit like the language modules, not in the +# default set. +mod homebrew 'lint-homebrew.just' + +# limen itself: verify the repository against the Farcloser engineering rules +# (mandatory files, canonical baseline, license, aqua pins). First in the +# default set: the other linters trust the canonical files this one verifies. +# LIMEN_BIN exists for one consumer — the limen repository itself, whose +# the root Justfile points it at `go run ./cmd/limen` so the working tree is judged +# by its own enforcer, not by the (always older) released pin. Everyone else +# runs the aqua-pinned binary. +limen: (_banner "lint" "limen") + ${LIMEN_BIN:-limen} check . + +# GitHub settings audit — `limen github check` against this repository +# (inferred from origin), or any target the subcommand takes +# (`just do lint github -org farcloser`). Named, never in the default set: it +# needs the network and an authed gh, and its subject is the live GitHub +# state, not the tree. Same LIMEN_BIN override as `lint limen`. +github *args: (_banner "lint" "github") + ${LIMEN_BIN:-limen} github check {{ args }} + +just: (_banner "lint" "just") + #!/usr/bin/env bash + set -euo pipefail + # --cached --others --exclude-standard: tracked *and* new untracked files, + # still honoring .gitignore — so a not-yet-staged file is linted too. + git ls-files -z --cached --others --exclude-standard 'justfile' 'Justfile' '*.just' '**/justfile' \ + | xargs -0 -I{} just --fmt --check --justfile {} + +# godolint — hadolint as pure Go (https://github.com/farcloser/godolint) — +# over every Dockerfile in the repository; passes vacuously when there are +# none, so it can sit in the default set for every repo. Rule exceptions +# belong next to the instruction they excuse, as inline +# `# hadolint ignore=DLxxxx` pragmas — not in the recipe. +dockerfile: (_banner "lint" "dockerfile") + #!/usr/bin/env bash + set -euo pipefail + # --cached --others --exclude-standard: tracked *and* new untracked files, + # still honoring .gitignore — so a not-yet-staged Dockerfile is linted too + # (same as `lint just`). The patterns cover the naming conventions — the + # bare name and the . / . forms, at any + # depth — for both Dockerfile and its OCI-neutral synonym Containerfile + # (podman/buildah). '*.Dockerfile' needs no '**/' twin — a wildcard pattern + # already matches across directories; a literal like 'Dockerfile' does not. + files=() + while IFS= read -r -d '' f; do + files+=("$f") + done < <(git ls-files -z --cached --others --exclude-standard \ + 'Dockerfile' '**/Dockerfile' 'Dockerfile.*' '**/Dockerfile.*' '*.Dockerfile' \ + 'Containerfile' '**/Containerfile' 'Containerfile.*' '**/Containerfile.*' '*.Containerfile') + # godolint validates RUN instructions through shellcheck when it finds it + # on PATH — the hermetic PATH (see the root Justfile) always provides the + # pinned one. + [ ${#files[@]} -eq 0 ] || godolint "${files[@]}" + +yaml: (_banner "lint" "yaml") + yamlfmt -conf .limen/.yamlfmt -lint + +shell: (_banner "lint" "shell") + #!/usr/bin/env bash + set -euo pipefail + # A file is a shell script if it declares itself one, by either signal: + # - a .sh/.bash extension → a missing shebang is then a lint error (SC2148), or + # - a shebang on line 1 for a dialect shellcheck lints (sh/bash/dash/ksh — + # not zsh, which shellcheck cannot check) → covers extension-less scripts. + # Filtering on the shebang alone would silently skip an *.sh that forgot its shebang. + # No mapfile (bash 4+): build the array with a read loop, portable to bash 3.2. + files=() + while IFS= read -r -d '' f; do + case "$f" in + *.sh|*.bash) files+=("$f"); continue ;; + esac + head -n 1 "$f" 2>/dev/null | grep -qE '^#!.*\b(bash|dash|ksh|sh)\b' && files+=("$f") + done < <(git ls-files -z --cached --others --exclude-standard) + [ ${#files[@]} -eq 0 ] || shellcheck --rcfile .limen/.shellcheckrc "${files[@]}" + # Shebang recipes inside justfiles are shell scripts too — extract each + # body from `just --dump --dump-format json` and shellcheck it standalone. + # In the dump a body line is a fragment list: text fragments are strings, + # interpolations (double-brace expressions — just syntax, not shell) are + # arrays, masked as INTERP. One dump of the root justfile covers the whole + # tree: imports (the root Justfile) are flattened into .recipes — they cannot be + # parsed standalone, their dependencies may name root-level module paths — + # and every `mod` nests recursively under .modules. mktemp gets an explicit + # template because macOS mktemp ignores $TMPDIR. + tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/lint-shell.XXXXXX") + trap 'rm -rf "$tmpdir"' EXIT + recipes=() + dump=$(just --dump --dump-format json) + # Bodies are multi-line: base64 carries each across the one-record-per-line + # pipe intact (quotes, tabs and all). The trailing tr matters: the native + # windows jq writes CRLF, and the stray \r lands in the last TSV field, + # corrupting the base64 ("base64: invalid input"). \r cannot legitimately + # appear in this stream (recipe names and base64), so a blanket strip is safe. + while IFS=$'\t' read -r name body; do + # ':' is illegal in windows filenames — the msys layer creates + # "do::lint" via a private-use encoding that native shellcheck then + # cannot open (openBinaryFile: invalid argument). The name is only a + # label; flatten module separators. + out="$tmpdir/${name//:/_}" + printf '%s' "$body" | base64 -d > "$out" + head -n 1 "$out" | grep -qE '^#!.*\b(bash|dash|ksh|sh)\b' || continue + recipes+=("$out") + done < <(printf '%s' "$dump" | jq -r ' + def recipes_of(prefix): + ((.recipes // {}) | to_entries[] + | [prefix + .key, + (.value.body + | map(map(if type == "string" then . else "INTERP" end) | join("")) + | join("\n") | @base64)]), + ((.modules // {}) | to_entries[] + | .key as $mod | .value | recipes_of(prefix + $mod + "::")); + recipes_of("") | @tsv' | tr -d '\r') + # SC1010 is excluded for recipe bodies only: `just do ` is our shared + # namespace, and shellcheck misreads the argument "do" as the shell keyword. + # The constant-word checks (SC2050/SC2078/SC2157/SC2194) are excluded for + # recipe bodies only: a masked INTERP is constant to shellcheck but dynamic + # in reality, so those hits can only be false positives of the masking. + [ ${#recipes[@]} -eq 0 ] || shellcheck --rcfile .limen/.shellcheckrc --exclude=SC1010,SC2050,SC2078,SC2157,SC2194 "${recipes[@]}" + +# Check documentation links with lychee (respects .gitignore, skips hidden files). +links: (_banner "lint" "links") + #!/usr/bin/env bash + set -euo pipefail + # A directory input (not a glob) is what makes lychee honor .gitignore/hidden. + # Canonical exclusions (and their rationale) live in .limen/lychee.toml; a + # repository adds its own in a root .lychee.toml. Both must be passed + # explicitly — any --config disables lychee's ./lychee.toml auto-discovery — + # and lychee merges them, concatenating the exclude lists. + args=(--config .limen/lychee.toml) + if [ -f .lychee.toml ]; then + args+=(--config .lychee.toml) + fi + lychee --no-progress "${args[@]}" . + +# Validate commit hygiene — DCO sign-off, subject length, dangling whitespace — +# over a commit range (default: everything ahead of the upstream default branch; +# pass one explicitly otherwise, e.g. `just do lint commits v1.0.0..HEAD`). +commits range="": (_banner "lint" "commits") + #!/usr/bin/env bash + set -euo pipefail + # Contributors' SSH keys, when the repo ships them, arm signature display + # for humans (git log --show-signature, git tag -v). None of the rules run + # below verify signatures — this is convenience wiring, not enforcement. + # See https://github.com/andyfeller/gh-ssh-allowed-signers for automation + # to retrieve contributor keys. + if [ -f .allowed_signers ]; then + git config --unset-all gpg.ssh.allowedSignersFile 2>/dev/null || true + git config --add gpg.ssh.allowedSignersFile .allowed_signers + fi + range="{{ range }}" + if [ -z "$range" ] && [ -n "${GITHUB_BASE_REF:-}" ]; then + # GitHub Actions pull request: validate against the PR's actual base + # branch, whatever it targets. Requires actions/checkout with + # fetch-depth: 0 — the default shallow checkout has no base refs (and + # only the synthetic merge commit as "history": vacuously green). + if git rev-parse --verify -q "origin/$GITHUB_BASE_REF" >/dev/null 2>&1; then + range="origin/${GITHUB_BASE_REF}..HEAD" + fi + fi + if [ -z "$range" ]; then + # Default to the commits this branch adds over the upstream default + # branch. origin/HEAD is only set when `git remote set-head` ran, so + # fall back through the common default-branch names; with no upstream + # at all, validate the full history. + for ref in origin/HEAD origin/main origin/master; do + if git rev-parse --verify -q "$ref" >/dev/null 2>&1; then + range="$ref..HEAD" + break + fi + done + fi + if [ -n "$range" ]; then + git-validation -run DCO,short-subject,dangling-whitespace -range "$range" + else + git-validation -run DCO,short-subject,dangling-whitespace + fi + +# Verify aqua-checksums.json is complete and in sync with aqua.yaml. +aqua: (_banner "lint" "aqua") + #!/usr/bin/env bash + set -euo pipefail + # aqua has no read-only validator, so regenerate and compare against the + # committed file (needs network). `git diff HEAD` is staging-independent — it + # compares the working tree to the last commit, not the index. On drift the + # corrected file is left in place — review and commit it. + # --log-level warn: the per-package INFO lines are noise when nothing is wrong. + aqua --log-level warn update-checksum --prune + if ! git diff --quiet HEAD -- aqua-checksums.json; then + echo "aqua-checksums.json was out of sync with aqua.yaml (regenerated above) — review and commit it." >&2 + exit 1 + fi diff --git a/.limen/just/main.just b/.limen/just/main.just new file mode 100644 index 0000000..ea20b55 --- /dev/null +++ b/.limen/just/main.just @@ -0,0 +1,65 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# The root Justfile is the project's own: a shim that imports this file and +# then carries the project's recipes — everything shared lives here, so the +# shim never has to change. + +# The project may redefine the shared recipes below (info, or an explicit +# default) in its root Justfile: the later definition — the project's — wins. +set allow-duplicate-recipes + +# Project name, derived from the directory the root Justfile lives in. +project := file_name(justfile_directory()) + +# brew — the one machine-layer tool a shared recipe may call (the homebrew +# modules) — is captured from the AMBIENT PATH here, above the hermetic PATH +# so the lookup still sees the invoking shell's environment: brew is not +# aqua-pinnable and installs at machine-chosen prefixes, so that shell knows +# best where it lives. Empty when absent (the homebrew recipes then fail with +# guidance); override by exporting BREW_BIN. +export BREW_BIN := env_var_or_default('BREW_BIN', `command -v brew || true`) + +# Hermetic PATH: aqua-pinned tools + base system only (no homebrew), so any tool that +# isn't pinned fails loudly instead of silently resolving to an unpinned copy. +# Windows (git-bash) is the sanctioned exception to that hermeticity: there is no +# knowable base-system directory list (sh, coreutils, and git live at +# install-dependent roots), and the separator is ';' — so the pinned tools are +# prepended to the ambient PATH instead. Pins still shadow everything, and +# hermeticity stays enforced by the posix legs of the CI matrix. +aqua_bin := env_var_or_default('AQUA_ROOT_DIR', env_var_or_default('XDG_DATA_HOME', home_directory() / '.local/share') / 'aquaproj-aqua') / 'bin' +export PATH := if os() == 'windows' { aqua_bin + ';' + env_var('PATH') } else { aqua_bin + ":/usr/bin:/bin:/usr/sbin:/sbin" } + +# Hermetic Go env: ambient variables tunnel straight through the hermetic PATH. +# An inherited GOROOT (IDEs inject one, often pointing into the module cache, +# which `go clean -modcache` deletes) overrides where the pinned go finds its +# stdlib — with modern Go it should never be set: go derives it from its own +# location. Emptied rather than unexported: go treats '' as unset, and unlike +# `unexport`, an `export` propagates into module recipes. GOTOOLCHAIN=local +# forbids silent toolchain switching: when go.mod outpaces the pin, recipes +# fail loudly asking for a pin bump instead of downloading an unpinned +# toolchain behind your back. +export GOROOT := '' +export GOTOOLCHAIN := 'local' + +# Hermetic, per-project linter cache (same doctrine as PATH and GOROOT: no +# shared mutable state across repos). Lives under build/ — gitignored, and +# local runs behave like CI instead of diverging on cache state. +export GOLANGCI_LINT_CACHE := justfile_directory() / 'build/cache/golangci-lint' + +# just's default recipe is the FIRST one defined in the root Justfile, so a +# project's first own recipe takes over from this one — deliberately: the +# default belongs to the project. +# Show every available recipe — the project's own and the shared `do` tree. +default: + @just --list + +# Print meaningful information about this project. +info: + @echo "name: {{ project }}" + @echo "upstream: $(git remote get-url origin 2>/dev/null || echo '(none)')" + @echo "semver: $(git describe --tags --abbrev=0 2>/dev/null || echo '(none)')" + @echo "commit: $(git rev-parse --short HEAD 2>/dev/null || echo '(none)')" + @echo "date: $(git log --max-count=1 --format=%cd --date=short 2>/dev/null || echo '(none)')" + +# Every shared limen task: `just do lint`, `just do build go`, `just do release v1.2.3` — the top level stays the project's. +mod do 'do.just' diff --git a/.limen/just/release.just b/.limen/just/release.just new file mode 100644 index 0000000..ee88147 --- /dev/null +++ b/.limen/just/release.just @@ -0,0 +1,205 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +# Imported flat into the canonical Justfile — not a module — so the recipe can +# take arguments (`just do release v1.2.3`; a module invocation would parse the +# tag as a recipe path). Deliberately no settings and no _lib import here: an +# import's settings would apply to the whole importing module. + +# Release. The default is the CI lane; everything local is opted into with +# --local (see book/recipes.md): +# +# just do release vX.Y.Z +# Verify a clean tree, create the signed tag (your key signs the +# INTENT), push — the release workflow builds, signs the artifacts +# (keyless cosign), and publishes. +# +# just do release --local vX.Y.Z [--cosign-password ] +# The fully local lane: tag + goreleaser + key-based cosign from this +# machine. The key path is a mandatory argument; the password is +# prompted when not given. For private repos (nothing touches Rekor's +# public log) — and the escape hatch when CI is down. +# +# just do release --local --dry-run +# Unsigned local snapshot into build/release/: no tag, no token, no +# publish — and works on a dirty tree, by design. +# +# just do release --ci +# The workflow half of the default lane (GitHub Actions only): the +# pushed tag triggered us; run goreleaser with keyless signing. +# +# Tag pushes are always exactly one tag, never --tags: stray local tags stay +# local. A tag already on HEAD is reused, so a failed publish retries safely. +[doc('Release: `vX.Y.Z` tags for CI · `--local vX.Y.Z` · `--local --dry-run` · `--ci`')] +release *args: + #!/usr/bin/env bash + set -euo pipefail + # Releasing is opt-in, by carrying a goreleaser config (project-owned, like + # the root Justfile — limen neither pins nor seeds it). Checked before + # anything else: past this point the recipe creates tags and pushes. + if [ ! -f .goreleaser.yaml ] && [ ! -f .goreleaser.yml ]; then + echo "this project has no .goreleaser.yaml — goreleaser releases are opt-in (see book/recipes.md)." >&2 + exit 1 + fi + usage() { + echo "usage: just do release # signed tag + push; CI builds, signs (keyless), publishes" >&2 + echo " just do release --local [--cosign-password

] # fully local, key-based cosign" >&2 + echo " just do release --local --dry-run # local unsigned snapshot into build/release/" >&2 + echo " just do release --ci # workflow half of the default lane (GitHub Actions only)" >&2 + } + require_clean() { + # A dirty tree is the most common failure and goreleaser hard-refuses + # it — check long before anything is created or pushed. + if [ -n "$(git status --porcelain)" ]; then + echo "the working tree is dirty — commit or stash before releasing:" >&2 + git status --short >&2 + exit 1 + fi + } + require_version_tag() { + if ! printf '%s' "$1" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z][0-9A-Za-z.-]*)?$'; then + echo "'$1' is not a version tag (vX.Y.Z or vX.Y.Z-prerelease, e.g. v0.0.0-test.1)." >&2 + exit 2 + fi + } + tag_and_push() { + # Create the signed tag — unless it already exists pointing at HEAD, so + # a retry after a failed publish resumes instead of failing here. + if existing=$(git rev-parse -q --verify "refs/tags/$1^{commit}"); then + if [ "$existing" != "$(git rev-parse HEAD)" ]; then + echo "tag $1 already exists and does not point at HEAD — refusing." >&2 + exit 1 + fi + echo "tag $1 already on HEAD — reusing it." + else + git tag -s "$1" -m "$1" + fi + git push origin HEAD + git push origin "refs/tags/$1" + } + set -- {{ args }} + case "${1:-}" in + --local) + shift + if [ "${1:-}" = "--dry-run" ]; then + # Snapshot builds skip signing: no key material needed. + exec goreleaser release --snapshot --clean --skip=sign + fi + key="${1:-}" + if [ -z "$key" ]; then + usage + exit 2 + fi + shift + tag="" + password="" + while [ $# -gt 0 ]; do + case "$1" in + --cosign-password) + if [ $# -lt 2 ]; then + echo "--cosign-password needs a value." >&2 + exit 2 + fi + password="$2" + shift 2 + ;; + -*) + echo "unknown option: $1" >&2 + usage + exit 2 + ;; + *) + if [ -n "$tag" ]; then + echo "unexpected argument: $1 (tag already given: $tag)" >&2 + usage + exit 2 + fi + tag="$1" + shift + ;; + esac + done + if [ -z "$tag" ]; then + usage + exit 2 + fi + if [ ! -f "$key" ]; then + echo "cosign key not found: $key" >&2 + echo "generate a key pair once with 'cosign generate-key-pair'; commit cosign.pub, keep the private key out of the tree." >&2 + exit 1 + fi + require_version_tag "$tag" + require_clean + if [ -z "${GITHUB_TOKEN:-}" ]; then + echo "GITHUB_TOKEN is not set — goreleaser needs it to publish the GitHub release." >&2 + exit 1 + fi + if [ -z "$password" ]; then + # cosign under goreleaser cannot prompt (no tty on its stdin): + # collect the passphrase up front. Empty is legal — it means an + # unencrypted key. + printf 'cosign key password (empty for an unencrypted key): ' >&2 + read -rs password + echo >&2 + fi + export COSIGN_KEY="$key" + export COSIGN_PASSWORD="$password" + tag_and_push "$tag" + exec goreleaser release --clean + ;; + --ci) + # The workflow half: the tag exists (its push triggered this run, + # and CI checks out exactly that commit), publishing uses the + # workflow's GITHUB_TOKEN, and signing is keyless — the OIDC + # identity replaces any key. + if [ -z "${GITHUB_ACTIONS:-}" ]; then + echo "--ci is the workflow half — locally, 'just do release ' cuts the tag CI releases." >&2 + exit 1 + fi + if [ -z "${ACTIONS_ID_TOKEN_REQUEST_URL:-}" ]; then + echo "no OIDC token available — the workflow needs 'id-token: write' for keyless signing." >&2 + exit 1 + fi + if [ -z "${GITHUB_TOKEN:-}" ]; then + echo "GITHUB_TOKEN is not set — pass the workflow token to this step's env." >&2 + exit 1 + fi + if ! git describe --exact-match --tags HEAD >/dev/null 2>&1; then + echo "HEAD carries no tag — this lane only runs on a tag push." >&2 + exit 1 + fi + # Keyless is enforced, not defaulted: a key leaking into the CI + # environment must not silently flip the signing mode. + unset COSIGN_KEY + exec goreleaser release --clean + ;; + --dry-run) + echo "dry runs are a local concern: use 'just do release --local --dry-run'." >&2 + exit 2 + ;; + "") + usage + exit 2 + ;; + -*) + echo "unknown option: $1" >&2 + usage + exit 2 + ;; + *) + # The default lane: cut the signed tag and push — the release + # workflow takes it from here. + tag="$1" + shift + if [ $# -gt 0 ]; then + echo "unexpected argument: $1" >&2 + usage + exit 2 + fi + require_version_tag "$tag" + require_clean + tag_and_push "$tag" + echo "tag $tag pushed — the release workflow builds, signs, and publishes from here." + ;; + esac diff --git a/.limen/just/test-go.just b/.limen/just/test-go.just new file mode 100644 index 0000000..a5f1764 --- /dev/null +++ b/.limen/just/test-go.just @@ -0,0 +1,105 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +default: unit + +# `go test` runs funnel through gotestsum: same exit semantics, readable live +# output (its format is gotestsum's own GOTESTSUM_FORMAT knob). -count=1 +# defeats Go's test result cache — a test task must actually test. The shared +# timeout is project-overridable from the root Justfile, the home of all project +# customization: +# export TEST_GO_TIMEOUT := '20m' + +# Unit tests. +unit: (_banner "test go" "unit") + gotestsum -- -count=1 -timeout "${TEST_GO_TIMEOUT:-10m}" ./... + +# Unit tests under the race detector. The final link is delegated to the +# system linker: the race detector injects runtime/cgo into every package, and +# hardened CGO_CFLAGS (-fstack-protector-strong, -fPIE) make those objects +# reference libc symbols Go's internal linker cannot resolve on Linux +# ("relocation target stderr not defined") — see golang/go#52690, #54313, +# #58619. On macOS with Xcode 15+, ld emits "has malformed LC_DYSYMTAB" +# warnings for race builds; cosmetic, the binaries are correct (golang/go#61229). +race: (_banner "test go" "race") + CGO_ENABLED=1 gotestsum -- -count=1 -timeout "${TEST_GO_TIMEOUT:-10m}" -ldflags=-linkmode=external -race ./... + +# Benchmarks, with allocation stats. -run '^$' deselects unit tests so only +# benchmarks run — `just do test go` already covers the tests themselves. +bench: (_banner "test go" "bench") + go test -count=1 -timeout "${TEST_GO_TIMEOUT:-10m}" -run '^$' -bench . -benchmem ./... + +# Coverage: per-function summary, an HTML report under build/coverage/, and an +# optional minimum gate — export TEST_GO_COVER_MIN := '80' (integer percent) +# from the root Justfile to enforce a floor; unset or 0 reports without gating. +cover: (_banner "test go" "cover") + #!/usr/bin/env bash + set -euo pipefail + dir=build/coverage + mkdir -p "$dir" + gotestsum -- -count=1 -timeout "${TEST_GO_TIMEOUT:-10m}" -coverprofile="$dir/coverage.out" ./... + go tool cover -func="$dir/coverage.out" + go tool cover -html="$dir/coverage.out" -o "$dir/coverage.html" + echo "HTML report: $dir/coverage.html" + min="${TEST_GO_COVER_MIN:-0}" + if [ "$min" -gt 0 ] 2>/dev/null; then + total=$(go tool cover -func="$dir/coverage.out" | awk '/^total:/ { gsub(/%/, "", $3); print $3 }') + if [ "${total%%.*}" -lt "$min" ]; then + echo "coverage ${total}% is below the ${min}% minimum" >&2 + exit 1 + fi + echo "coverage ${total}% meets the ${min}% minimum" + fi + +# CPU and memory profiles, one pair per package, with pprof top-20 summaries +# printed and PNG call graphs rendered via the pinned `dot` (goccy/go-graphviz: +# real graphviz compiled to WASM, so it lives in aqua like any Go tool). +# Informational: a package whose tests fail is still profiled past, never +# fails the run. Artifacts land under build/profiles/ (raw) and +# build/profiles-docs/ (PNG); analyze interactively with `go tool pprof`. +profile: (_banner "test go" "profile") + #!/usr/bin/env bash + set -euo pipefail + prof=build/profiles + docs=build/profiles-docs + mkdir -p "$prof" "$docs" + # pprof's own -png shells out to dot writing to a pipe, which the WASM dot + # cannot do (it needs -o) — so render from pprof's -dot text instead. The + # pre-create matters: under a sandbox the WASM runtime can overwrite files + # but not always create them. Paths stay cwd-relative for the same reason + # (the runtime preopens only the working directory). + render() { + src=$1; png=$2; shift 2 + go tool pprof -dot -nodecount=20 "$@" "$src" > "$png.dot" 2>/dev/null + : > "$png" + dot -Tpng -o "$png" "$png.dot" + rm -f "$png.dot" + echo " -> $png" + } + for pkg in $(go list ./...); do + name=${pkg##*/} + echo "Profiling $pkg..." + go test -count=1 -o "$prof/$name.test" "$pkg" \ + -cpuprofile "$prof/${name}_cpu.prof" \ + -memprofile "$prof/${name}_mem.prof" || true + if [ -s "$prof/${name}_cpu.prof" ]; then + echo " CPU profile (top 20):" + go tool pprof -top -nodecount=20 "$prof/${name}_cpu.prof" 2>/dev/null || true + render "$prof/${name}_cpu.prof" "$docs/${name}_cpu.png" + fi + if [ -s "$prof/${name}_mem.prof" ]; then + echo " Memory profile — alloc_space (top 20):" + go tool pprof -top -nodecount=20 -alloc_space "$prof/${name}_mem.prof" 2>/dev/null || true + render "$prof/${name}_mem.prof" "$docs/${name}_alloc.png" -alloc_space + fi + done + echo "Profiles written to $prof/, diagrams to $docs/" diff --git a/.limen/just/test.just b/.limen/just/test.just new file mode 100644 index 0000000..a7540a1 --- /dev/null +++ b/.limen/just/test.just @@ -0,0 +1,17 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +# Go tests live in their own submodule: `just do test go` runs the unit tests, +# `just do test go ` (e.g. `just do test go race`) runs one task. +# +# Bare `just do test` deliberately refuses: tests are always language-bound, so +# there is nothing a universal default could run that would not fail (or lie) +# on some repo. Which suites apply is each project's call — name one +# explicitly, and define the project-wide aggregate as `test-all` in +# the root Justfile (the CI workflow's entry point, mirroring lint-all). +default: + @echo 'just test has no default — name a suite (e.g. `just do test go`), or run the project'"'"'s `just test-all`.' >&2 + @exit 1 + +mod go 'test-go.just' diff --git a/.limen/just/tools.just b/.limen/just/tools.just new file mode 100644 index 0000000..3786b52 --- /dev/null +++ b/.limen/just/tools.just @@ -0,0 +1,78 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +set working-directory := '../..' + +# Silence just's per-line command echo; recipes announce themselves via _banner. +set quiet + +# Shared private _banner recipe (see _lib.just). +import '_lib.just' + +# --- Project tooling via aqua (see book/tooling.md). Each recipe takes the +# owner/repo exactly as it appears in aqua.yaml, e.g. golangci/golangci-lint. --- + +# Add a new tool at its latest version, e.g. `just do tools add junegunn/fzf`. +add pkg: (_banner "tools" "add") + #!/usr/bin/env bash + set -euo pipefail + if grep -qE "^[[:space:]]*-[[:space:]]*name:[[:space:]]*{{ pkg }}([[:space:]]|@|$)" aqua.yaml; then + echo "{{ pkg }} is already in aqua.yaml — use 'just do tools update {{ pkg }}' or 'just do tools set {{ pkg }} '." >&2 + exit 1 + fi + aqua generate -i "{{ pkg }}" # append the latest version to aqua.yaml + aqua update-checksum --prune # record its checksum (and drop stale ones) + aqua install --only-link # install and verify + +# Set an existing tool to an exact version, e.g. `just do tools set golangci/golangci-lint v1.55.3`. +set pkg version: (_banner "tools" "set") + #!/usr/bin/env bash + set -euo pipefail + if ! grep -qE "^[[:space:]]*-[[:space:]]*name:[[:space:]]*{{ pkg }}@" aqua.yaml; then + echo "{{ pkg }} is not pinned in aqua.yaml — add it with 'just do tools add {{ pkg }}'." >&2 + exit 1 + fi + # An explicit path template: macOS mktemp ignores $TMPDIR and falls back to + # a per-user temp dir that sandboxes may deny writes to. A sibling file also + # makes the mv a same-filesystem, truly atomic rename. + tmp=$(mktemp aqua.yaml.XXXXXX) + trap 'rm -f "$tmp"' EXIT + sed -E "s#(^[[:space:]]*-[[:space:]]*name:[[:space:]]*{{ pkg }})@[^[:space:]]*#\1@{{ version }}#" aqua.yaml > "$tmp" + mv "$tmp" aqua.yaml + aqua update-checksum --prune # new checksum in, replaced version's out + aqua install --only-link # install and verify + +# Update an existing tool to its latest version, e.g. `just do tools update golangci/golangci-lint`. +update pkg: (_banner "tools" "update") + #!/usr/bin/env bash + set -euo pipefail + latest=$(aqua generate "{{ pkg }}" 2>/dev/null | grep -E 'name:' | head -n 1 | sed -E 's/.*@//' | tr -d '[:space:]') + if [ -z "$latest" ]; then + echo "could not resolve the latest version of {{ pkg }}." >&2 + exit 1 + fi + just do tools set "{{ pkg }}" "$latest" + +# Remove a tool entirely, e.g. `just do tools remove junegunn/fzf`. +remove pkg: (_banner "tools" "remove") + #!/usr/bin/env bash + set -euo pipefail + if ! grep -qE "^[[:space:]]*-[[:space:]]*name:[[:space:]]*{{ pkg }}([[:space:]]|@|$)" aqua.yaml; then + echo "{{ pkg }} is not in aqua.yaml — nothing to remove." >&2 + exit 1 + fi + # See `set` for why mktemp gets an explicit sibling-path template. + tmp=$(mktemp aqua.yaml.XXXXXX) + trap 'rm -f "$tmp"' EXIT + awk -v pkg="{{ pkg }}" ' + function isCont(l) { return (l ~ /^[[:blank:]]+[^[:blank:]#-]/) } + { + if (skip) { if (isCont($0)) next; skip = 0 } + if ($0 ~ "^[[:blank:]]*-[[:blank:]]*name:[[:blank:]]*" pkg "([[:blank:]]|@|$)") { skip = 1; next } + print + } + ' aqua.yaml > "$tmp" + mv "$tmp" aqua.yaml + aqua remove "{{ pkg }}" || true # uninstall the binary (no-op for go_install tools) + aqua update-checksum --prune # drop the now-unused checksum diff --git a/.limen/lychee.toml b/.limen/lychee.toml new file mode 100644 index 0000000..27ec773 --- /dev/null +++ b/.limen/lychee.toml @@ -0,0 +1,22 @@ +# DO NOT EDIT MANUALLY. +# Canonical lychee (link checker) configuration, identical in every repository. +# A repository can add its own exclusions in a root .lychee.toml — the `lint links` +# recipe passes both files and lychee merges them, concatenating the exclude +# lists — so this baseline only carries exclusions that apply everywhere. + +# Transient failures (5xx, 408, 429) are retried by lychee, but its defaults +# (3 retries, 2s minimum wait) span mere seconds — shorter than a typical +# GitHub 503 blip, so runs failed on weather. Widen the window instead of +# accepting the codes outright: a server that is STILL erroring after ~a +# minute of backoff is a finding, not weather. +max_retries = 6 +retry_wait_time = 5 + +exclude = [ + # fsf.org: verbatim (A)GPL license texts link to it, and its server (TLS 1.2 + # with DHE-only key exchange) cannot complete a handshake with lychee's + # rustls, which implements neither. The links themselves are fine. + # gnu.org: rate-limits aggressively, so the license-text links to it fail + # intermittently. + 'https?://(www\.)?(fsf|gnu)\.org(/|$)', +] diff --git a/Justfile b/Justfile new file mode 100644 index 0000000..2e54bf6 --- /dev/null +++ b/Justfile @@ -0,0 +1,6 @@ +# This file is the project's own — add recipes below. Keep the import: it +# mounts every shared limen task under `just do ...`. +import '.limen/just/main.just' + +lint: do::lint::default +fix: do::fix::default diff --git a/README.md b/README.md index e3b7b88..d7c7748 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Mumbrew is very simple, easy to use auto-updater for brew. The service by default runs at 2AM, and will upgrade everything that is not pinned. -This is similar in principle to https://github.com/Homebrew/homebrew-autoupdate +This is similar in principle to https://github.com/DomT4/homebrew-autoupdate albeit much simpler and also quite dumber. ## Install @@ -13,6 +13,7 @@ Install with brew: ```bash brew install farcloser/brews/mumbrew +brew trust --formula farcloser/brews/mumbrew brew services start mumbrew ``` @@ -35,4 +36,6 @@ cat $(brew --prefix)/var/log/farcloser.mumbrew.err.log ## Development -You need shellcheck (`brew install shellcheck`). +``` +just lint-all +``` diff --git a/aqua-checksums.json b/aqua-checksums.json new file mode 100644 index 0000000..6a7cf31 --- /dev/null +++ b/aqua-checksums.json @@ -0,0 +1,304 @@ +{ + "checksums": [ + { + "id": "github_release/github.com/casey/just/1.55.1/just-1.55.1-aarch64-apple-darwin.tar.gz", + "checksum": "0225E3899B1B555BC3F4122D0402BA931A6EE697D188C68E4D971468064C78F4", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/casey/just/1.55.1/just-1.55.1-aarch64-unknown-linux-musl.tar.gz", + "checksum": "B0EE814C9656427408E339893541E30D9027828686839499B2A2A34DD61AD173", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/casey/just/1.55.1/just-1.55.1-x86_64-apple-darwin.tar.gz", + "checksum": "74D7D0AFC195DF14D8E34636FB9B6A9C7D3D443622478DBE86140FFE41AD9192", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/casey/just/1.55.1/just-1.55.1-x86_64-pc-windows-msvc.zip", + "checksum": "8106E6C036AEA52DD1D5109BDF9357C37BA87A0E0EF1013D7327103942550C79", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/casey/just/1.55.1/just-1.55.1-x86_64-unknown-linux-musl.tar.gz", + "checksum": "B0EF600F0DF20D5AE91AE931627C499FC52B477FFE5F5EA7B7B3EC616B16C778", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/cli/cli/v2.96.0/gh_2.96.0_linux_amd64.tar.gz", + "checksum": "83D5C2CCAD5498F58BF6368ACB1AB32588CF43AB3A4B1C301BF36328B1C8BD60", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/cli/cli/v2.96.0/gh_2.96.0_linux_arm64.tar.gz", + "checksum": "06F86EC7103D41993B76CD78072F43595C34AAA56506D971D9860E67140BF909", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/cli/cli/v2.96.0/gh_2.96.0_macOS_amd64.zip", + "checksum": "4BD449DF9AD639391BC62B8032546F0FE9EDCD8526E06682A4F88ABD8C5D163C", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/cli/cli/v2.96.0/gh_2.96.0_macOS_arm64.zip", + "checksum": "F23A0C37D963AACC3BED703CCBD59B41C5CA22101FAB7F00EB2B7CAD23ABA463", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/cli/cli/v2.96.0/gh_2.96.0_windows_amd64.zip", + "checksum": "C2D6ACC935CD2F00E2144D7E036D5CD82E6B6BD5594E8C75AA75EF2A4ED6AAC3", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_darwin_amd64.tar.gz", + "checksum": "5B6AB77BB7A5FA1B87114D66BD55CFD49AB39DC45CC5275CB7F8E04F665B8E21", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_darwin_arm64.tar.gz", + "checksum": "0E6918BA030F9758917F0A1A5512DC8BA420C5F6126EB2111A7E0AD6817FE445", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_linux_amd64.tar.gz", + "checksum": "37025CAE09B7014055CB3FDE4DC30C5740E7187EC03B3449016FE0B92F818D22", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_linux_arm64.tar.gz", + "checksum": "A294BE1C4A8C34F5E45A763BFFBFF4D0456FC5E64F65FF12D968DCE58E7A90CA", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_windows_amd64.tar.gz", + "checksum": "BCBB9FA04D7D0F36FDFE3B0AA270EE886C6C566A78B46E8FC69D8DCA1485AC74", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/golangci/golangci-lint/v2.12.2/golangci-lint-2.12.2-darwin-amd64.tar.gz", + "checksum": "F6F06D94B6241521C53D15450C5209B028270BF966F842AFB11C030C79F5BC16", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/golangci/golangci-lint/v2.12.2/golangci-lint-2.12.2-darwin-arm64.tar.gz", + "checksum": "A9C54498731B3128F79E090BE6110F3E5FFFCCC617B08142ED244D4126C73F29", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/golangci/golangci-lint/v2.12.2/golangci-lint-2.12.2-linux-amd64.tar.gz", + "checksum": "8DF580D2670FED8FA984AAC0507099AF8DF275E665215F5C7A2AE3943893A553", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/golangci/golangci-lint/v2.12.2/golangci-lint-2.12.2-linux-arm64.tar.gz", + "checksum": "44CD40A8C76C86755375ADFEEA52CFD3533CB43D7BD647771E0AE065E166DF3A", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/golangci/golangci-lint/v2.12.2/golangci-lint-2.12.2-windows-amd64.zip", + "checksum": "BD42E3EBC8CB4ECECB86941983BAAF1DC221BBB04D838E94CE63B49CC91E02BB", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Darwin_arm64.tar.gz", + "checksum": "4B417ECB94339D57E4C122ECC948C1A00FE328B5853266DE9806E652A92858FA", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Darwin_x86_64.tar.gz", + "checksum": "060E943BCB8583C456810EB1FF4721B4F46C4A0C1A4432449D5DC3BBFE29A22B", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Linux_arm64.tar.gz", + "checksum": "5B2689C963B177271330C5CE8CA7396751107E5A826BE46F03D2CB9B6F0C7784", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Linux_x86_64.tar.gz", + "checksum": "1F300D9257B232BB3B541D7FB1B0E6B3C121BCBAB381C86CD38CB8722BE8A566", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Windows_x86_64.tar.gz", + "checksum": "07F80CE5D741EB4B0A9380AC78A19C7CB5BD44E2A9A47A5A04839E3BA54DD463", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/goreleaser/goreleaser/v2.16.0/goreleaser_Darwin_all.tar.gz", + "checksum": "6A102E4D588FD3553A9AC7321CA6023A9F205843F4861CA35BD337DFA9E72ECE", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/goreleaser/goreleaser/v2.16.0/goreleaser_Linux_arm64.tar.gz", + "checksum": "0102D974373FCDEB77042D1F5897CAFFA193BE36620FDC6C1DA43A01EF8E10D3", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/goreleaser/goreleaser/v2.16.0/goreleaser_Linux_x86_64.tar.gz", + "checksum": "EAAE05B5EBA07533BD0F06846B68C808399504784DF00C62EB219541FC04E5E2", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/goreleaser/goreleaser/v2.16.0/goreleaser_Windows_x86_64.zip", + "checksum": "6FE5EDA11F0BCAC8069AFF3EF3DCB0B11816C9E95F89773595564697A5278BC9", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/gotestyourself/gotestsum/v1.13.0/gotestsum_1.13.0_darwin_amd64.tar.gz", + "checksum": "99529350F4C7B780B1EFC543CA0D9721B09F0A4228F0EFA9281261F58FEFA05A", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/gotestyourself/gotestsum/v1.13.0/gotestsum_1.13.0_darwin_arm64.tar.gz", + "checksum": "509CB27AEF747F48FAF9BCE424F59DCF79572C905204B990EE935BBFCC7FA0E9", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/gotestyourself/gotestsum/v1.13.0/gotestsum_1.13.0_linux_amd64.tar.gz", + "checksum": "11CCDDEAF708EF228889F9FE2F68291A75B27013DDFC3B18156E094F5F40E8EE", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/gotestyourself/gotestsum/v1.13.0/gotestsum_1.13.0_linux_arm64.tar.gz", + "checksum": "7644A4C5CD1BB978D56245AEAB25A586AC5AC62ADEBED20A399548867C13499D", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/gotestyourself/gotestsum/v1.13.0/gotestsum_1.13.0_windows_amd64.tar.gz", + "checksum": "FD5A6DC69E46A0970593E70D85A7E75F16714E9C61D6D72CCC324EB82DF5BB8A", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/jqlang/jq/jq-1.8.2/jq-linux-amd64", + "checksum": "B1C22172DD303F3BE49E935AA56AA48A8B7A46E0BC838B4997D3BB451495870F", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/jqlang/jq/jq-1.8.2/jq-linux-arm64", + "checksum": "8B85C817833814DDCA00A144C33705546355AFCCF0CF39B188F3CDB48B852309", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/jqlang/jq/jq-1.8.2/jq-macos-amd64", + "checksum": "E94B266E3C26690550006ABE63152B782280F4E14374ACCDF04CBDE844F00BC0", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/jqlang/jq/jq-1.8.2/jq-macos-arm64", + "checksum": "2D75340BA57A4B4B4C8708A21C2DC8E958A48AAA8BBA13B27F77F6E4C0ECA07E", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/jqlang/jq/jq-1.8.2/jq-windows-amd64.exe", + "checksum": "A6FC67FEDAF9128A3309A1E2EBB8B986AECCF70122EE46D2CB4849E423F0C627", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/koalaman/shellcheck/v0.11.0/shellcheck-v0.11.0.darwin.aarch64.tar.xz", + "checksum": "56AFFDD8DE5527894DCA6DC3D7E0A99A873B0F004D7AABC30AE407D3F48B0A79", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/koalaman/shellcheck/v0.11.0/shellcheck-v0.11.0.darwin.x86_64.tar.xz", + "checksum": "3C89DB4EDCAB7CF1C27BFF178882E0F6F27F7AFDF54E859FA041FCA10FEBE4C6", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/koalaman/shellcheck/v0.11.0/shellcheck-v0.11.0.linux.aarch64.tar.xz", + "checksum": "12B331C1D2DB6B9EB13CFCA64306B1B157A86EB69DB83023E261EAA7E7C14588", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/koalaman/shellcheck/v0.11.0/shellcheck-v0.11.0.linux.x86_64.tar.xz", + "checksum": "8C3BE12B05D5C177A04C29E3C78CE89AC86F1595681CAB149B65B97C4E227198", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/koalaman/shellcheck/v0.11.0/shellcheck-v0.11.0.zip", + "checksum": "8A4E35AB0B331C85D73567B12F2A444DF187F483E5079CEFFA6BDA1FAA2E740E", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/lycheeverse/lychee/lychee-v0.24.2/lychee-aarch64-apple-darwin.tar.gz", + "checksum": "C9D3740EA2D891854D37116C9FBA840F37B6E7C89D330E7DB84AC333631C4977", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/lycheeverse/lychee/lychee-v0.24.2/lychee-aarch64-unknown-linux-musl.tar.gz", + "checksum": "5D0B0E3AEAB240F41920C633A6EAF97599BE6EEDDA034B36E858EDE7DBA5E535", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/lycheeverse/lychee/lychee-v0.24.2/lychee-x86_64-apple-darwin.tar.gz", + "checksum": "887503A9CFF667D322B8D0892B40BF49976EB9507AF8483220A3706CDAD55978", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/lycheeverse/lychee/lychee-v0.24.2/lychee-x86_64-pc-windows-msvc.zip", + "checksum": "32975D1493EE1A975D6BB41E4FB56FE419CB442DED628BB772BA2E614ACFACAD", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/lycheeverse/lychee/lychee-v0.24.2/lychee-x86_64-unknown-linux-musl.tar.gz", + "checksum": "73657A111819A30C47C08352896796F23D64E4EB2B3ED39B6D32149241566FC5", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/sigstore/cosign/v3.1.1/cosign-darwin-amd64", + "checksum": "14D2678DFBFDE18798151E86FBD91EBDADBB7424B18412A42A155DD8A2DF4C7A", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/sigstore/cosign/v3.1.1/cosign-darwin-arm64", + "checksum": "94B42A9E697BE95675F6160AB031A9A5F1EC1E646D6F648D7B2F5CD59ECECBC5", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/sigstore/cosign/v3.1.1/cosign-linux-amd64", + "checksum": "AE1ECD212663F3693AD9EDF8B1A183900C9A52D3155BA6E354237F9A0F6463FC", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/sigstore/cosign/v3.1.1/cosign-linux-arm64", + "checksum": "2EC865872E331C32FD12B08DAE15332D3F92C0AA029219589684A4903CA85D11", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/sigstore/cosign/v3.1.1/cosign-windows-amd64.exe", + "checksum": "9D2C026E667BFD979FA7BA1CAB8C4B24D2E73F336EC2D57F7FC72C7E73E5B4B6", + "algorithm": "sha256" + }, + { + "id": "http/golang.org/dl/go1.26.4.darwin-amd64.tar.gz", + "checksum": "05DC9B5F9997744520AAEBB3D5DEAA7C755371AEBBFB7F97C2511A9F3367538D", + "algorithm": "sha256" + }, + { + "id": "http/golang.org/dl/go1.26.4.darwin-arm64.tar.gz", + "checksum": "B62AD2B6D7D2464F12A5BCAD7FF47F19D08325773B5EFD21610E445A05A9BF53", + "algorithm": "sha256" + }, + { + "id": "http/golang.org/dl/go1.26.4.linux-amd64.tar.gz", + "checksum": "1153D3D50E0AC764B447ADFE05C2BCF08E889D42A02E0FE0259BD47F6733AD7F", + "algorithm": "sha256" + }, + { + "id": "http/golang.org/dl/go1.26.4.linux-arm64.tar.gz", + "checksum": "EF758AE7C6CF9267C9C0EF080B8965F453D89AB2D25D9EB22DE4405925238768", + "algorithm": "sha256" + }, + { + "id": "http/golang.org/dl/go1.26.4.windows-amd64.zip", + "checksum": "3CA8FB4630B07C419CBDD51F754E31363CFCFB83B3A5354D9E895C90BE2CC345", + "algorithm": "sha256" + }, + { + "id": "registries/github_content/github.com/aquaproj/aqua-registry/v4.530.0/registry.yaml", + "checksum": "43CC45E1A514E4375608A8614CC44987EC04A5865980404D3DADBC245CF9006D", + "algorithm": "sha256" + } + ] +} diff --git a/aqua-policy.yaml b/aqua-policy.yaml new file mode 100644 index 0000000..2e4e6b0 --- /dev/null +++ b/aqua-policy.yaml @@ -0,0 +1,13 @@ +# DO NOT EDIT MANUALLY. +# This file is common to all projects and managed by limen. +# Global configuration changes proposals can be discussed on https://github.com/farcloser/limen + +registries: + - type: standard + ref: semver(">= 4.0.0") + - name: local + type: local + path: .limen/aqua-registry.yaml +packages: + - registry: standard + - registry: local diff --git a/aqua.yaml b/aqua.yaml new file mode 100644 index 0000000..6554fdc --- /dev/null +++ b/aqua.yaml @@ -0,0 +1,48 @@ +# aqua — Declarative CLI Version Manager — https://aquaproj.github.io/ +checksum: + enabled: true + require_checksum: true + supported_envs: + - darwin/amd64 + - darwin/arm64 + - linux/amd64 + - linux/arm64 + - windows/amd64 + +registries: + - type: standard + ref: v4.530.0 # renovate: depName=aquaproj/aqua-registry + - name: local + type: local + path: .limen/aqua-registry.yaml + +packages: + # --- go install tools (local registry, GOSUMDB-verified) --- + - name: github.com/google/go-licenses/v2@v2.0.1 + registry: local + - name: github.com/vbatts/git-validation@v1.2.2 + registry: local + - name: golang.org/x/vuln/cmd/govulncheck@v1.5.0 + registry: local + - name: golang.org/x/tools/cmd/deadcode@v0.47.0 + registry: local + # Pseudo-version: the nested cmd/dot module carries no tags upstream. + - name: github.com/goccy/go-graphviz/cmd/dot@v0.0.0-20251129032125-76e04975df88 + registry: local + - name: github.com/farcloser/godolint/cmd/godolint@v0.1.0 + registry: local + # --- farcloser tools (local registry; standard once registered upstream) --- + - name: farcloser/limen@v0.0.1 # renovate: depName=farcloser/limen + registry: local + # --- toolchain + binary-release tools (standard registry, aqua-verified) --- + - name: golang/go@go1.26.4 + - name: casey/just@1.55.1 + - name: koalaman/shellcheck@v0.11.0 + - name: golangci/golangci-lint@v2.12.2 + - name: google/yamlfmt@v0.21.0 + - name: lycheeverse/lychee@lychee-v0.24.2 + - name: goreleaser/goreleaser@v2.16.0 + - name: sigstore/cosign@v3.1.1 + - name: gotestyourself/gotestsum@v1.13.0 + - name: jqlang/jq@jq-1.8.2 + - name: cli/cli@v2.96.0 diff --git a/lib/lint.sh b/lib/lint.sh deleted file mode 100644 index 7fa13ca..0000000 --- a/lib/lint.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -set -o errexit -o errtrace -o functrace -o nounset -o pipefail -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ -# (c) 2024 Farcloser -# Distributed under the terms of the MIT license -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ - -lint::dockerfile(){ - log::info " > %s\n" "$@" - if ! hadolint "$@"; then - log::error "Failed linting Dockerfile" - exit 1 - fi -} - -lint::shell(){ - log::info " > Shellchecking %s\n" "$@" - shellcheck -a -x "$@" || { - log::error "Failed shellchecking shell script" - return 1 - } -} diff --git a/lib/log.sh b/lib/log.sh deleted file mode 100644 index a98115d..0000000 --- a/lib/log.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env bash -set -o errexit -o errtrace -o functrace -o nounset -o pipefail -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ -# (c) 2024 Farcloser -# Distributed under the terms of the MIT license -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ - -# shellcheck disable=SC2034 -readonly LOG_COLOR_BLACK=0 -readonly LOG_COLOR_RED=1 -readonly LOG_COLOR_GREEN=2 -readonly LOG_COLOR_YELLOW=3 -# shellcheck disable=SC2034 -readonly LOG_COLOR_BLUE=4 -# shellcheck disable=SC2034 -readonly LOG_COLOR_MAGENTA=5 -# shellcheck disable=SC2034 -readonly LOG_COLOR_CYAN=6 -readonly LOG_COLOR_WHITE=7 -# shellcheck disable=SC2034 -readonly LOG_COLOR_DEFAULT=9 - -# shellcheck disable=SC2034 -readonly LOG_STYLE_DEBUG=( setaf "$LOG_COLOR_WHITE" ) -# shellcheck disable=SC2034 -readonly LOG_STYLE_INFO=( setaf "$LOG_COLOR_GREEN" ) -# shellcheck disable=SC2034 -readonly LOG_STYLE_WARNING=( setaf "$LOG_COLOR_YELLOW" ) -# shellcheck disable=SC2034 -readonly LOG_STYLE_ERROR=( setaf "$LOG_COLOR_RED" ) - -readonly LOG_LEVEL_DEBUG=0 -# shellcheck disable=SC2034 -readonly LOG_LEVEL_INFO=1 -# shellcheck disable=SC2034 -readonly LOG_LEVEL_WARNING=2 -# shellcheck disable=SC2034 -readonly LOG_LEVEL_ERROR=3 -export _PRIVATE_LOG_LEVEL=2 - -_log::log(){ - local level - local style - local numeric_level - local message="$2" - - level="$(printf "%s" "$1" | tr '[:lower:]' '[:upper:]')" - numeric_level="$(printf "LOG_LEVEL_%s" "$level")" - style="LOG_STYLE_${level}[@]" - - [ "${!numeric_level}" -ge "$_PRIVATE_LOG_LEVEL" ] || return 0 - - [ ! "$TERM" ] || [ ! -t 2 ] || >&2 tput "${!style:-}" 2>/dev/null || true - >&2 printf "[%s] %s: %s\n" "$(date 2>/dev/null || true)" "$(printf "%s" "$level" | tr '[:lower:]' '[:upper:]')" "$message" - [ ! "$TERM" ] || [ ! -t 2 ] || >&2 tput op 2>/dev/null || true -} - -log::init(){ - local _ll - _ll="$(printf "LOG_LEVEL_%s" "${LOG_LEVEL:-warning}" | tr '[:lower:]' '[:upper:]')" - _PRIVATE_LOG_LEVEL="${!_ll:-1}" - [ "$_PRIVATE_LOG_LEVEL" != "$LOG_LEVEL_DEBUG" ] || { - log::warning "Your log level is set to 'debug'. This is NOT recommended for production use, and MAY leak sensitive information to stderr." - } -} - -log::debug(){ - _log::log debug "$@" -} - -log::info(){ - _log::log info "$@" -} - -log::warning(){ - _log::log warning "$@" -} - -log::error(){ - _log::log error "$@" -} - -log::init diff --git a/lib/utils.sh b/lib/utils.sh deleted file mode 100644 index b8cb970..0000000 --- a/lib/utils.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env bash -set -o errexit -o errtrace -o functrace -o nounset -o pipefail -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ -# (c) 2024 Farcloser -# Distributed under the terms of the MIT license -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ - -portable::mktemp(){ - local prefix="${1:-}" - local directory=${2:-true} - local args=() - - [ "$directory" == true ] && args+=(-dq) || args+=(-q) - - mktemp "${args[@]}" "${TMPDIR:-/tmp}/$prefix.XXXXXX" 2>/dev/null || mktemp "${args[@]}" -} - - -# Helpers -host::require(){ - local binary="$1" - - log::debug "Checking presence of $binary" - command -v "$binary" >/dev/null || { - log::error "You need $binary for this script to work, and it cannot be found in your path" - return 1 - } -} - -host::install(){ - local binary - - for binary in "$@"; do - log::debug "sudo install -D -m 755 $binary /usr/local/bin/$(basename "$binary")" - sudo install -D -m 755 "$binary" /usr/local/bin/"$(basename "$binary")" - done -} - -fs::ensuredir(){ - local pth="$1" - mkdir -p "$pth" 2>/dev/null - [ -d "$pth" ] || { - log::error "Failed to create $pth. Check your permissions." - return 1 - } -} - -curl::get(){ - local url="$1" - log::info "Downloading $url\n" - # 2024-04 Github still does not offer tls 1.3 - curl --proto '=https' --tlsv1.2 -sSfL --compressed "$url" -} diff --git a/logo.jpg b/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abbce048e074c4378eefd69dad2fe7b2b3d13226 GIT binary patch literal 247705 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%0Dt0qeTSBl6@_291Jg1lu21 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%0Af$i>%4$59MVwmi#{ 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 P;a+V>xX$NHUC;m7!wCk6 literal 0 HcmV?d00001 diff --git a/mumbrew b/mumbrew index d5814af..f7d3fe1 100755 --- a/mumbrew +++ b/mumbrew @@ -17,7 +17,6 @@ brew_exec="$(command -v brew || true)" brew_exec="${brew_exec:-$(pwd)/bin/brew}" notifier="$($brew_exec --repository)/bin/terminal-notifier" -arguments=( "-appIcon" "https://avatars.githubusercontent.com/u/142760738?s=400" ) "$brew_exec" update >/dev/null 2>&1 outdated=$($brew_exec outdated --quiet | sed -e 's/.*\///') @@ -26,25 +25,25 @@ pinned=$($brew_exec list --pinned) # Remove pinned formulae from the list of outdated formulae outdated=$(comm -1 -3 <(echo "$pinned") <(echo "$outdated")) -if [ ! "$outdated" ] ; then - echo "Everything ok, no updates available" - #if [ -e "$notifier" ]; then - # $notifier $arguments \ - # -title "Everything ok" \ - # -message "No updates available." - #fi +if [ -z "$outdated" ] ; then + echo "Mumbrew: everything up to date" + if [ -e "$notifier" ]; then + $notifier \ + -title "Mumbrew" \ + -message "Everything up to date" + fi exit fi if [ -e "$notifier" ]; then - $notifier "${arguments[@]}" -title "Updating brews" -message "$outdated" + $notifier -title "Mumbrew: updating" -message "$outdated" fi $brew_exec upgrade $brew_exec cleanup if [ -e "$notifier" ]; then - $notifier "${arguments[@]}" -title "Done updating brews!" -message "" + $notifier -title "Mumbrew" -message "Done updating!" fi echo "★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★" diff --git a/renovate.json5 b/renovate.json5 new file mode 100644 index 0000000..a4de8b1 --- /dev/null +++ b/renovate.json5 @@ -0,0 +1,32 @@ +{ + $schema: "https://docs.renovatebot.com/renovate-schema.json", + extends: [ + "config:recommended", + // Default preset: detects owner/repo@ver and go-module packages in aqua.yaml, + // updates the standard-registry ref, and bumps aqua_version in CI/devcontainer too. + "github>aquaproj/aqua-renovate-config#2.13.0", + ], + // Supply-chain cooldown: wait before proposing a bump. Doubles as protection + // against the race where a release tag exists but its assets aren't uploaded yet. + minimumReleaseAge: "3 days", + // `just lint commits` enforces DCO on every PR range, bot commits included. + commitBody: "Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>", + // The update-aqua-checksum workflow pushes a fix-up commit onto Renovate's + // branches; without this, Renovate treats the branch as human-modified and + // stops rebasing it. + gitIgnoredAuthors: ["41898282+github-actions[bot]@users.noreply.github.com"], + customManagers: [ + // The aqua preset above only manages the lowercase `aqua_version:` input of + // the official installer action, and aqua.yaml itself. The AQUA_VERSION env + // of the hand-rolled installer (.github/actions/setup-aqua) needs its own + // manager, keyed on the standard renovate comment above the pin. + { + customType: "regex", + managerFilePatterns: ["/^\\.github/.+\\.ya?ml$/"], + matchStrings: [ + "# renovate: depName=(?[^\\s]+)\\n\\s*AQUA_VERSION: (?[^\\s]+)", + ], + datasourceTemplate: "github-releases", + }, + ], +} diff --git a/test.sh b/test.sh deleted file mode 100755 index a703ad8..0000000 --- a/test.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -set -o errexit -o errtrace -o functrace -o nounset -o pipefail -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ -# (c) 2024 Farcloser -# Distributed under the terms of the MIT license -# ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ - -root="$(cd "$(dirname "${BASH_SOURCE[0]:-$PWD}")" 2>/dev/null 1>&2 && pwd)" -readonly root - -. "$root"/lib/log.sh -. "$root"/lib/utils.sh -. "$root"/lib/lint.sh - -# Linting -log::info "Linting" -lint::shell mumbrew ./*.sh ./lib/*.sh -log::info "Linting successful" - -./mumbrew From d77e38f82b76c2919187ead033cc8cfc06a6914e Mon Sep 17 00:00:00 2001 From: apostasie Date: Tue, 7 Jul 2026 10:07:46 -0700 Subject: [PATCH 2/3] Fix gitignore issue Signed-off-by: apostasie --- .gitignore | 1 - .limen/just/_lib.just | 45 +++++++++++++++++++++++++++++++++++++++++++ Justfile | 1 + 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 .limen/just/_lib.just diff --git a/.gitignore b/.gitignore index 4d505b1..ae2e9d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ .DS_Store .idea -_* # --- added by limen fix: baseline patterns --- Thumbs.db diff --git a/.limen/just/_lib.just b/.limen/just/_lib.just new file mode 100644 index 0000000..9336591 --- /dev/null +++ b/.limen/just/_lib.just @@ -0,0 +1,45 @@ +# DO NOT EDIT MANUALLY. +# This file provides shared tasks common to all projects and managed by limen. +# Project recipes live in the root Justfile, below the shared-baseline import. + +# Uniform per-recipe banner, shared across the lint/fix/tools modules via `import` +# (a `mod` can't be depended on, and modules don't inherit the parent's recipes). +# Private → hidden from --list. The module name is passed in because just has no +# current-module variable; depended on with arguments so it prints identically for +# plain *and* shebang recipes, which just otherwise echoes inconsistently (plain +# recipes echo their lines; shebang recipes do not). +_banner mod name: + @echo "▶ {{ mod }}: {{ name }}" + +# Run CMD once per supported platform (the list below mirrors the canonical +# checksum.supported_envs in aqua.yaml) with CGO disabled: the Go build/dependency graph +# differs per GOOS, so a single native run misses the other platforms' files +# and dependencies. CGO prevents exactly that — loading packages for a foreign +# GOOS needs that platform's C toolchain — so a project that genuinely needs +# cgo must export CGO_ENABLED=1 and gets one native run only: reduced +# coverage, announced loudly. +_per-goos +cmd: + #!/usr/bin/env bash + set -euo pipefail + if [ "${CGO_ENABLED:-0}" = "1" ]; then + echo "CGO_ENABLED=1: cross-platform runs are impossible (foreign-GOOS package" >&2 + echo "loading needs that platform's C toolchain) — native platform only." >&2 + {{ cmd }} + else + # Native platform FIRST, always: go_install tools build lazily on + # first use, and `go install` refuses to cross-compile when GOBIN is + # set (which is how aqua builds Go tools) — so a cold start must + # trigger that build on the native leg; the foreign legs then merely + # run the already-built binary. + # Extend this list together with checksum.supported_envs in aqua.yaml. + platforms=(darwin linux windows) + native="$(go env GOHOSTOS)" + ordered=("$native") + for goos in "${platforms[@]}"; do + [ "$goos" = "$native" ] || ordered+=("$goos") + done + for goos in "${ordered[@]}"; do + echo "→ GOOS=$goos" + CGO_ENABLED=0 GOOS="$goos" {{ cmd }} + done + fi diff --git a/Justfile b/Justfile index 2e54bf6..e9642f7 100644 --- a/Justfile +++ b/Justfile @@ -4,3 +4,4 @@ import '.limen/just/main.just' lint: do::lint::default fix: do::fix::default +test: From e9506efa0886d18d2698b835f482cec74933b033 Mon Sep 17 00:00:00 2001 From: apostasie Date: Tue, 7 Jul 2026 10:55:32 -0700 Subject: [PATCH 3/3] Limen 0.0.2 Signed-off-by: apostasie --- .github/workflows/update-aqua-checksum.yaml | 26 ++++++++-- .limen/aqua-registry.yaml | 14 ++++++ .limen/just/build-go.just | 4 +- .limen/just/fix-go.just | 6 +-- .limen/just/fix-homebrew.just | 4 +- .limen/just/fix-rust.just | 4 +- .limen/just/fix.just | 4 +- .limen/just/{_lib.just => lib.just} | 0 .limen/just/lint-go.just | 10 ++-- .limen/just/lint-homebrew.just | 4 +- .limen/just/lint-rust.just | 4 +- .limen/just/lint.just | 4 +- .limen/just/test-go.just | 4 +- .limen/just/tools.just | 22 +++++---- aqua-checksums.json | 55 +++++++++++++++++---- aqua.yaml | 3 +- 16 files changed, 119 insertions(+), 49 deletions(-) rename .limen/just/{_lib.just => lib.just} (100%) diff --git a/.github/workflows/update-aqua-checksum.yaml b/.github/workflows/update-aqua-checksum.yaml index 7ff859e..aa21b0b 100644 --- a/.github/workflows/update-aqua-checksum.yaml +++ b/.github/workflows/update-aqua-checksum.yaml @@ -34,9 +34,14 @@ # # Known trade of the default token: GitHub suppresses workflow runs for # commits it pushes, so the PR's CI does not re-run on the checksum commit. -# To get CI on the final state of Renovate PRs, add a fine-grained PAT (or -# GitHub App token) with contents:write as the UPDATE_AQUA_CHECKSUM_TOKEN -# secret — the workflow prefers it automatically. +# To get CI on the final state of Renovate PRs, register a GitHub App — +# contents:write only, webhook disabled, installed on the org; no infra, it +# is just an identity — and set the org variable UPDATE_AQUA_CHECKSUM_APP_ID +# plus the org secret UPDATE_AQUA_CHECKSUM_APP_PRIVATE_KEY: the workflow +# then mints a one-hour, this-repo-only token per run, so there is no +# long-lived broad credential and nothing that expires on a calendar. A +# fine-grained PAT with contents:write as UPDATE_AQUA_CHECKSUM_TOKEN is the +# drop-in alternative; the token preference order is App, PAT, default. name: update-aqua-checksum on: @@ -89,10 +94,23 @@ jobs: if: github.repository != 'farcloser/limen' run: aqua exec -- limen fix . + - name: Mint a push token, if the App is configured + # Placed after the update steps so those still run with no secrets in + # their environment. The minted token lives one hour and is scoped to + # this repository only; the long-lived private key exists solely to + # mint and never authorizes a push itself. Guarded on the variable so + # repos without the App fall through to the token chain below. + if: vars.UPDATE_AQUA_CHECKSUM_APP_ID != '' + id: app-token + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + app-id: ${{ vars.UPDATE_AQUA_CHECKSUM_APP_ID }} + private-key: ${{ secrets.UPDATE_AQUA_CHECKSUM_APP_PRIVATE_KEY }} + - name: Push the update, if any env: BRANCH: ${{ github.ref_name }} - TOKEN: ${{ secrets.UPDATE_AQUA_CHECKSUM_TOKEN || github.token }} + TOKEN: ${{ steps.app-token.outputs.token || secrets.UPDATE_AQUA_CHECKSUM_TOKEN || github.token }} run: | [ -z "$(git status --porcelain)" ] && { echo "checksums and baseline already in sync"; exit 0; } git config user.name "github-actions[bot]" diff --git a/.limen/aqua-registry.yaml b/.limen/aqua-registry.yaml index 309fda0..694b259 100644 --- a/.limen/aqua-registry.yaml +++ b/.limen/aqua-registry.yaml @@ -74,6 +74,20 @@ packages: type: github_release asset: checksums.txt algorithm: sha256 + # Signatures are verified whenever upstream publishes them (see the + # book's signature doctrine): the release signs checksums.txt keyless + # from CI (goreleaser cosign lane), which transitively covers every + # asset the file lists. The identity IS the release workflow at the + # exact tag — a bundle signed by anything else fails the install. + cosign: + bundle: + type: github_release + asset: checksums.txt.sigstore.json + opts: + - --certificate-identity + - https://github.com/farcloser/limen/.github/workflows/release.yaml@refs/tags/{{.Version}} + - --certificate-oidc-issuer + - https://token.actions.githubusercontent.com supported_envs: - darwin - linux diff --git a/.limen/just/build-go.just b/.limen/just/build-go.just index d40b303..fdcca9c 100644 --- a/.limen/just/build-go.just +++ b/.limen/just/build-go.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' # Ported from the historical Make build system, corrected along the way: # - a "binary" is a DIRECTORY under cmd/ that contains Go sources — a stray diff --git a/.limen/just/fix-go.just b/.limen/just/fix-go.just index 5b8a1be..f1b010a 100644 --- a/.limen/just/fix-go.just +++ b/.limen/just/fix-go.just @@ -7,13 +7,13 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' default: code mod # golangci-lint auto-fixes, once per supported platform (see _per-goos in -# _lib.just: platform-specific files are only analyzed for the GOOS that +# lib.just: platform-specific files are only analyzed for the GOOS that # builds them). The formatter is build-graph-independent and runs once — last, # so the fixes' edits end up formatted. code: (_banner "fix go" "go") (_per-goos "golangci-lint run --fix") diff --git a/.limen/just/fix-homebrew.just b/.limen/just/fix-homebrew.just index ebe9c0b..e137dc6 100644 --- a/.limen/just/fix-homebrew.just +++ b/.limen/just/fix-homebrew.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' # The mutating counterpart of `just do lint homebrew` — brew's vendored # RuboCop with --fix. Same machine-layer exception as the lint module: diff --git a/.limen/just/fix-rust.just b/.limen/just/fix-rust.just index 9182c1e..df77a6b 100644 --- a/.limen/just/fix-rust.just +++ b/.limen/just/fix-rust.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' rust: (_banner "fix" "rust") cargo clippy --fix --all-targets --all-features --allow-dirty --allow-staged diff --git a/.limen/just/fix.just b/.limen/just/fix.just index 77aad69..4996ed2 100644 --- a/.limen/just/fix.just +++ b/.limen/just/fix.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' default: limen just yaml diff --git a/.limen/just/_lib.just b/.limen/just/lib.just similarity index 100% rename from .limen/just/_lib.just rename to .limen/just/lib.just diff --git a/.limen/just/lint-go.just b/.limen/just/lint-go.just index 2dea28f..0691c79 100644 --- a/.limen/just/lint-go.just +++ b/.limen/just/lint-go.just @@ -7,12 +7,12 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' default: code mod vuln licenses -# golangci-lint, once per supported platform (see _per-goos in _lib.just: +# golangci-lint, once per supported platform (see _per-goos in lib.just: # platform-specific files are only analyzed for the GOOS that builds them). # The formatter is build-graph-independent and runs once. The last step bans # blanket revive suppressions: nolintlint polices golangci directives, and @@ -29,11 +29,11 @@ mod: (_banner "lint go" "mod") # Known-vulnerability scan against the Go vulnerability database (network: # govulncheck fetches vuln.go.dev), once per supported platform (see _per-goos -# in _lib.just: call paths and dependencies differ by GOOS). +# in lib.just: call paths and dependencies differ by GOOS). vuln: (_banner "lint go" "vuln") (_per-goos "govulncheck ./...") # Dependency license compliance, once per supported platform (see _per-goos in -# _lib.just: each GOOS pulls its own dependencies). A project that needs extra +# lib.just: each GOOS pulls its own dependencies). A project that needs extra # flags — typically --ignore= for the module-layout false positives of # https://github.com/google/go-licenses/issues/186 — exports them from its # the root Justfile, the home of all project customization (the variable name diff --git a/.limen/just/lint-homebrew.just b/.limen/just/lint-homebrew.just index d8a9787..6d7d573 100644 --- a/.limen/just/lint-homebrew.just +++ b/.limen/just/lint-homebrew.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' # Homebrew formula linting runs through brew itself: brew vendors its own Ruby # and its own RuboCop with the Homebrew cops, so this module needs no Ruby diff --git a/.limen/just/lint-rust.just b/.limen/just/lint-rust.just index 4f3b0b6..f7dd113 100644 --- a/.limen/just/lint-rust.just +++ b/.limen/just/lint-rust.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' rust: (_banner "lint" "rust") cargo fmt --all --check diff --git a/.limen/just/lint.just b/.limen/just/lint.just index 2605fc9..7520df7 100644 --- a/.limen/just/lint.just +++ b/.limen/just/lint.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' default: links yaml shell dockerfile commits just aqua limen diff --git a/.limen/just/test-go.just b/.limen/just/test-go.just index a5f1764..e0b6c87 100644 --- a/.limen/just/test-go.just +++ b/.limen/just/test-go.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' default: unit diff --git a/.limen/just/tools.just b/.limen/just/tools.just index 3786b52..e7068c6 100644 --- a/.limen/just/tools.just +++ b/.limen/just/tools.just @@ -7,8 +7,8 @@ set working-directory := '../..' # Silence just's per-line command echo; recipes announce themselves via _banner. set quiet -# Shared private _banner recipe (see _lib.just). -import '_lib.just' +# Shared private _banner recipe (see lib.just). +import 'lib.just' # --- Project tooling via aqua (see book/tooling.md). Each recipe takes the # owner/repo exactly as it appears in aqua.yaml, e.g. golangci/golangci-lint. --- @@ -43,16 +43,18 @@ set pkg version: (_banner "tools" "set") aqua update-checksum --prune # new checksum in, replaced version's out aqua install --only-link # install and verify -# Update an existing tool to its latest version, e.g. `just do tools update golangci/golangci-lint`. -update pkg: (_banner "tools" "update") +# Update an existing tool to its latest version, e.g. `just do tools update golangci-lint`. +# Takes the COMMAND name (the executable you type — `just`, `limen`), not the +# owner/name package slug: it delegates to `aqua update`, which resolves a +# command to its pinned package — local-registry packages included. (The +# previous `aqua generate` approach could not work: generate refuses to +# re-emit an already-pinned package, which is the only kind update meets.) +update command: (_banner "tools" "update") #!/usr/bin/env bash set -euo pipefail - latest=$(aqua generate "{{ pkg }}" 2>/dev/null | grep -E 'name:' | head -n 1 | sed -E 's/.*@//' | tr -d '[:space:]') - if [ -z "$latest" ]; then - echo "could not resolve the latest version of {{ pkg }}." >&2 - exit 1 - fi - just do tools set "{{ pkg }}" "$latest" + aqua update "{{ command }}" # bump aqua.yaml to the latest release + aqua update-checksum --prune # new checksum in, replaced version's out + aqua install --only-link # install and verify # Remove a tool entirely, e.g. `just do tools remove junegunn/fzf`. remove pkg: (_banner "tools" "remove") diff --git a/aqua-checksums.json b/aqua-checksums.json index 6a7cf31..ce3dbb9 100644 --- a/aqua-checksums.json +++ b/aqua-checksums.json @@ -51,28 +51,38 @@ "algorithm": "sha256" }, { - "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_darwin_amd64.tar.gz", - "checksum": "5B6AB77BB7A5FA1B87114D66BD55CFD49AB39DC45CC5275CB7F8E04F665B8E21", + "id": "github_release/github.com/cli/cli/v2.96.0/gh_2.96.0_windows_arm64.zip", + "checksum": "C517E0B32C98A4BA90AC95AF8D12CC3AC55781AB4AB72F9A91CE3DE0541D2B09", "algorithm": "sha256" }, { - "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_darwin_arm64.tar.gz", - "checksum": "0E6918BA030F9758917F0A1A5512DC8BA420C5F6126EB2111A7E0AD6817FE445", + "id": "github_release/github.com/farcloser/limen/v0.0.2/limen_0.0.2_darwin_amd64.tar.gz", + "checksum": "47B07A3FC0A4B9316451B957F10A9D967775B89F475BBCD0AF0793F842B6ACC9", "algorithm": "sha256" }, { - "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_linux_amd64.tar.gz", - "checksum": "37025CAE09B7014055CB3FDE4DC30C5740E7187EC03B3449016FE0B92F818D22", + "id": "github_release/github.com/farcloser/limen/v0.0.2/limen_0.0.2_darwin_arm64.tar.gz", + "checksum": "F9ACA372C2034A3EFBB3539836AFA884122F70000A1948DBA225696B30F3C3C7", "algorithm": "sha256" }, { - "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_linux_arm64.tar.gz", - "checksum": "A294BE1C4A8C34F5E45A763BFFBFF4D0456FC5E64F65FF12D968DCE58E7A90CA", + "id": "github_release/github.com/farcloser/limen/v0.0.2/limen_0.0.2_linux_amd64.tar.gz", + "checksum": "2ACBB988741AA50337B37E4373345713B3C766675F3347A08CBF1B54EDB235E8", "algorithm": "sha256" }, { - "id": "github_release/github.com/farcloser/limen/v0.0.1/limen_0.0.1_windows_amd64.tar.gz", - "checksum": "BCBB9FA04D7D0F36FDFE3B0AA270EE886C6C566A78B46E8FC69D8DCA1485AC74", + "id": "github_release/github.com/farcloser/limen/v0.0.2/limen_0.0.2_linux_arm64.tar.gz", + "checksum": "5B2BBB0DF165717381B7D5E79A49427BF8B4AE9BF7C846D7B50435E27159D88A", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/farcloser/limen/v0.0.2/limen_0.0.2_windows_amd64.tar.gz", + "checksum": "39135AC60A939EA22120AA6E32007172960AEF4A3A2D6F44B30A1292EB99237D", + "algorithm": "sha256" + }, + { + "id": "github_release/github.com/farcloser/limen/v0.0.2/limen_0.0.2_windows_arm64.tar.gz", + "checksum": "CB7A08AFEC932A8B4AEE3884391EBE34257440AEEBDDEED3B4E12C1001404B35", "algorithm": "sha256" }, { @@ -100,6 +110,11 @@ "checksum": "BD42E3EBC8CB4ECECB86941983BAAF1DC221BBB04D838E94CE63B49CC91E02BB", "algorithm": "sha256" }, + { + "id": "github_release/github.com/golangci/golangci-lint/v2.12.2/golangci-lint-2.12.2-windows-arm64.zip", + "checksum": "947B9A5BF762D465710B376C156F0184ABB2168378B0826AF1899E0EE7183742", + "algorithm": "sha256" + }, { "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Darwin_arm64.tar.gz", "checksum": "4B417ECB94339D57E4C122ECC948C1A00FE328B5853266DE9806E652A92858FA", @@ -120,6 +135,11 @@ "checksum": "1F300D9257B232BB3B541D7FB1B0E6B3C121BCBAB381C86CD38CB8722BE8A566", "algorithm": "sha256" }, + { + "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Windows_arm64.tar.gz", + "checksum": "C1E64D1C72CA8986BC5B8C8EDD4EC89F0627804E7E08F8DE9F4B484CB5CAD897", + "algorithm": "sha256" + }, { "id": "github_release/github.com/google/yamlfmt/v0.21.0/yamlfmt_0.21.0_Windows_x86_64.tar.gz", "checksum": "07F80CE5D741EB4B0A9380AC78A19C7CB5BD44E2A9A47A5A04839E3BA54DD463", @@ -140,6 +160,11 @@ "checksum": "EAAE05B5EBA07533BD0F06846B68C808399504784DF00C62EB219541FC04E5E2", "algorithm": "sha256" }, + { + "id": "github_release/github.com/goreleaser/goreleaser/v2.16.0/goreleaser_Windows_arm64.zip", + "checksum": "1183C81863044CE9BAA89C1393C258949390B8DF683DF7CA959E9C718D7723C9", + "algorithm": "sha256" + }, { "id": "github_release/github.com/goreleaser/goreleaser/v2.16.0/goreleaser_Windows_x86_64.zip", "checksum": "6FE5EDA11F0BCAC8069AFF3EF3DCB0B11816C9E95F89773595564697A5278BC9", @@ -170,6 +195,11 @@ "checksum": "FD5A6DC69E46A0970593E70D85A7E75F16714E9C61D6D72CCC324EB82DF5BB8A", "algorithm": "sha256" }, + { + "id": "github_release/github.com/gotestyourself/gotestsum/v1.13.0/gotestsum_1.13.0_windows_arm64.tar.gz", + "checksum": "72A59200F83B3204CD59FD417E384DB0543C5511D7A9E38957E74A4035950943", + "algorithm": "sha256" + }, { "id": "github_release/github.com/jqlang/jq/jq-1.8.2/jq-linux-amd64", "checksum": "B1C22172DD303F3BE49E935AA56AA48A8B7A46E0BC838B4997D3BB451495870F", @@ -295,6 +325,11 @@ "checksum": "3CA8FB4630B07C419CBDD51F754E31363CFCFB83B3A5354D9E895C90BE2CC345", "algorithm": "sha256" }, + { + "id": "http/golang.org/dl/go1.26.4.windows-arm64.zip", + "checksum": "62247F56FB7D7B827D237152C4E3FCD69A24D0FA9430DC73DBDA7593AE82BC8D", + "algorithm": "sha256" + }, { "id": "registries/github_content/github.com/aquaproj/aqua-registry/v4.530.0/registry.yaml", "checksum": "43CC45E1A514E4375608A8614CC44987EC04A5865980404D3DADBC245CF9006D", diff --git a/aqua.yaml b/aqua.yaml index 6554fdc..b6f5071 100644 --- a/aqua.yaml +++ b/aqua.yaml @@ -8,6 +8,7 @@ checksum: - linux/amd64 - linux/arm64 - windows/amd64 + - windows/arm64 registries: - type: standard @@ -32,7 +33,7 @@ packages: - name: github.com/farcloser/godolint/cmd/godolint@v0.1.0 registry: local # --- farcloser tools (local registry; standard once registered upstream) --- - - name: farcloser/limen@v0.0.1 # renovate: depName=farcloser/limen + - name: farcloser/limen@v0.0.2 # renovate: depName=farcloser/limen registry: local # --- toolchain + binary-release tools (standard registry, aqua-verified) --- - name: golang/go@go1.26.4