Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
96ebe6e
feat: implement ABSmartly CLI with markdown-based experiment management
Jan 28, 2026
d1c3ffd
feat: rename binary to 'abs' and add distribution infrastructure
Jan 29, 2026
b3fe3b6
docs: add comprehensive README with installation and usage guide
Jan 29, 2026
8a6a692
docs: add comprehensive command reference to README
Jan 29, 2026
8e2f2f4
feat: add markdown formatter for experiments
Feb 3, 2026
0d5b6ac
feat: enhance markdown formatter with comprehensive metadata
Feb 3, 2026
da1f17a
feat: add alerts section to markdown experiment output
Feb 3, 2026
a1afc4c
feat: add experiments search command
Feb 3, 2026
697f5a0
feat: support all API filters for experiments list command
Feb 3, 2026
5164ffa
feat: add alerts listing and filtering command
Feb 3, 2026
5c58872
docs: update experiments list and alerts command documentation with a…
Feb 3, 2026
1608cf0
feat: add experiment timeline view by name
Feb 3, 2026
6e7022c
feat: add json tags to timeline structs for proper serialization
Feb 3, 2026
ea5b757
feat: add user-friendly field labels and markdown table format for ex…
Feb 3, 2026
96d4f0a
docs: update experiments documentation with markdown output and all n…
Feb 3, 2026
0d967c8
fix: properly format JSON in variant configurations (handle stringifi…
Feb 3, 2026
256b579
fix: handle empty JSON string configs in markdown output
Feb 3, 2026
a9708cf
style: simplify custom fields display - show only field values
Feb 3, 2026
65924c0
feat: add custom field dereferencing for user type fields
Feb 3, 2026
4ae262d
feat: dereference owner field and remove redundant metadata section
Feb 3, 2026
5766f29
feat: add teams and tags to experiment output, plus timeline view flag
Feb 3, 2026
db29245
fix: don't show 'No notes added' message when there are no notes
Feb 3, 2026
46af8f3
feat: add --activity flag to show experiment history/iterations
Feb 3, 2026
6a3bed1
fix: activity flag now shows timeline entries with notes, not separat…
Feb 3, 2026
5d2228c
fix: display all activity notes with full text and timestamps
Feb 3, 2026
428df84
fix: use experiment notes directly instead of timeline for activity
Feb 3, 2026
f2b5bfc
fix: fetch notes from expctld service for activity display
Feb 3, 2026
fded4f4
fix: use notes from normal API response instead of expctld service
Feb 3, 2026
d1e4a3a
fix: remove unused activity variable
Feb 3, 2026
9efe61c
feat: use normal API for notes list and improve error messages
Feb 3, 2026
6b5bb6b
feat: simplify error message to show only usage
Feb 3, 2026
38c1229
feat: add activity command and improve activity display
Feb 3, 2026
d8a12b1
fix: display note content in activity list command
Feb 3, 2026
b451733
feat: add all output formats and terse flag to activity command
Feb 3, 2026
4964f12
feat: add --full flag to show untruncated output
Feb 3, 2026
4fc6dae
docs: clarify that JSON and YAML formats always show full data
Feb 3, 2026
5ff31df
feat: improve activity command table layout and terse format
Feb 3, 2026
8c0a423
fix: put text at end of terse format line
Feb 3, 2026
632f64e
feat: make --output, --terse, and --full global flags for all commands
Feb 3, 2026
80aadd1
feat: make --full default for markdown format, overrideable by --ters…
Feb 3, 2026
58b1d92
test: add comprehensive test suite for all output formats and flags
Feb 3, 2026
7759207
test: fix comprehensive flag combination tests
Feb 3, 2026
fd9470a
test: add comprehensive output behavior validation tests
Feb 3, 2026
30acdd5
test: add comprehensive command integration tests validating function…
Feb 3, 2026
0c9d329
test: reach 100% coverage
Feb 4, 2026
492deb7
test: harden coverage assertions
Feb 4, 2026
6b731de
feat: support ISO 8601 timestamps for date filters in addition to mil…
Feb 4, 2026
3225bad
chore: add .claude/tasks to gitignore
joalves Feb 5, 2026
bf5725a
feat: implement open command with browser navigation and name resolution
joalves Feb 5, 2026
86e1c73
chore: move docs/plans to .claude/plans and add to gitignore
joalves Feb 5, 2026
af47eae
feat: add --page flag for pagination across all list commands
joalves Feb 5, 2026
e749973
feat: add search, sort, and page flags to segments list command
joalves Feb 5, 2026
9047039
fix: correct segments create/update to use attribute field instead of…
joalves Feb 5, 2026
50a2ac5
feat: add --team-hierarchy flag to show full team paths in experiments
joalves Feb 5, 2026
86a4207
feat: integrate api-mocks-go library for realistic API testing
joalves Feb 6, 2026
9bba75b
feat: migrate all entity tests to use api-mocks-go generated server
joalves Feb 6, 2026
99e482e
feat: fix goals/metrics response parsing and enable full CRUD testing
joalves Feb 6, 2026
9c85255
fix: address CodeRabbit PR review comments (critical and major issues)
joalves Feb 6, 2026
bc63c83
feat: comprehensive improvements from parallel agent fixes
joalves Feb 6, 2026
c76d805
fix: address critical bugs from deep code review
joalves Feb 6, 2026
0648b86
fix: critical error handling and UTF-8 bugs from second review
joalves Feb 6, 2026
aac9e98
test: update tests for improved error handling
joalves Feb 6, 2026
cfe4937
fix: remaining critical issues from deep review
joalves Feb 6, 2026
7696c0a
fix: remove incorrect duplicate docstrings from client.go
joalves Feb 6, 2026
7344958
fix: remaining non-blocking improvements from third review
joalves Feb 7, 2026
7adcdab
fix: all remaining improvements from third review
joalves Feb 7, 2026
3d5a970
fix: add team-hierarchy flag verification to test
joalves Feb 7, 2026
52cec70
fix: CodeRabbit PR feedback - validation and type safety
joalves Feb 7, 2026
1b019d8
fix: add language tags to all README fenced blocks
joalves Feb 7, 2026
e9faace
fix: final security improvements from CodeRabbit
joalves Feb 7, 2026
accae0d
fix: test failures and sensitive value leak
joalves Feb 7, 2026
10a8875
test: comprehensive regression tests for security fixes
joalves Feb 7, 2026
f71829e
fix: critical compilation errors and security issues
joalves Feb 7, 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
824 changes: 824 additions & 0 deletions .claude/test-coverage-analysis.md

Large diffs are not rendered by default.

426 changes: 426 additions & 0 deletions .claude/test_quality_analysis.md

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Binaries
abs
absmartly
absmartly-cli
*.exe
*.exe~
*.dll
*.so
*.dylib

# Build output
dist/
bin/

# Test binary
*.test

# Coverage
coverage.out
coverage.html

# IDE
.idea/
.vscode/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Go workspace
go.work

# Debug
__debug_bin

# Temporary
*.tmp
*.log

# Claude Code
.claude/plans/
.claude/tasks/
docs/plans/
130 changes: 130 additions & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
project_name: absmartly-cli

before:
hooks:
- go mod tidy
- go test ./...

builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- darwin
- windows
goarch:
- amd64
- arm64
ignore:
- goos: windows
goarch: arm64
binary: abs
ldflags:
- -s -w
- -X github.com/absmartly/cli/pkg/version.Version={{.Version}}
- -X github.com/absmartly/cli/pkg/version.Commit={{.Commit}}
- -X github.com/absmartly/cli/pkg/version.Date={{.Date}}
hooks:
post:
# Create symlink for discoverability
- sh -c 'cp {{ .Path }} {{ dir .Path }}/absmartly-cli{{ if eq .Os "windows" }}.exe{{ end }}'

archives:
- format: tar.gz
name_template: >-
{{ .ProjectName }}_
{{- .Version }}_
{{- .Os }}_
{{- .Arch }}
format_overrides:
- goos: windows
format: zip
files:
- LICENSE
- README.md
- DISTRIBUTION.md

checksum:
name_template: 'checksums.txt'

snapshot:
version_template: "{{ incpatch .Version }}-next"

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

# Homebrew tap
brews:
- repository:
owner: absmartly
name: homebrew-tap
folder: Formula
homepage: https://github.com/absmartly/cli
description: ABSmartly CLI - Manage experiments and feature flags from the command line
license: MIT
test: |
system "#{bin}/abs version"
install: |
bin.install "abs"
bin.install "absmartly-cli"
caveats: |
The binary is installed as 'abs' for convenience.
You can also use 'absmartly-cli' if you prefer.

# Linux packages
nfpms:
- id: packages
package_name: absmartly-cli
vendor: ABSmartly
homepage: https://github.com/absmartly/cli
maintainer: ABSmartly <support@absmartly.com>
description: ABSmartly CLI - Manage experiments and feature flags from the command line
license: MIT
formats:
- deb
- rpm
- apk
bindir: /usr/bin
contents:
# Create symlink for discoverability
- src: /usr/bin/abs
dst: /usr/bin/absmartly-cli
type: symlink

# Docker images
dockers:
- image_templates:
- "absmartly/cli:latest"
- "absmartly/cli:{{ .Tag }}"
- "absmartly/cli:v{{ .Major }}"
- "absmartly/cli:v{{ .Major }}.{{ .Minor }}"
dockerfile: Dockerfile
build_flag_templates:
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"

# Snapcraft
snapcrafts:
- name: absmartly-cli
summary: ABSmartly CLI tool
description: |
Command-line tool for managing experiments and feature flags
on the ABSmartly platform.
grade: stable
confinement: strict
publish: true
license: MIT
apps:
abs:
command: abs
plugs:
- home
- network
9 changes: 9 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM alpine:latest

RUN apk --no-cache add ca-certificates

COPY abs /usr/local/bin/abs
RUN ln -s /usr/local/bin/abs /usr/local/bin/absmartly-cli

ENTRYPOINT ["/usr/local/bin/abs"]
CMD ["--help"]
Loading