Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
eec3e8d
feat(core): Start(name) with active-state refresh
ceballosiker May 20, 2026
ef3e21e
polish(core): wrap provider.Start error with node name
ceballosiker May 20, 2026
b5581bd
feat(core): Stop(name) with active-state refresh
ceballosiker May 20, 2026
c1ab03b
feat(core): Destroy(name) with TS device cleanup and state clear
ceballosiker May 20, 2026
2a4b87e
docs(examples): annotated reference config.toml + parse test
ceballosiker May 20, 2026
476facd
feat(cli): root command + global flags + buildCore helper
ceballosiker May 20, 2026
8119a70
feat(cli): exitnode up (idempotent provision)
ceballosiker May 20, 2026
e714ce9
feat(cli): exitnode down [--destroy]
ceballosiker May 20, 2026
882cd1b
feat(cli): exitnode rotate [--region]
ceballosiker May 20, 2026
8d401ff
feat(cli): exitnode list [--json]
ceballosiker May 20, 2026
a4405bc
feat(cli): exitnode status [--json]
ceballosiker May 20, 2026
2137acd
feat(cli): exitnode health (exits 2 on probe fail)
ceballosiker May 20, 2026
62d25e8
feat(cli): exitnode pfsense sync
ceballosiker May 20, 2026
d79f767
feat(cli): exitnode cost [--period]
ceballosiker May 20, 2026
491d5fc
feat(mcp): server scaffolding + buildCore helper
ceballosiker May 20, 2026
06aec1c
feat(mcp): wire all 10 tools to core methods
ceballosiker May 20, 2026
767c4be
docs(examples): mcp.json snippet for Claude Desktop / OpenClaw
ceballosiker May 20, 2026
a758b3c
ci: add github actions workflow (vet, lint, test, cross-build matrix)
ceballosiker May 20, 2026
a05eaa8
ci(release): goreleaser config + release workflow + --version flag
ceballosiker May 20, 2026
0068436
polish(mcp): wire version var into Implementation.Version
ceballosiker May 20, 2026
bdd7aa2
docs(readme): prereqs/install/configure/mcp/troubleshooting sections
ceballosiker May 20, 2026
0db191e
chore: go mod tidy (Plan 3 closes out staged indirects)
ceballosiker May 20, 2026
9244a9f
docs(readme): drop 3-plan roadmap; describe v0.1 surface + deferred i…
ceballosiker May 20, 2026
f7bd29f
docs(readme): add personal-project disclaimer
ceballosiker May 20, 2026
1e536f4
ci(lint): pin golangci-lint to v2.x (v1.x is built with go 1.24 < 1.25)
ceballosiker May 20, 2026
4b519c4
ci(lint): upgrade to golangci-lint v2.12 (action v9, new v2 config)
ceballosiker May 20, 2026
d83bf59
fix(lint): address v2 staticcheck/errcheck/gofmt findings
ceballosiker May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: ci

on:
push:
branches: [main, develop]
pull_request:

permissions:
contents: read

jobs:
test:
name: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.25'
check-latest: true
cache: true
- run: go vet ./...
- run: go test -race -short ./...

lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.25'
cache: true
- uses: golangci/golangci-lint-action@v9
with:
# golangci-lint v1.x was built with Go 1.24 and refuses to analyze
# source targeting go 1.25 (which our go.mod pins). Pin a recent
# v2.x; the action's @v6/@v7/@v8 don't speak v2 config format.
version: v2.12.2
args: --timeout=5m

build-matrix:
name: build ${{ matrix.goos }}/${{ matrix.goarch }}
runs-on: ubuntu-latest
strategy:
matrix:
goos: [linux, darwin]
goarch: [amd64, arm64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.25'
cache: true
- name: build exitnode
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: '0'
run: go build -trimpath -o /dev/null ./cmd/exitnode
- name: build exitnode-mcp
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: '0'
run: go build -trimpath -o /dev/null ./cmd/exitnode-mcp
26 changes: 26 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: release

on:
push:
tags: ['v*']

permissions:
contents: write

jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-go@v5
with:
go-version: '1.25'
cache: true
- uses: goreleaser/goreleaser-action@v6
with:
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
20 changes: 0 additions & 20 deletions .golangci.yaml

This file was deleted.

29 changes: 29 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: "2"

# Standard preset = errcheck, govet, ineffassign, staticcheck, unused.
# Matches what golangci-lint v1 enabled implicitly. Add more linters
# here only after the standard set is consistently green.
linters:
default: standard
settings:
errcheck:
# Stdout-write errors are not meaningfully recoverable in this CLI;
# do not require every fmt.Fprint* / Fprintln / Fprintf call to be
# blank-assigned.
exclude-functions:
- fmt.Fprint
- fmt.Fprintf
- fmt.Fprintln
exclusions:
rules:
# Test files routinely defer Close() on stores/servers without checking
# the error — the goroutine is already torn down and the next test will
# surface any real problem.
- path: _test\.go
linters:
- errcheck

formatters:
enable:
- gofmt
- goimports
64 changes: 64 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
version: 2

project_name: exitnode

before:
hooks:
- go mod download

builds:
- id: exitnode
main: ./cmd/exitnode
binary: exitnode
env:
- CGO_ENABLED=0
goos: [linux, darwin]
goarch: [amd64, arm64]
flags: [-trimpath]
ldflags:
- -s -w
- -X main.version={{.Version}}
- -X main.commit={{.Commit}}
- -X main.date={{.Date}}
- id: exitnode-mcp
main: ./cmd/exitnode-mcp
binary: exitnode-mcp
env:
- CGO_ENABLED=0
goos: [linux, darwin]
goarch: [amd64, arm64]
flags: [-trimpath]
ldflags:
- -s -w
- -X main.version={{.Version}}

archives:
- id: default
formats: [tar.gz]
name_template: >-
{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}
files:
- LICENSE
- README.md
- examples/config.toml
- examples/mcp.json
- scripts/install.sh

checksum:
name_template: 'checksums.txt'
algorithm: sha256

changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'
- '^chore:'

release:
github:
owner: ceballosiker
name: exit-node
draft: false
prerelease: auto
Loading
Loading