feat(build): add multi-platform release targets, Homebrew formula, and INSTALL.md
ci / vet, staticcheck, test, build (push) Successful in 2m13s
ci / vet, staticcheck, test, build (push) Successful in 2m13s
Taskfile: - Add build-linux-arm64, build-darwin-amd64, build-darwin-arm64 targets - Rename build-linux to build-linux-amd64 (keep build-linux alias) - Rename Windows output to glint-<tag>-windows-amd64.exe for consistency - Add build-release task that builds all five platforms in one shot Formula/glint.rb: - Homebrew source-build formula; depends_on "go" => :build - tap: brew tap k3nny/glint https://github.com/k3nny/homebrew-glint - Includes basic test block (--version + lint a trivial pipeline) INSTALL.md: - Pre-built binary download instructions for all five platforms - Homebrew tap setup and formula update procedure - go install one-liner - Link to README integrations section Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
class Glint < Formula
|
||||||
|
desc "Local linter and validator for .gitlab-ci.yml pipelines"
|
||||||
|
homepage "https://git.k3nny.fr/k3nny/glint"
|
||||||
|
url "https://git.k3nny.fr/k3nny/glint/archive/v0.3.1.tar.gz"
|
||||||
|
# Update sha256 on each release: sha256sum glint-vX.Y.Z.tar.gz
|
||||||
|
sha256 ""
|
||||||
|
license "Apache-2.0"
|
||||||
|
head "https://git.k3nny.fr/k3nny/glint.git", branch: "main"
|
||||||
|
|
||||||
|
depends_on "go" => :build
|
||||||
|
|
||||||
|
def install
|
||||||
|
system "go", "build",
|
||||||
|
"-ldflags", "-X main.version=#{version}",
|
||||||
|
"-o", bin/"glint",
|
||||||
|
"./cmd/glint/..."
|
||||||
|
end
|
||||||
|
|
||||||
|
test do
|
||||||
|
assert_match version.to_s, shell_output("#{bin}/glint --version")
|
||||||
|
(testpath/".gitlab-ci.yml").write <<~YAML
|
||||||
|
stages: [build]
|
||||||
|
build-job:
|
||||||
|
stage: build
|
||||||
|
script: echo ok
|
||||||
|
YAML
|
||||||
|
system bin/"glint", "check", ".gitlab-ci.yml"
|
||||||
|
end
|
||||||
|
end
|
||||||
+139
@@ -0,0 +1,139 @@
|
|||||||
|
# Installing glint
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Go 1.21 or later (for building from source)
|
||||||
|
- Any 64-bit Linux, macOS, or Windows system (for pre-built binaries)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 1 — Build from source
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.k3nny.fr/k3nny/glint
|
||||||
|
cd glint
|
||||||
|
go build -o glint ./cmd/glint/...
|
||||||
|
sudo mv glint /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
Or with [Task](https://taskfile.dev):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
task build
|
||||||
|
sudo mv glint /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 2 — Download a pre-built binary
|
||||||
|
|
||||||
|
Pre-built binaries are attached to each [release](https://git.k3nny.fr/k3nny/glint/releases).
|
||||||
|
|
||||||
|
| Platform | File |
|
||||||
|
|----------|------|
|
||||||
|
| Linux x86-64 | `glint-vX.Y.Z-linux-amd64` |
|
||||||
|
| Linux ARM64 | `glint-vX.Y.Z-linux-arm64` |
|
||||||
|
| macOS Intel | `glint-vX.Y.Z-darwin-amd64` |
|
||||||
|
| macOS Apple Silicon | `glint-vX.Y.Z-darwin-arm64` |
|
||||||
|
| Windows x86-64 | `glint-vX.Y.Z-windows-amd64.exe` |
|
||||||
|
|
||||||
|
### Linux (amd64)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
VERSION=v0.3.1
|
||||||
|
curl -Lo glint https://git.k3nny.fr/k3nny/glint/releases/download/${VERSION}/glint-${VERSION}-linux-amd64
|
||||||
|
chmod +x glint
|
||||||
|
sudo mv glint /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Linux (ARM64 — Raspberry Pi 4, AWS Graviton, …)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
VERSION=v0.3.1
|
||||||
|
curl -Lo glint https://git.k3nny.fr/k3nny/glint/releases/download/${VERSION}/glint-${VERSION}-linux-arm64
|
||||||
|
chmod +x glint
|
||||||
|
sudo mv glint /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### macOS (Apple Silicon — M1/M2/M3)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
VERSION=v0.3.1
|
||||||
|
curl -Lo glint https://git.k3nny.fr/k3nny/glint/releases/download/${VERSION}/glint-${VERSION}-darwin-arm64
|
||||||
|
chmod +x glint
|
||||||
|
sudo mv glint /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### macOS (Intel)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
VERSION=v0.3.1
|
||||||
|
curl -Lo glint https://git.k3nny.fr/k3nny/glint/releases/download/${VERSION}/glint-${VERSION}-darwin-amd64
|
||||||
|
chmod +x glint
|
||||||
|
sudo mv glint /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verify the installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
glint --version
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 3 — Homebrew (macOS and Linux)
|
||||||
|
|
||||||
|
A Homebrew tap is available at `k3nny/glint`.
|
||||||
|
|
||||||
|
> **First-time setup:** create a GitHub repository named `homebrew-glint`
|
||||||
|
> under your account and copy [`Formula/glint.rb`](Formula/glint.rb) into it.
|
||||||
|
> Users then install via the tap as shown below.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew tap k3nny/glint https://github.com/k3nny/homebrew-glint
|
||||||
|
brew install glint
|
||||||
|
```
|
||||||
|
|
||||||
|
To upgrade:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew upgrade glint
|
||||||
|
```
|
||||||
|
|
||||||
|
The formula builds glint from source using Go, which Homebrew provides
|
||||||
|
automatically as a build dependency. No pre-built binary download is needed.
|
||||||
|
|
||||||
|
### Updating the formula on a new release
|
||||||
|
|
||||||
|
After tagging a new release, update `Formula/glint.rb`:
|
||||||
|
|
||||||
|
1. Compute the tarball checksum:
|
||||||
|
```bash
|
||||||
|
curl -sL https://git.k3nny.fr/k3nny/glint/archive/vX.Y.Z.tar.gz | sha256sum
|
||||||
|
```
|
||||||
|
2. Update `url` and `sha256` in the formula.
|
||||||
|
3. Commit and push to `homebrew-glint`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 4 — Go install
|
||||||
|
|
||||||
|
If you already have Go 1.21+:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go install git.k3nny.fr/k3nny/glint/cmd/glint@latest
|
||||||
|
```
|
||||||
|
|
||||||
|
The binary is placed in `$(go env GOPATH)/bin/`. Add that directory to your
|
||||||
|
`PATH` if it is not already there:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export PATH="$PATH:$(go env GOPATH)/bin"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integrations
|
||||||
|
|
||||||
|
For editor and CI integrations (pre-commit hook, GitLab CI component, GitHub
|
||||||
|
Actions, VS Code extension) see [README.md](README.md#integrations).
|
||||||
@@ -27,25 +27,30 @@ A local tool to validate and lint `.gitlab-ci.yml` pipelines without needing a G
|
|||||||
|
|
||||||
See [FEATURES.md](FEATURES.md) for the complete feature reference and lint rules table, and [ROADMAP.md](ROADMAP.md) for planned improvements.
|
See [FEATURES.md](FEATURES.md) for the complete feature reference and lint rules table, and [ROADMAP.md](ROADMAP.md) for planned improvements.
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
- Go 1.21 or later
|
|
||||||
- [Task](https://taskfile.dev) (optional, for development tasks)
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
See [INSTALL.md](INSTALL.md) for all options: pre-built binaries (Linux amd64/arm64, macOS Intel/Apple Silicon, Windows), Homebrew tap, and building from source.
|
||||||
|
|
||||||
|
Quick start (Linux/macOS, building from source):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.k3nny.fr/k3nny/glint
|
git clone https://git.k3nny.fr/k3nny/glint
|
||||||
cd glint
|
cd glint
|
||||||
go build -o glint ./cmd/glint/...
|
go build -o glint ./cmd/glint/...
|
||||||
|
sudo mv glint /usr/local/bin/
|
||||||
```
|
```
|
||||||
|
|
||||||
Or with Task:
|
Homebrew:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
task build
|
brew tap k3nny/glint https://github.com/k3nny/homebrew-glint
|
||||||
|
brew install glint
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Go 1.21 or later (when building from source). Pre-built binaries have no runtime dependencies.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -148,8 +153,12 @@ task changelog-next # preview unreleased section (dry-run, no file written)
|
|||||||
task ext-install # install VS Code extension npm dependencies
|
task ext-install # install VS Code extension npm dependencies
|
||||||
task ext-compile # compile the VS Code extension TypeScript source
|
task ext-compile # compile the VS Code extension TypeScript source
|
||||||
task ext-package # package the VS Code extension as a .vsix
|
task ext-package # package the VS Code extension as a .vsix
|
||||||
task build-windows # cross-compile for Windows x64 (requires a tagged commit → glint-<tag>.exe)
|
task build-linux-amd64 # cross-compile for Linux x86-64 (requires a tagged commit)
|
||||||
task build-linux # cross-compile for Linux x64 (requires a tagged commit → glint-<tag>-linux-amd64)
|
task build-linux-arm64 # cross-compile for Linux ARM64 (requires a tagged commit)
|
||||||
|
task build-darwin-amd64 # cross-compile for macOS Intel (requires a tagged commit)
|
||||||
|
task build-darwin-arm64 # cross-compile for macOS Apple Silicon (requires a tagged commit)
|
||||||
|
task build-windows # cross-compile for Windows x86-64 (requires a tagged commit)
|
||||||
|
task build-release # build all platform binaries at once (requires a tagged commit)
|
||||||
task clean # remove build artifacts
|
task clean # remove build artifacts
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+77
-19
@@ -145,30 +145,15 @@ tasks:
|
|||||||
- task: build
|
- task: build
|
||||||
- task: validate
|
- task: validate
|
||||||
|
|
||||||
build-windows:
|
build-linux-amd64:
|
||||||
desc: Build the glint binary for Windows x64 (requires a tagged commit)
|
desc: Build the glint binary for Linux x86-64 (requires a tagged commit)
|
||||||
|
aliases: [build-linux]
|
||||||
vars:
|
vars:
|
||||||
TAG:
|
TAG:
|
||||||
sh: git describe --tags --exact-match
|
sh: git describe --tags --exact-match
|
||||||
preconditions:
|
preconditions:
|
||||||
- sh: git describe --tags --exact-match
|
- sh: git describe --tags --exact-match
|
||||||
msg: "Current commit is not tagged — Windows build requires a git tag"
|
msg: "Current commit is not tagged — release build requires a git tag"
|
||||||
cmds:
|
|
||||||
- "GOOS=windows GOARCH=amd64 {{.GO}} build -ldflags \"-X main.version={{.TAG}}\" -o {{.BINARY}}-{{.TAG}}.exe ./cmd/glint/..."
|
|
||||||
sources:
|
|
||||||
- "**/*.go"
|
|
||||||
- go.mod
|
|
||||||
generates:
|
|
||||||
- "{{.BINARY}}-{{.TAG}}.exe"
|
|
||||||
|
|
||||||
build-linux:
|
|
||||||
desc: Build the glint binary for Linux x64 (requires a tagged commit)
|
|
||||||
vars:
|
|
||||||
TAG:
|
|
||||||
sh: git describe --tags --exact-match
|
|
||||||
preconditions:
|
|
||||||
- sh: git describe --tags --exact-match
|
|
||||||
msg: "Current commit is not tagged — Linux build requires a git tag"
|
|
||||||
cmds:
|
cmds:
|
||||||
- "GOOS=linux GOARCH=amd64 {{.GO}} build -ldflags \"-X main.version={{.TAG}}\" -o {{.BINARY}}-{{.TAG}}-linux-amd64 ./cmd/glint/..."
|
- "GOOS=linux GOARCH=amd64 {{.GO}} build -ldflags \"-X main.version={{.TAG}}\" -o {{.BINARY}}-{{.TAG}}-linux-amd64 ./cmd/glint/..."
|
||||||
sources:
|
sources:
|
||||||
@@ -177,6 +162,79 @@ tasks:
|
|||||||
generates:
|
generates:
|
||||||
- "{{.BINARY}}-{{.TAG}}-linux-amd64"
|
- "{{.BINARY}}-{{.TAG}}-linux-amd64"
|
||||||
|
|
||||||
|
build-linux-arm64:
|
||||||
|
desc: Build the glint binary for Linux ARM64 (requires a tagged commit)
|
||||||
|
vars:
|
||||||
|
TAG:
|
||||||
|
sh: git describe --tags --exact-match
|
||||||
|
preconditions:
|
||||||
|
- sh: git describe --tags --exact-match
|
||||||
|
msg: "Current commit is not tagged — release build requires a git tag"
|
||||||
|
cmds:
|
||||||
|
- "GOOS=linux GOARCH=arm64 {{.GO}} build -ldflags \"-X main.version={{.TAG}}\" -o {{.BINARY}}-{{.TAG}}-linux-arm64 ./cmd/glint/..."
|
||||||
|
sources:
|
||||||
|
- "**/*.go"
|
||||||
|
- go.mod
|
||||||
|
generates:
|
||||||
|
- "{{.BINARY}}-{{.TAG}}-linux-arm64"
|
||||||
|
|
||||||
|
build-darwin-amd64:
|
||||||
|
desc: Build the glint binary for macOS Intel (requires a tagged commit)
|
||||||
|
vars:
|
||||||
|
TAG:
|
||||||
|
sh: git describe --tags --exact-match
|
||||||
|
preconditions:
|
||||||
|
- sh: git describe --tags --exact-match
|
||||||
|
msg: "Current commit is not tagged — release build requires a git tag"
|
||||||
|
cmds:
|
||||||
|
- "GOOS=darwin GOARCH=amd64 {{.GO}} build -ldflags \"-X main.version={{.TAG}}\" -o {{.BINARY}}-{{.TAG}}-darwin-amd64 ./cmd/glint/..."
|
||||||
|
sources:
|
||||||
|
- "**/*.go"
|
||||||
|
- go.mod
|
||||||
|
generates:
|
||||||
|
- "{{.BINARY}}-{{.TAG}}-darwin-amd64"
|
||||||
|
|
||||||
|
build-darwin-arm64:
|
||||||
|
desc: Build the glint binary for macOS Apple Silicon (requires a tagged commit)
|
||||||
|
vars:
|
||||||
|
TAG:
|
||||||
|
sh: git describe --tags --exact-match
|
||||||
|
preconditions:
|
||||||
|
- sh: git describe --tags --exact-match
|
||||||
|
msg: "Current commit is not tagged — release build requires a git tag"
|
||||||
|
cmds:
|
||||||
|
- "GOOS=darwin GOARCH=arm64 {{.GO}} build -ldflags \"-X main.version={{.TAG}}\" -o {{.BINARY}}-{{.TAG}}-darwin-arm64 ./cmd/glint/..."
|
||||||
|
sources:
|
||||||
|
- "**/*.go"
|
||||||
|
- go.mod
|
||||||
|
generates:
|
||||||
|
- "{{.BINARY}}-{{.TAG}}-darwin-arm64"
|
||||||
|
|
||||||
|
build-windows:
|
||||||
|
desc: Build the glint binary for Windows x86-64 (requires a tagged commit)
|
||||||
|
vars:
|
||||||
|
TAG:
|
||||||
|
sh: git describe --tags --exact-match
|
||||||
|
preconditions:
|
||||||
|
- sh: git describe --tags --exact-match
|
||||||
|
msg: "Current commit is not tagged — release build requires a git tag"
|
||||||
|
cmds:
|
||||||
|
- "GOOS=windows GOARCH=amd64 {{.GO}} build -ldflags \"-X main.version={{.TAG}}\" -o {{.BINARY}}-{{.TAG}}-windows-amd64.exe ./cmd/glint/..."
|
||||||
|
sources:
|
||||||
|
- "**/*.go"
|
||||||
|
- go.mod
|
||||||
|
generates:
|
||||||
|
- "{{.BINARY}}-{{.TAG}}-windows-amd64.exe"
|
||||||
|
|
||||||
|
build-release:
|
||||||
|
desc: Build release binaries for all supported platforms (requires a tagged commit)
|
||||||
|
cmds:
|
||||||
|
- task: build-linux-amd64
|
||||||
|
- task: build-linux-arm64
|
||||||
|
- task: build-darwin-amd64
|
||||||
|
- task: build-darwin-arm64
|
||||||
|
- task: build-windows
|
||||||
|
|
||||||
fuzz:
|
fuzz:
|
||||||
desc: "Run all fuzz targets (set FUZZ_TIME=60s to control per-target duration, default 30s)"
|
desc: "Run all fuzz targets (set FUZZ_TIME=60s to control per-target duration, default 30s)"
|
||||||
cmds:
|
cmds:
|
||||||
|
|||||||
Reference in New Issue
Block a user