Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
d5b64bf
Fix search to be cross-board by default
waynemsmith Mar 28, 2026
dc254dd
Add test: search does not inject default board
waynemsmith Mar 28, 2026
d022b45
Assert call count before indexing in search test
waynemsmith Mar 28, 2026
36b2690
Add tests for cross-board --tag and --assignee search
waynemsmith Mar 29, 2026
c9c2d91
Remove redundant searchBoard assignments in tests
waynemsmith Mar 29, 2026
b3a72ba
Merge pull request #114 from Concurrent-Systems/fix-search-default-board
robzolkos Mar 30, 2026
5ab0d87
ci: bump the github-actions group with 3 updates
dependabot[bot] Mar 30, 2026
0a58eab
Improve CLI help and human output UX
robzolkos Apr 2, 2026
0c5812a
Avoid deprecated strings.Title in humanized fields
robzolkos Apr 2, 2026
b00d89b
Fix lint issues in help output changes
robzolkos Apr 2, 2026
0d10961
Refine CLI help headings and root help layout
robzolkos Apr 2, 2026
9a56d29
Match Basecamp CLI example styling
robzolkos Apr 2, 2026
5a76438
Format root command definition
robzolkos Apr 2, 2026
c5e95ee
Polish command help usage and commands docs
robzolkos Apr 2, 2026
5f3a54a
Redact signup secrets from human output
robzolkos Apr 2, 2026
3b83561
Refine signup human output after review
robzolkos Apr 2, 2026
799540b
Fix root help flags and command-specific usage hints
robzolkos Apr 2, 2026
b18ab35
Merge pull request #117 from basecamp/ux/cli-help-output-polish
robzolkos Apr 2, 2026
291b655
Add built-in --jq flag via gojq
robzolkos Mar 13, 2026
543fd7c
Address PR review feedback
robzolkos Mar 13, 2026
e411a3b
Pass error envelopes through jqWriter unfiltered
robzolkos Mar 13, 2026
596d96b
Add jq error types, early validation, env access, and compact output
robzolkos Mar 14, 2026
69fd551
Reject --jq for version command, output plain text
robzolkos Mar 14, 2026
41df91a
Address PR review feedback
robzolkos Mar 14, 2026
d807623
Address PR review feedback
robzolkos Mar 14, 2026
d9c2cb8
Compile jq expression once, reuse in writer
robzolkos Mar 14, 2026
8770751
Deduplicate jq compilation logic
robzolkos Mar 14, 2026
99875a2
Fix jq error bypass to use resolved format and outWriter
robzolkos Mar 14, 2026
f3a568a
Fall back to JSON format when resolveFormat fails in jq error bypass
robzolkos Mar 14, 2026
4c53371
Fix commands help text after rebase
robzolkos Apr 2, 2026
0db6008
Clarify jq JSON-only semantics
robzolkos Apr 2, 2026
b2cc641
Document jq command exceptions in skill docs
robzolkos Apr 2, 2026
f829257
Fix jq error propagation, restore structured version output, and reje…
robzolkos Apr 2, 2026
2d64393
Rename jq output error tracker for lint
robzolkos Apr 2, 2026
bbf6372
Clarify --jq skill command exception in docs
robzolkos Apr 2, 2026
094e6b0
Merge pull request #101 from basecamp/rz/built-in-jq
robzolkos Apr 3, 2026
a4897de
ci: fix setup-go version comment
robzolkos Apr 3, 2026
1baffa5
Merge pull request #116 from basecamp/dependabot/github_actions/githu…
robzolkos Apr 3, 2026
a6eee5b
deps: bump the go-dependencies group across 1 directory with 2 updates
dependabot[bot] Apr 3, 2026
4daab31
test: regenerate surface snapshot with CLI UX
robzolkos Apr 3, 2026
1c416b0
test: handle arg entries in surface parser
robzolkos Apr 3, 2026
39d134e
Merge pull request #115 from basecamp/dependabot/go_modules/go-depend…
robzolkos Apr 3, 2026
4491c88
Align skill installation with basecamp-cli
robzolkos Apr 3, 2026
220176d
Clarify fizzy skill interactive behavior
robzolkos Apr 3, 2026
feeaa05
Fix PR review follow-ups for skill install
robzolkos Apr 3, 2026
9b67011
Merge pull request #119 from basecamp/chore/align-skill-install-with-…
robzolkos Apr 3, 2026
052cd1a
Refine root and commands UX
robzolkos Apr 3, 2026
1546b59
Remove unused root banner helper
robzolkos Apr 3, 2026
acc3975
Remove redundant quick-start profile assignment
robzolkos Apr 3, 2026
221a565
Merge pull request #120 from basecamp/fizzy-root-ux
robzolkos Apr 3, 2026
1240e76
ci: bump the github-actions group with 3 updates
dependabot[bot] Apr 6, 2026
c7b4f8f
Add doctor and config diagnostics commands
robzolkos Apr 7, 2026
12ad2e3
Fix doctor --all-profiles and config show --verbose diagnostics bugs
robzolkos Apr 7, 2026
ed7c533
Merge pull request #123 from basecamp/feature/fizzy-doctor
robzolkos Apr 7, 2026
0319f41
Merge pull request #122 from basecamp/dependabot/github_actions/githu…
robzolkos Apr 7, 2026
54c29c0
deps: bump github.com/itchyny/gojq in the go-dependencies group
dependabot[bot] Apr 7, 2026
33ea9e6
Merge pull request #121 from basecamp/dependabot/go_modules/go-depend…
robzolkos Apr 7, 2026
47dcd4a
deps: bump github.com/mattn/go-isatty in the go-dependencies group
dependabot[bot] Apr 13, 2026
9041fdc
ci: bump rhysd/actionlint in the github-actions group
dependabot[bot] Apr 13, 2026
87bc9f5
Replace legacy e2e suite with owner-only CLI contract tests
robzolkos Apr 13, 2026
c6ea62b
Ensure CLI e2e mutations verify state via readback
robzolkos Apr 13, 2026
724daca
Address PR review feedback on e2e harness
robzolkos Apr 13, 2026
a663379
Fix follow-up e2e review issues
robzolkos Apr 13, 2026
d2cf1f4
Fix final e2e review issues
robzolkos Apr 13, 2026
3d3e09a
Merge pull request #126 from basecamp/dependabot/github_actions/githu…
robzolkos Apr 13, 2026
ba70f09
Fix fixture teardown isolation and output contract checks
robzolkos Apr 13, 2026
aaf06f4
Fix teardown error formatting
robzolkos Apr 13, 2026
86c9ca5
Fix remaining e2e review feedback
robzolkos Apr 13, 2026
a439e56
Merge pull request #127 from basecamp/feature/e2e-role-tests
robzolkos Apr 13, 2026
77ea47b
Merge pull request #125 from basecamp/dependabot/go_modules/go-depend…
robzolkos Apr 13, 2026
e8db9f8
Add ergonomic inline attachment flags
robzolkos Apr 13, 2026
8299bb9
Address PR review feedback on attach updates
robzolkos Apr 13, 2026
81ebc5e
Fix lint shadowing in attach update paths
robzolkos Apr 13, 2026
b51dbc5
Address remaining PR review comments
robzolkos Apr 13, 2026
1d4c482
Update internal/commands/upload.go
robzolkos Apr 13, 2026
d1d4eb9
Merge pull request #128 from basecamp/feature/attachment-ergonomics
robzolkos Apr 13, 2026
f50b348
ci: bump the github-actions group with 3 updates
dependabot[bot] Apr 20, 2026
9a19631
Merge pull request #151 from basecamp/dependabot/github_actions/githu…
robzolkos Apr 23, 2026
215d66c
Keep prereleases out of stable package channels (#155)
robzolkos Apr 29, 2026
72e6994
ci: bump the github-actions group with 3 updates (#154)
dependabot[bot] Apr 29, 2026
46a580f
ci: drop approve step from Dependabot auto-merge (#156)
jeremy Apr 29, 2026
2b6ac58
deps: bump the go-dependencies group across 1 directory with 2 update…
dependabot[bot] Apr 29, 2026
39a29d3
Use server-side card column filtering
robzolkos Apr 15, 2026
f48b9f9
Add board access, webhook delivery, and user export commands
robzolkos Apr 15, 2026
3e3e2cc
Add activity list command
robzolkos Apr 15, 2026
b01643f
Add user email change commands
robzolkos Apr 15, 2026
a282b47
Add e2e coverage for new SDK-backed commands
robzolkos Apr 15, 2026
77f9c76
Polish docs and contract coverage
robzolkos Apr 15, 2026
cdd2ae0
Add compatibility tests for pseudo-column aliases
robzolkos Apr 15, 2026
51ce8e6
Address PR review feedback on SDK commands
robzolkos Apr 29, 2026
93f3041
Address second-pass PR review feedback
robzolkos Apr 29, 2026
086cdcc
Fix activity discovery and board accesses pagination
robzolkos Apr 29, 2026
428c7a0
Address remaining PR review comments
robzolkos Apr 29, 2026
bff7af2
Merge pull request #129 from basecamp/bump-fizzy-sdk-0.1.3
robzolkos Apr 30, 2026
7d54448
Add personal access token commands
robzolkos Apr 29, 2026
9b86152
Address PR review feedback on token commands
robzolkos Apr 29, 2026
2ff3806
Add token command to human catalog
robzolkos Apr 30, 2026
f73886c
Fix token command validation and help
robzolkos Apr 30, 2026
5b00475
Harden token e2e cleanup
robzolkos Apr 30, 2026
b15efd1
Merge pull request #157 from basecamp/add-token-commands
robzolkos Apr 30, 2026
cd13197
Migrate webhook commands to SDK
robzolkos Apr 29, 2026
2e1e048
Honor --page as start page when combined with --all
robzolkos Apr 29, 2026
52ac9f5
Remove unused printSuccessWithLocation helper
robzolkos Apr 29, 2026
add987b
Address webhook review feedback
robzolkos Apr 30, 2026
6976c76
Merge pull request #159 from basecamp/migrate-webhook-to-sdk
robzolkos Apr 30, 2026
29ddbc6
Repurpose fizzy search to use the dedicated FTS endpoint
robzolkos Apr 29, 2026
d6e9289
Quote search query safely in filter breadcrumb
robzolkos Apr 29, 2026
8e7fb98
Add explicit return after t.Fatal in agent test
robzolkos Apr 29, 2026
89386c9
Address search review feedback
robzolkos Apr 30, 2026
cdc4894
Merge pull request #160 from basecamp/adopt-search-service
robzolkos Apr 30, 2026
1f208ff
Bump fizzy SDK to v0.2.1
robzolkos May 1, 2026
1a6001b
Merge pull request #161 from basecamp/bump-fizzy-sdk-0.2.1
robzolkos May 1, 2026
50dd06b
ci: bump the github-actions group across 1 directory with 9 updates
dependabot[bot] Jun 2, 2026
3593255
ci: fix trivy action version comment
robzolkos Jun 3, 2026
ebf77b2
Merge pull request #166 from basecamp/dependabot/github_actions/githu…
robzolkos Jun 3, 2026
cf93d01
Bump fizzy SDK to v0.2.2
robzolkos Jun 3, 2026
b2155eb
Address SDK bump review feedback
robzolkos Jun 4, 2026
f6929b3
Merge pull request #167 from basecamp/bump-fizzy-sdk-0.2.2
robzolkos Jun 4, 2026
341f75e
Use cosign bundle for release checksum signing (#169)
robzolkos Jun 4, 2026
6a3ae59
Use current attest checksums input (#170)
robzolkos Jun 4, 2026
5716166
Add @mention resolution for comments and card descriptions
waynemsmith Jun 22, 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
6 changes: 6 additions & 0 deletions .env.test.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# e2e test credentials template.
# Copy to .env.test and fill in real tokens (that file is git-excluded).

FIZZY_TEST_TOKEN=fizzy_your_token_here
FIZZY_TEST_ACCOUNT=1234567
FIZZY_TEST_API_URL=https://app.fizzy.do
14 changes: 1 addition & 13 deletions .github/workflows/dependabot-auto-merge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,11 @@ jobs:
steps:
- name: Fetch Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@21025c705c08248db411dc16f3619e6b5f9ea21a # v2.5.0
uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3.1.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

# CI is the safety gate — auto-merging action updates is circular.
- name: Approve patch and minor updates (excluding actions)
if: >-
(
steps.metadata.outputs.update-type == 'version-update:semver-patch' ||
steps.metadata.outputs.update-type == 'version-update:semver-minor'
) &&
steps.metadata.outputs.package-ecosystem != 'github_actions'
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Enable auto-merge for patch and minor updates (excluding actions)
if: >-
(
Expand Down
15 changes: 8 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
persist-credentials: false

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 # zizmor: ignore[cache-poisoning] -- cache is branch-isolated; fork PRs cannot write to this cache
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 # zizmor: ignore[cache-poisoning] -- cache is branch-isolated; fork PRs cannot write to this cache
with:
go-version-file: go.mod

Expand Down Expand Up @@ -79,18 +79,18 @@ jobs:

- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
with:
app-id: ${{ vars.RELEASE_CLIENT_ID }}
private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
repositories: homebrew-tap
permission-contents: write

- name: Install cosign
uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 # v4.1.0
uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2

- name: Install Syft
uses: anchore/sbom-action/download-syft@57aae528053a48a3f6235f2d9461b05fbcb7366d # v0.23.1
uses: anchore/sbom-action/download-syft@e22c389904149dbc22b58101806040fa8d37a610 # v0.24.0

- name: Generate shell completions
run: |
Expand All @@ -102,7 +102,7 @@ jobs:
rm fizzy-tmp

- name: Run GoReleaser
uses: goreleaser/goreleaser-action@ec59f474b9834571250b370d4735c50f8e2d1e29 # v7.0.0
uses: goreleaser/goreleaser-action@5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89 # v7.2.2
with:
version: 'v2.14.1'
args: release --clean
Expand All @@ -118,15 +118,16 @@ jobs:
- name: Attest build provenance
uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
with:
subject-checksums-file: ./dist/checksums.txt
subject-checksums: ./dist/checksums.txt

aur-publish:
runs-on: ubuntu-latest
needs: release
environment: release
permissions:
contents: read
if: startsWith(github.ref, 'refs/tags/v')
# Only publish the normal AUR package for stable tags. Prereleases stay on GitHub Releases.
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-')
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ jobs:
results_format: sarif
publish_results: true

- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: SARIF file
path: results.sarif
retention-days: 5

- uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6
- uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
continue-on-error: true
with:
sarif_file: results.sarif
10 changes: 5 additions & 5 deletions .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0
- uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
with:
scan-type: fs
format: sarif
output: trivy-results.sarif
- uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6
- uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
with:
sarif_file: trivy-results.sarif
category: trivy
Expand All @@ -61,10 +61,10 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: securego/gosec@bb17e422fc34bf4c0a2e5cab9d07dc45a68c040c # v2.24.7
- uses: securego/gosec@4a3bd8af174872c778439083ded7adbf3747e770 # v2.26.1
with:
args: -no-fail -exclude=G304,G401,G501 -exclude-dir=e2e -fmt sarif -out gosec-results.sarif ./...
- uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6
- uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
with:
sarif_file: gosec-results.sarif
category: gosec
Expand All @@ -79,4 +79,4 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0
- uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
14 changes: 7 additions & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
persist-credentials: false

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod

Expand Down Expand Up @@ -49,7 +49,7 @@ jobs:
persist-credentials: false

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod

Expand All @@ -60,7 +60,7 @@ jobs:
run: go vet ./...

- name: golangci-lint
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
uses: golangci/golangci-lint-action@82606bf257cbaff209d206a39f5134f0cfbfd2ee # v9.2.1
with:
version: v2.10

Expand All @@ -74,7 +74,7 @@ jobs:
persist-credentials: false

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: 'stable'

Expand All @@ -94,10 +94,10 @@ jobs:
persist-credentials: false

- name: Run actionlint
uses: rhysd/actionlint@393031adb9afb225ee52ae2ccd7a5af5525e03e8 # v1.7.11
uses: rhysd/actionlint@914e7df21a07ef503a81201c76d2b11c789d3fca # v1.7.12

- name: Run zizmor
uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2
uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6
with:
advanced-security: false

Expand All @@ -111,7 +111,7 @@ jobs:
persist-credentials: false

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod

Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Build artifacts
bin/
/fizzy
/fizzy-fork
*.exe
*.exe~
*.dll
Expand Down Expand Up @@ -32,3 +33,6 @@ completions/
# Profiling
profiles/
default.pgo

# Local test credentials
.env.test
14 changes: 12 additions & 2 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,12 @@ signs:
- cmd: cosign
artifacts: checksum
output: true
signature: "${artifact}.bundle"
args:
- sign-blob
- --yes
- --output-certificate=${certificate}
- --output-signature=${signature}
- --new-bundle-format=true
- --bundle=${signature}
- ${artifact}

notarize:
Expand All @@ -73,9 +74,16 @@ notarize:
changelog:
use: github-native

release:
prerelease: auto
# Keep prerelease tags out of GitHub's latest release/install-script path.
make_latest: "{{ if .Prerelease }}false{{ else }}auto{{ end }}"

homebrew_casks:
- name: fizzy
ids: [default]
# Do not update the normal tap for prerelease tags.
skip_upload: auto
repository:
owner: basecamp
name: homebrew-tap
Expand All @@ -92,6 +100,8 @@ homebrew_casks:
scoops:
- name: fizzy
ids: [default]
# Do not update the normal bucket manifest for prerelease tags.
skip_upload: auto
repository:
owner: basecamp
name: homebrew-tap
Expand Down
70 changes: 42 additions & 28 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
.PHONY: test test-unit test-e2e test-go test-file test-run build clean tidy help \
.PHONY: test test-unit test-e2e e2e test-go test-file e2e-file test-run e2e-run build clean tidy help \
check-toolchain fmt fmt-check vet lint tidy-check race-test vuln secrets \
replace-check security check release-check release tools \
surface-snapshot surface-check sync-skill lint-actions
surface-snapshot surface-check lint-actions

BINARY := $(CURDIR)/bin/fizzy
FIZZY_TEST_BINARY ?= $(BINARY)

# Load local test credentials if present, but refuse tracked local secret files.
ifneq ($(shell git ls-files --error-unmatch .env.test >/dev/null 2>&1 && echo tracked),)
$(error .env.test is tracked by Git. Remove it from version control and keep local secret files untracked)
endif
-include .env.test
export FIZZY_TEST_TOKEN FIZZY_TEST_ACCOUNT FIZZY_TEST_API_URL FIZZY_TEST_BINARY
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
LDFLAGS := -X main.version=$(VERSION)

Expand All @@ -20,10 +28,13 @@ help:
@echo "Usage:"
@echo " make build Build the CLI"
@echo " make test-unit Run unit tests (no API required)"
@echo " make test-e2e Run e2e tests (requires API credentials)"
@echo " make test Alias for test-e2e"
@echo " make test-file Run a specific e2e test file"
@echo " make test-run Run a specific e2e test by name"
@echo " make e2e Run owner-only CLI contract e2e tests"
@echo " make test-e2e Alias for e2e"
@echo " make test Alias for e2e"
@echo " make e2e-file Run a specific CLI contract e2e test file"
@echo " make test-file Alias for e2e-file"
@echo " make e2e-run Run a specific CLI contract e2e test by name"
@echo " make test-run Alias for e2e-run"
@echo " make clean Remove build artifacts"
@echo " make tidy Tidy dependencies"
@echo ""
Expand All @@ -45,17 +56,19 @@ help:
@echo " make tools Install dev tools"
@echo ""
@echo "Environment variables (required for e2e tests):"
@echo " FIZZY_TEST_TOKEN API token"
@echo " FIZZY_TEST_ACCOUNT Account slug"
@echo " FIZZY_TEST_API_URL API base URL (default: https://app.fizzy.do)"
@echo " FIZZY_TEST_USER_ID User ID for user update/deactivate tests (optional)"
@echo " FIZZY_TEST_TOKEN API token"
@echo " FIZZY_TEST_ACCOUNT Account slug"
@echo " FIZZY_TEST_API_URL API base URL (default: https://app.fizzy.do)"
@echo " FIZZY_TEST_BINARY Prebuilt binary path (optional)"
@echo " FIZZY_E2E_KEEP_FIXTURE Set to 1 to skip final fixture teardown"
@echo " FIZZY_E2E_TEARDOWN_DELAY Delay teardown by N seconds"
@echo ""
@echo "Examples:"
@echo " make build"
@echo " make test-unit"
@echo " export FIZZY_TEST_TOKEN=your-token"
@echo " export FIZZY_TEST_ACCOUNT=your-account"
@echo " make test-e2e"
@echo " make e2e"

# Toolchain guard — fails fast when PATH go and GOROOT go disagree
check-toolchain:
Expand All @@ -80,28 +93,33 @@ test-unit: check-toolchain
go test -v ./internal/...

# Run e2e tests (requires API credentials)
test-e2e: build
e2e: build
@if [ -z "$$FIZZY_TEST_TOKEN" ]; then echo "Error: FIZZY_TEST_TOKEN not set"; exit 1; fi
@if [ -z "$$FIZZY_TEST_ACCOUNT" ]; then echo "Error: FIZZY_TEST_ACCOUNT not set"; exit 1; fi
FIZZY_TEST_BINARY=$(BINARY) go test -v ./e2e/tests/...
go test -v -count=1 -timeout 10m ./e2e/cli_tests/...

# Alias for test-e2e
test: test-e2e
test-go: test-e2e
test-e2e: e2e

# Run a single test file (e.g., make test-file FILE=board)
test-file: build
@if [ -z "$(FILE)" ]; then echo "Usage: make test-file FILE=board"; exit 1; fi
test: e2e
test-go: e2e

# Run a single test file (e.g., make e2e-file FILE=crud_board)
e2e-file: build
@if [ -z "$(FILE)" ]; then echo "Usage: make e2e-file FILE=crud_board"; exit 1; fi
@if [ -z "$$FIZZY_TEST_TOKEN" ]; then echo "Error: FIZZY_TEST_TOKEN not set"; exit 1; fi
@if [ -z "$$FIZZY_TEST_ACCOUNT" ]; then echo "Error: FIZZY_TEST_ACCOUNT not set"; exit 1; fi
FIZZY_TEST_BINARY=$(BINARY) go test -v ./e2e/tests/$(FILE)_test.go
go test -v -count=1 ./e2e/cli_tests/$(FILE)_test.go

test-file: e2e-file

# Run a single test by name (e.g., make test-run NAME=TestBoardCRUD)
test-run: build
@if [ -z "$(NAME)" ]; then echo "Usage: make test-run NAME=TestBoardCRUD"; exit 1; fi
# Run a single test by name (e.g., make e2e-run NAME=TestBoardList)
e2e-run: build
@if [ -z "$(NAME)" ]; then echo "Usage: make e2e-run NAME=TestBoardList"; exit 1; fi
@if [ -z "$$FIZZY_TEST_TOKEN" ]; then echo "Error: FIZZY_TEST_TOKEN not set"; exit 1; fi
@if [ -z "$$FIZZY_TEST_ACCOUNT" ]; then echo "Error: FIZZY_TEST_ACCOUNT not set"; exit 1; fi
FIZZY_TEST_BINARY=$(BINARY) go test -v -run $(NAME) ./e2e/tests/...
go test -v -count=1 -run $(NAME) ./e2e/cli_tests/...

test-run: e2e-run

# Format Go source
fmt:
Expand Down Expand Up @@ -194,10 +212,6 @@ tools:
surface-snapshot:
GENERATE_SURFACE=1 go test ./internal/commands/ -run TestGenerateSurfaceSnapshot -v

# Sync embedded SKILL.md from canonical source
sync-skill:
cp skills/fizzy/SKILL.md internal/skills/SKILL.md

# CI check: SURFACE.txt is up to date
surface-check:
go test ./internal/commands/ -run TestSurfaceSnapshot -v
Expand Down
Loading
Loading