diff --git a/.agents/setup b/.agents/setup new file mode 100755 index 0000000..8907192 --- /dev/null +++ b/.agents/setup @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -euo pipefail + +curl -fsSL https://mise.run/bash | sh + +"$HOME/.local/bin/mise" trust +"$HOME/.local/bin/mise" install --locked \ + actionlint \ + go \ + "go:golang.org/x/vuln/cmd/govulncheck" \ + gofumpt \ + golangci-lint \ + "github:dhth/terminal-control" \ + yamlfmt + +git config push.autoSetupRemote true diff --git a/.amp/settings.json b/.amp/settings.json new file mode 100644 index 0000000..54ea4d6 --- /dev/null +++ b/.amp/settings.json @@ -0,0 +1,3 @@ +{ + "amp.git.commit.ampThread.enabled": false +} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2daccd5..4da4be6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,8 +26,11 @@ jobs: code: - "cmd/**" - "internal/**" + - "tests/**" - "**/*.go" - "go.*" + - "mise.toml" + - "mise.lock" - ".golangci.yml" - "main.go" - ".github/actions/**" @@ -35,9 +38,13 @@ jobs: deps: - "go.mod" - "go.sum" + - "mise.toml" + - "mise.lock" - ".github/workflows/main.yml" release: - ".goreleaser.yml" + - "mise.toml" + - "mise.lock" - ".github/workflows/main.yml" workflows: - ".github/workflows/**.yml" @@ -51,7 +58,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - uses: dhth/composite-actions/.github/actions/lint-go@main + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: go golangci-lint + - name: Lint + run: mise run lint build: needs: changes @@ -62,12 +74,28 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: go + - name: Build + run: mise run build + + test: + needs: changes + if: ${{ needs.changes.outputs.code == 'true' }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' - - name: go build - run: go build -v ./... + install_args: go + - name: Test + run: mise run test lint-yaml: needs: changes @@ -76,7 +104,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 - - uses: dhth/composite-actions/.github/actions/lint-yaml@main + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: yamlfmt + - name: Lint YAML + run: mise run lint:yaml lint-workflows: needs: changes @@ -85,7 +118,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 - - uses: dhth/composite-actions/.github/actions/lint-actions@main + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: actionlint + - name: Lint workflows + run: mise run lint:actions release-check: needs: changes @@ -93,15 +131,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' + install_args: go goreleaser - name: Release check - uses: goreleaser/goreleaser-action@v7 - with: - version: 'v2.9.0' - args: check + run: mise run release:check vulncheck: needs: changes @@ -109,11 +144,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' - - name: install govulncheck - run: go install golang.org/x/vuln/cmd/govulncheck@latest - - name: govulncheck - run: govulncheck ./... + install_args: go go:golang.org/x/vuln/cmd/govulncheck + - name: Vulnerability check + run: mise run vulncheck diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index fad0d05..b7cbda9 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -24,8 +24,11 @@ jobs: code: - "cmd/**" - "internal/**" + - "tests/**" - "**/*.go" - "go.*" + - "mise.toml" + - "mise.lock" - ".golangci.yml" - "main.go" - ".github/actions/**" @@ -33,9 +36,13 @@ jobs: deps: - "go.mod" - "go.sum" + - "mise.toml" + - "mise.lock" - ".github/workflows/pr.yml" release: - ".goreleaser.yml" + - "mise.toml" + - "mise.lock" - ".github/workflows/pr.yml" workflows: - ".github/workflows/**.yml" @@ -49,7 +56,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - uses: dhth/composite-actions/.github/actions/lint-go@main + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: go golangci-lint + - name: Lint + run: mise run lint build: needs: changes @@ -60,12 +72,28 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: go + - name: Build + run: mise run build + + test: + needs: changes + if: ${{ needs.changes.outputs.code == 'true' }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' - - name: go build - run: go build -v ./... + install_args: go + - name: Test + run: mise run test lint-yaml: needs: changes @@ -74,7 +102,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 - - uses: dhth/composite-actions/.github/actions/lint-yaml@main + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: yamlfmt + - name: Lint YAML + run: mise run lint:yaml lint-workflows: needs: changes @@ -83,7 +116,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 - - uses: dhth/composite-actions/.github/actions/lint-actions@main + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: actionlint + - name: Lint workflows + run: mise run lint:actions release-check: needs: changes @@ -91,15 +129,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' + install_args: go goreleaser - name: Release check - uses: goreleaser/goreleaser-action@v7 - with: - version: 'v2.9.0' - args: check + run: mise run release:check vulncheck: needs: changes @@ -107,11 +142,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' - - name: install govulncheck - run: go install golang.org/x/vuln/cmd/govulncheck@latest - - name: govulncheck - run: govulncheck ./... + install_args: go go:golang.org/x/vuln/cmd/govulncheck + - name: Vulnerability check + run: mise run vulncheck diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae02db9..2c2a7d3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,18 +15,11 @@ jobs: - uses: actions/checkout@v6 with: fetch-depth: 0 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' - - name: Install Cosign - uses: sigstore/cosign-installer@v3 - with: - cosign-release: 'v2.5.3' - - name: Release Binaries - uses: goreleaser/goreleaser-action@v7 - with: - version: 'v2.11.2' - args: release --clean + install_args: go goreleaser cosign + - name: Release binaries + run: mise run release env: GITHUB_TOKEN: ${{secrets.GH_PAT}} diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml new file mode 100644 index 0000000..0276420 --- /dev/null +++ b/.github/workflows/scan.yml @@ -0,0 +1,25 @@ +name: scan + +on: + workflow_dispatch: + schedule: + - cron: '0 12 10 * *' + +jobs: + virus-total: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Set up mise + uses: jdx/mise-action@v4 + with: + install_args: go goreleaser + - name: Build binaries + run: mise run release:build + - name: List binaries + run: | + ls -lh ./dist/mult_*/mult + - uses: dhth/composite-actions/.github/actions/scan-files@main + with: + files: './dist/mult_*/mult' + vt-api-key: ${{ secrets.VT_API_KEY }} diff --git a/.github/workflows/vulncheck.yml b/.github/workflows/vulncheck.yml index f865d47..3192435 100644 --- a/.github/workflows/vulncheck.yml +++ b/.github/workflows/vulncheck.yml @@ -10,11 +10,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 + - name: Set up mise + uses: jdx/mise-action@v4 with: - go-version-file: 'go.mod' - - name: install govulncheck - run: go install golang.org/x/vuln/cmd/govulncheck@latest - - name: govulncheck - run: govulncheck ./... + install_args: go go:golang.org/x/vuln/cmd/govulncheck + - name: Vulnerability check + run: mise run vulncheck diff --git a/.gitignore b/.gitignore index ef08640..a8bfaf1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +dist mult .quickrun cosign.key diff --git a/AGENTS.md b/AGENTS.md index 9eaea9a..56f7712 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,17 +8,7 @@ This file provides guidance to AI coding agents when working with code in this r ## Common Commands -All commands use `just` (task runner): - -```bash -just build # go build -ldflags='-s -w' . -just run # go run . -just install # go install -ldflags='-s -w' . -just lint # golangci-lint run -just fmt # gofumpt -w . -``` - -Note: always use `just` to run commands. +Read `mise.toml` for available development tasks and tools. ## Architecture diff --git a/go.mod b/go.mod index 647bfbf..c1fbf24 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/dhth/mult -go 1.26.4 +go 1.26.6 require ( charm.land/bubbles/v2 v2.1.0 diff --git a/justfile b/justfile deleted file mode 100644 index fe2148e..0000000 --- a/justfile +++ /dev/null @@ -1,35 +0,0 @@ -alias b := build -alias c := check -alias f := fmt -alias i := install -alias l := lint -alias r := run -alias up := upgrade -alias upt := upgradet - -@default: - just --choose - -build: - go build -ldflags='-s -w' . - -check: - golangci-lint run - -fmt: - gofumpt -w . - -install: - go install -ldflags='-s -w' . - -lint: - golangci-lint run - -run: - go run . - -upgrade: - go get -u ./... - -upgradet: - go get -t -u ./... diff --git a/mise.lock b/mise.lock new file mode 100644 index 0000000..99860e1 --- /dev/null +++ b/mise.lock @@ -0,0 +1,313 @@ +# @generated - this file is auto-generated by `mise lock` https://mise.jdx.dev/dev-tools/mise-lock.html + +[[tools.actionlint]] +version = "1.7.12" +backend = "aqua:rhysd/actionlint" + +[tools.actionlint."platforms.linux-arm64"] +checksum = "sha256:325e971b6ba9bfa504672e29be93c24981eeb1c07576d730e9f7c8805afff0c6" +url = "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/384924897" +provenance = "github-attestations" + +[tools.actionlint."platforms.linux-arm64-musl"] +checksum = "sha256:325e971b6ba9bfa504672e29be93c24981eeb1c07576d730e9f7c8805afff0c6" +url = "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/384924897" +provenance = "github-attestations" + +[tools.actionlint."platforms.linux-x64"] +checksum = "sha256:8aca8db96f1b94770f1b0d72b6dddcb1ebb8123cb3712530b08cc387b349a3d8" +url = "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/384924896" +provenance = "github-attestations" + +[tools.actionlint."platforms.linux-x64-musl"] +checksum = "sha256:8aca8db96f1b94770f1b0d72b6dddcb1ebb8123cb3712530b08cc387b349a3d8" +url = "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/384924896" +provenance = "github-attestations" + +[tools.actionlint."platforms.macos-arm64"] +checksum = "sha256:aba9ced2dee8d27fecca3dc7feb1a7f9a52caefa1eb46f3271ea66b6e0e6953f" +url = "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_darwin_arm64.tar.gz" +url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/384924893" +provenance = "github-attestations" + +[tools.actionlint."platforms.macos-x64"] +checksum = "sha256:5b44c3bc2255115c9b69e30efc0fecdf498fdb63c5d58e17084fd5f16324c644" +url = "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_darwin_amd64.tar.gz" +url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/384924880" +provenance = "github-attestations" + +[tools.actionlint."platforms.windows-x64"] +checksum = "sha256:6e7241b51e6817ea6a047693d8e6fed13b31819c9a0dd6c5a726e1592d22f6e9" +url = "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_windows_amd64.zip" +url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/384924919" +provenance = "github-attestations" + +[[tools.cosign]] +version = "2.5.0" +backend = "aqua:sigstore/cosign" + +[tools.cosign."platforms.linux-arm64"] +checksum = "sha256:080a998f9878f22dafdb9ad54d5b2e2b8e7a38c53527250f9d89a6763a28d545" +url = "https://github.com/sigstore/cosign/releases/download/v2.5.0/cosign-linux-arm64" +url_api = "https://api.github.com/repos/sigstore/cosign/releases/assets/244375255" + +[tools.cosign."platforms.linux-arm64-musl"] +checksum = "sha256:080a998f9878f22dafdb9ad54d5b2e2b8e7a38c53527250f9d89a6763a28d545" +url = "https://github.com/sigstore/cosign/releases/download/v2.5.0/cosign-linux-arm64" +url_api = "https://api.github.com/repos/sigstore/cosign/releases/assets/244375255" + +[tools.cosign."platforms.linux-x64"] +checksum = "sha256:1f6c194dd0891eb345b436bb71ff9f996768355f5e0ce02dde88567029ac2188" +url = "https://github.com/sigstore/cosign/releases/download/v2.5.0/cosign-linux-amd64" +url_api = "https://api.github.com/repos/sigstore/cosign/releases/assets/244375510" + +[tools.cosign."platforms.linux-x64-musl"] +checksum = "sha256:1f6c194dd0891eb345b436bb71ff9f996768355f5e0ce02dde88567029ac2188" +url = "https://github.com/sigstore/cosign/releases/download/v2.5.0/cosign-linux-amd64" +url_api = "https://api.github.com/repos/sigstore/cosign/releases/assets/244375510" + +[tools.cosign."platforms.macos-arm64"] +checksum = "sha256:780da3654d9601367b0d54686ac65cb9716578610cabe292d725c7008de4db85" +url = "https://github.com/sigstore/cosign/releases/download/v2.5.0/cosign-darwin-arm64" +url_api = "https://api.github.com/repos/sigstore/cosign/releases/assets/244375488" + +[tools.cosign."platforms.macos-x64"] +checksum = "sha256:d61cc50f6f32c2b63cb81cd8a935e5dd1be8520d639242031a1102092bee44d4" +url = "https://github.com/sigstore/cosign/releases/download/v2.5.0/cosign-darwin-amd64" +url_api = "https://api.github.com/repos/sigstore/cosign/releases/assets/244375435" + +[tools.cosign."platforms.windows-x64"] +checksum = "sha256:2345667cbcf60767c1a6f678755cbb7465367761084e9d2cbb59ae0cc1a94437" +url = "https://github.com/sigstore/cosign/releases/download/v2.5.0/cosign-windows-amd64.exe" +url_api = "https://api.github.com/repos/sigstore/cosign/releases/assets/244375159" + +[[tools."github:dhth/terminal-control"]] +version = "0.6.0-r1" +backend = "github:dhth/terminal-control" + +[tools."github:dhth/terminal-control".options] +version_prefix = "musl-v" + +[tools."github:dhth/terminal-control"."platforms.linux-x64"] +checksum = "sha256:63ae2cc1e83ac4e79d0ae7d2c606d87215b9831612d7f97440283356c1c03388" +url = "https://github.com/dhth/terminal-control/releases/download/musl-v0.6.0-r1/termctrl-0.6.0-linux-x86_64-musl.tar.gz" +url_api = "https://api.github.com/repos/dhth/terminal-control/releases/assets/513997951" + +[tools."github:dhth/terminal-control"."platforms.linux-x64-musl"] +checksum = "sha256:63ae2cc1e83ac4e79d0ae7d2c606d87215b9831612d7f97440283356c1c03388" +url = "https://github.com/dhth/terminal-control/releases/download/musl-v0.6.0-r1/termctrl-0.6.0-linux-x86_64-musl.tar.gz" +url_api = "https://api.github.com/repos/dhth/terminal-control/releases/assets/513997951" + +[[tools.go]] +version = "1.26.6" +backend = "core:go" + +[tools.go."platforms.linux-arm64"] +checksum = "sha256:d0507e9e9d7fe012aae570108cbd76c15de879e17130ab8cb90d4d7445cb1f2e" +url = "https://dl.google.com/go/go1.26.6.linux-arm64.tar.gz" + +[tools.go."platforms.linux-arm64-musl"] +checksum = "sha256:d0507e9e9d7fe012aae570108cbd76c15de879e17130ab8cb90d4d7445cb1f2e" +url = "https://dl.google.com/go/go1.26.6.linux-arm64.tar.gz" + +[tools.go."platforms.linux-x64"] +checksum = "sha256:708effb774be8237570d0add163225abbdfaf4fca28b2611df167beba4feef89" +url = "https://dl.google.com/go/go1.26.6.linux-amd64.tar.gz" + +[tools.go."platforms.linux-x64-musl"] +checksum = "sha256:708effb774be8237570d0add163225abbdfaf4fca28b2611df167beba4feef89" +url = "https://dl.google.com/go/go1.26.6.linux-amd64.tar.gz" + +[tools.go."platforms.macos-arm64"] +checksum = "sha256:2dc95ce4675829f2df0e86b28bcef3283635902062a5f0580ca659bf570f3204" +url = "https://dl.google.com/go/go1.26.6.darwin-arm64.tar.gz" + +[tools.go."platforms.macos-x64"] +checksum = "sha256:08b65a63f244115121ced6c3b55ad38d801a7442acad5c949a17aad84ae6d684" +url = "https://dl.google.com/go/go1.26.6.darwin-amd64.tar.gz" + +[tools.go."platforms.windows-x64"] +checksum = "sha256:5b6c5b556525810463b5c897b50dc7a82d6a3dc0bfaf55d990a7e9f31d6b2318" +url = "https://dl.google.com/go/go1.26.6.windows-amd64.zip" + +[[tools."go:golang.org/x/vuln/cmd/govulncheck"]] +version = "1.7.0" +backend = "go:golang.org/x/vuln/cmd/govulncheck" + +[[tools.gofumpt]] +version = "0.11.0" +backend = "aqua:mvdan/gofumpt" + +[tools.gofumpt."platforms.linux-arm64"] +checksum = "sha256:9272c2d1738acc1acae33793419e74c69653e70fe56bec4ad9044b12b54715e5" +url = "https://github.com/mvdan/gofumpt/releases/download/v0.11.0/gofumpt_v0.11.0_linux_arm64" +url_api = "https://api.github.com/repos/mvdan/gofumpt/releases/assets/491232873" + +[tools.gofumpt."platforms.linux-arm64-musl"] +checksum = "sha256:9272c2d1738acc1acae33793419e74c69653e70fe56bec4ad9044b12b54715e5" +url = "https://github.com/mvdan/gofumpt/releases/download/v0.11.0/gofumpt_v0.11.0_linux_arm64" +url_api = "https://api.github.com/repos/mvdan/gofumpt/releases/assets/491232873" + +[tools.gofumpt."platforms.linux-x64"] +checksum = "sha256:9f247ec294f5082375c7b062f3ddf48c8212a8711f65a6d75f5129f7fda0d7da" +url = "https://github.com/mvdan/gofumpt/releases/download/v0.11.0/gofumpt_v0.11.0_linux_amd64" +url_api = "https://api.github.com/repos/mvdan/gofumpt/releases/assets/491232932" + +[tools.gofumpt."platforms.linux-x64-musl"] +checksum = "sha256:9f247ec294f5082375c7b062f3ddf48c8212a8711f65a6d75f5129f7fda0d7da" +url = "https://github.com/mvdan/gofumpt/releases/download/v0.11.0/gofumpt_v0.11.0_linux_amd64" +url_api = "https://api.github.com/repos/mvdan/gofumpt/releases/assets/491232932" + +[tools.gofumpt."platforms.macos-arm64"] +checksum = "sha256:18936628f195369a80a129c73ee33d23e39086286dab538781ba826effc7e10b" +url = "https://github.com/mvdan/gofumpt/releases/download/v0.11.0/gofumpt_v0.11.0_darwin_arm64" +url_api = "https://api.github.com/repos/mvdan/gofumpt/releases/assets/491232979" + +[tools.gofumpt."platforms.macos-x64"] +checksum = "sha256:b93b3d2c326196af9fb1ce34a5436a18e7b9a73a795bf42e5b6a542eea88d322" +url = "https://github.com/mvdan/gofumpt/releases/download/v0.11.0/gofumpt_v0.11.0_darwin_amd64" +url_api = "https://api.github.com/repos/mvdan/gofumpt/releases/assets/491232997" + +[tools.gofumpt."platforms.windows-x64"] +checksum = "sha256:e7ae4253344a600f1116e4b5c7d0d0fcc108abbbf383c3d786a530077b4d4622" +url = "https://github.com/mvdan/gofumpt/releases/download/v0.11.0/gofumpt_v0.11.0_windows_amd64.exe" +url_api = "https://api.github.com/repos/mvdan/gofumpt/releases/assets/491232806" + +[[tools.golangci-lint]] +version = "2.12.2" +backend = "aqua:golangci/golangci-lint" + +[tools.golangci-lint."platforms.linux-arm64"] +checksum = "sha256:44cd40a8c76c86755375adfeea52cfd3533cb43d7bd647771e0ae065e166df3a" +url = "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-linux-arm64.tar.gz" +url_api = "https://api.github.com/repos/golangci/golangci-lint/releases/assets/413470996" +provenance = "github-attestations" + +[tools.golangci-lint."platforms.linux-arm64-musl"] +checksum = "sha256:44cd40a8c76c86755375adfeea52cfd3533cb43d7bd647771e0ae065e166df3a" +url = "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-linux-arm64.tar.gz" +url_api = "https://api.github.com/repos/golangci/golangci-lint/releases/assets/413470996" +provenance = "github-attestations" + +[tools.golangci-lint."platforms.linux-x64"] +checksum = "sha256:8df580d2670fed8fa984aac0507099af8df275e665215f5c7a2ae3943893a553" +url = "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-linux-amd64.tar.gz" +url_api = "https://api.github.com/repos/golangci/golangci-lint/releases/assets/413471054" +provenance = "github-attestations" + +[tools.golangci-lint."platforms.linux-x64-musl"] +checksum = "sha256:8df580d2670fed8fa984aac0507099af8df275e665215f5c7a2ae3943893a553" +url = "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-linux-amd64.tar.gz" +url_api = "https://api.github.com/repos/golangci/golangci-lint/releases/assets/413471054" +provenance = "github-attestations" + +[tools.golangci-lint."platforms.macos-arm64"] +checksum = "sha256:a9c54498731b3128f79e090be6110f3e5fffccc617b08142ed244d4126c73f29" +url = "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-darwin-arm64.tar.gz" +url_api = "https://api.github.com/repos/golangci/golangci-lint/releases/assets/413470950" +provenance = "github-attestations" + +[tools.golangci-lint."platforms.macos-x64"] +checksum = "sha256:f6f06d94b6241521c53d15450c5209b028270bf966f842afb11c030c79f5bc16" +url = "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-darwin-amd64.tar.gz" +url_api = "https://api.github.com/repos/golangci/golangci-lint/releases/assets/413470980" +provenance = "github-attestations" + +[tools.golangci-lint."platforms.windows-x64"] +checksum = "sha256:bd42e3ebc8cb4ececb86941983baaf1dc221bbb04d838e94ce63b49cc91e02bb" +url = "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-windows-amd64.zip" +url_api = "https://api.github.com/repos/golangci/golangci-lint/releases/assets/413471017" +provenance = "github-attestations" + +[[tools.goreleaser]] +version = "2.14.1" +backend = "aqua:goreleaser/goreleaser" + +[tools.goreleaser."platforms.linux-arm64"] +checksum = "sha256:a84d3b27f052c12ad5c8342d7caf1450a7174a305730aed21d72db09301e49a5" +url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/goreleaser/goreleaser/releases/assets/362259739" +provenance = "github-attestations" + +[tools.goreleaser."platforms.linux-arm64-musl"] +checksum = "sha256:a84d3b27f052c12ad5c8342d7caf1450a7174a305730aed21d72db09301e49a5" +url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/goreleaser/goreleaser/releases/assets/362259739" +provenance = "github-attestations" + +[tools.goreleaser."platforms.linux-x64"] +checksum = "sha256:2df975a7acbfdeaf888d596cab0024d48ec7fb7d747e1d08b90948b791f40a5f" +url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Linux_x86_64.tar.gz" +url_api = "https://api.github.com/repos/goreleaser/goreleaser/releases/assets/362259765" +provenance = "github-attestations" + +[tools.goreleaser."platforms.linux-x64-musl"] +checksum = "sha256:2df975a7acbfdeaf888d596cab0024d48ec7fb7d747e1d08b90948b791f40a5f" +url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Linux_x86_64.tar.gz" +url_api = "https://api.github.com/repos/goreleaser/goreleaser/releases/assets/362259765" +provenance = "github-attestations" + +[tools.goreleaser."platforms.macos-arm64"] +checksum = "sha256:9f2e47f847b4f4177376fc6aa6914fbc7f673f59720076747e738b578c2e896e" +url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Darwin_all.tar.gz" +url_api = "https://api.github.com/repos/goreleaser/goreleaser/releases/assets/362259772" +provenance = "github-attestations" + +[tools.goreleaser."platforms.macos-x64"] +checksum = "sha256:9f2e47f847b4f4177376fc6aa6914fbc7f673f59720076747e738b578c2e896e" +url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Darwin_all.tar.gz" +url_api = "https://api.github.com/repos/goreleaser/goreleaser/releases/assets/362259772" +provenance = "github-attestations" + +[tools.goreleaser."platforms.windows-x64"] +checksum = "sha256:d7a3d8ba795e97ab8c4f8003630d300da164adf21fde5a4049440c20f15c3137" +url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Windows_x86_64.zip" +url_api = "https://api.github.com/repos/goreleaser/goreleaser/releases/assets/362259806" +provenance = "github-attestations" + +[[tools."npm:@kitlangton/terminal-control-darwin-arm64"]] +version = "0.6.0" +backend = "npm:@kitlangton/terminal-control-darwin-arm64" + +[[tools.yamlfmt]] +version = "0.21.0" +backend = "aqua:google/yamlfmt" + +[tools.yamlfmt."platforms.linux-arm64"] +checksum = "sha256:5b2689c963b177271330c5ce8ca7396751107e5a826be46f03d2cb9b6f0c7784" +url = "https://github.com/google/yamlfmt/releases/download/v0.21.0/yamlfmt_0.21.0_Linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/google/yamlfmt/releases/assets/336650208" + +[tools.yamlfmt."platforms.linux-arm64-musl"] +checksum = "sha256:5b2689c963b177271330c5ce8ca7396751107e5a826be46f03d2cb9b6f0c7784" +url = "https://github.com/google/yamlfmt/releases/download/v0.21.0/yamlfmt_0.21.0_Linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/google/yamlfmt/releases/assets/336650208" + +[tools.yamlfmt."platforms.linux-x64"] +checksum = "sha256:1f300d9257b232bb3b541d7fb1b0e6b3c121bcbab381c86cd38cb8722be8a566" +url = "https://github.com/google/yamlfmt/releases/download/v0.21.0/yamlfmt_0.21.0_Linux_x86_64.tar.gz" +url_api = "https://api.github.com/repos/google/yamlfmt/releases/assets/336650203" + +[tools.yamlfmt."platforms.linux-x64-musl"] +checksum = "sha256:1f300d9257b232bb3b541d7fb1b0e6b3c121bcbab381c86cd38cb8722be8a566" +url = "https://github.com/google/yamlfmt/releases/download/v0.21.0/yamlfmt_0.21.0_Linux_x86_64.tar.gz" +url_api = "https://api.github.com/repos/google/yamlfmt/releases/assets/336650203" + +[tools.yamlfmt."platforms.macos-arm64"] +checksum = "sha256:4b417ecb94339d57e4c122ecc948c1a00fe328b5853266de9806e652a92858fa" +url = "https://github.com/google/yamlfmt/releases/download/v0.21.0/yamlfmt_0.21.0_Darwin_arm64.tar.gz" +url_api = "https://api.github.com/repos/google/yamlfmt/releases/assets/336650209" + +[tools.yamlfmt."platforms.macos-x64"] +checksum = "sha256:060e943bcb8583c456810eb1ff4721b4f46c4a0c1a4432449d5dc3bbfe29a22b" +url = "https://github.com/google/yamlfmt/releases/download/v0.21.0/yamlfmt_0.21.0_Darwin_x86_64.tar.gz" +url_api = "https://api.github.com/repos/google/yamlfmt/releases/assets/336650207" + +[tools.yamlfmt."platforms.windows-x64"] +checksum = "sha256:07f80ce5d741eb4b0a9380ac78a19c7cb5bd44e2a9a47a5a04839e3ba54dd463" +url = "https://github.com/google/yamlfmt/releases/download/v0.21.0/yamlfmt_0.21.0_Windows_x86_64.tar.gz" +url_api = "https://api.github.com/repos/google/yamlfmt/releases/assets/336650206" diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..a16aff3 --- /dev/null +++ b/mise.toml @@ -0,0 +1,106 @@ +[settings] +idiomatic_version_file_enable_tools = ["go"] +task.run_auto_install = false + +[tools] +actionlint = "1.7.12" +cosign = "2.5.0" +"go:golang.org/x/vuln/cmd/govulncheck" = "latest" +gofumpt = "0.11.0" +golangci-lint = "2.12.2" +goreleaser = "2.14.1" +"npm:@kitlangton/terminal-control-darwin-arm64" = { version = "0.6.0", os = ["macos/arm64"] } +yamlfmt = "0.21.0" + +[tools."github:dhth/terminal-control"] +version = "0.6.0-r1" +version_prefix = "musl-v" +os = ["linux/x64"] + +[tasks.all] +alias = "a" +description = "Format, lint, test, and build" +run = [ + { task = "fmt" }, + { task = "lint" }, + { task = "test" }, + { task = "build" }, +] + +[tasks.run] +alias = "r" +description = "Run the application" +run = "go run ." + +[tasks.build] +alias = "b" +description = "Build the application" +run = 'go build -ldflags "-w -s" .' + +[tasks.fmt] +alias = "f" +description = "Format Go source files" +run = "gofumpt -l -w ." + +[tasks.install] +alias = "i" +description = "Install the application" +run = 'go install -ldflags "-w -s" .' + +[tasks.lint] +alias = ["l", "check", "c"] +description = "Lint the codebase" +run = "golangci-lint run" + +[tasks."lint:actions"] +alias = ["l:a"] +description = "Lint GitHub Actions workflows" +run = "actionlint" + +[tasks."lint:yaml"] +alias = ["l:y"] +description = "Lint YAML files" +run = ''' +yamlfmt \ + -lint \ + -quiet \ + -formatter 'retain_line_breaks_single=true' \ + $(git ls-files '*.yml' '*.yaml') +''' + +[tasks.test] +alias = "t" +description = "Run all tests" +run = "go test ./..." + +[tasks.update-snapshots] +alias = "us" +description = "Update test snapshots" +env = { UPDATE_SNAPS = "true" } +run = "go test -count=1 ./..." + +[tasks.upgrade] +alias = "up" +description = "Upgrade Go dependencies" +run = "go get -u ./..." + +[tasks.upgradet] +alias = "upt" +description = "Upgrade Go test dependencies" +run = "go get -t -u ./..." + +[tasks.vulncheck] +description = "Check for known vulnerabilities" +run = "govulncheck ./..." + +[tasks."release:check"] +description = "Validate the GoReleaser configuration" +run = "goreleaser check" + +[tasks."release:build"] +description = "Build release artifacts without publishing" +run = "goreleaser build --snapshot" + +[tasks.release] +description = "Create and publish a release" +run = "goreleaser release --clean"