Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
7d55270
feat!: rewrite as a Go CLI — browser OAuth login PoC
khvn26 Jul 16, 2026
adc0121
feat: rename OAuth scope management-api -> admin-api
khvn26 Jul 16, 2026
66b0bdb
test: cover the OAuth flow, credential store, API client and commands
khvn26 Jul 17, 2026
445ae8b
test: structure tests with Given/When/Then markers
khvn26 Jul 17, 2026
42823f3
docs: split installation and authentication into separate design docs
khvn26 Jul 17, 2026
d0715fe
docs: number installation design doc before authentication
khvn26 Jul 17, 2026
a645954
feat: FLAGSMITH_API_KEY, master-key login, per-instance credential store
khvn26 Jul 17, 2026
d1a9b10
feat: support login/logout under the auth subcommand
khvn26 Jul 17, 2026
6057834
docs: environment as client-side key, name cache, output/interactivit…
khvn26 Jul 20, 2026
e386cbd
feat: fail closed without a keychain; --insecure-storage opt-in
khvn26 Jul 20, 2026
03c9d45
feat: rename --api to --api-url, keep --api as hidden alias
khvn26 Jul 20, 2026
758e80f
docs: split FLAGSMITH_ENVIRONMENT_KEY (SDK auth) from FLAGSMITH_ENVIR…
khvn26 Jul 20, 2026
583a128
feat: flagsmith.json discovery and parsing
khvn26 Jul 20, 2026
6177bc0
feat: context resolution, name cache, and flagsmith config
khvn26 Jul 20, 2026
468d914
feat: flagsmith init, bare-command nudge, exit-code conventions
khvn26 Jul 20, 2026
1c9bfca
feat: implement the 02 output & interactivity conventions
khvn26 Jul 20, 2026
78cd925
feat: build prompts on charmbracelet/huh
khvn26 Jul 20, 2026
aeb1a23
fix: init organisation handling on re-init
khvn26 Jul 20, 2026
ed91631
feat: init offers to create an environment for empty projects
khvn26 Jul 21, 2026
75ef0b3
feat: centralise result output; add --jq; adopt the result model
khvn26 Jul 21, 2026
4c248a9
feat: flag-drivable resource creation in init; structural prompt gating
khvn26 Jul 21, 2026
1ee0d46
docs: extract CRUD conventions into 05-crud.md
khvn26 Jul 21, 2026
20221f7
docs: add 06-flags.md (flags = per-environment feature states)
khvn26 Jul 21, 2026
2c03697
feat: flags list
khvn26 Jul 21, 2026
49e198a
fix: bold header / coloured labels without breaking alignment
khvn26 Jul 21, 2026
7a43aff
docs: refresh README for current commands and design docs
khvn26 Jul 21, 2026
017d1f5
chore: point init $schema at the feat/cli-v2 ref
khvn26 Jul 21, 2026
adec899
chore: update repo flagsmith.json (schema ref + project)
khvn26 Jul 21, 2026
93e3742
refactor: singular resource command names (flags -> flag)
khvn26 Jul 21, 2026
3182cde
docs: remove stray duplicate 03-project-config.md
khvn26 Jul 21, 2026
bba9a05
chore: point schema $id at the feat/cli-v2 ref
khvn26 Jul 21, 2026
c90d38b
fix: colour config output consistently with auth status
khvn26 Jul 21, 2026
3b97f01
docs: expand 06-flags.md (get with overrides, mutation, list views)
khvn26 Jul 21, 2026
3cdebe0
refactor: browser-only login; keychain-only session store
khvn26 Jul 21, 2026
e1c1796
docs: named references in 04
khvn26 Jul 21, 2026
55c7b80
feat: resolve environment names to keys for flag list
khvn26 Jul 21, 2026
4066fc5
feat: accept project and organisation by name
khvn26 Jul 21, 2026
673305d
fix: serialise credential resolution to refresh once under concurrency
khvn26 Jul 21, 2026
d3fcac6
feat: flag list and flag get on the Admin features endpoint
khvn26 Jul 21, 2026
3ac1f0a
feat: flag update via update-flag-v2, and a flag create nudge
khvn26 Jul 21, 2026
aa01e4c
fix: hide flag create so it is not advertised as a command
khvn26 Jul 21, 2026
67ec00b
feat: flag segment overrides — get, update, and delete
khvn26 Jul 21, 2026
36c7d5b
fix: flag list display polish
khvn26 Jul 21, 2026
66b8fcf
fix: flatten multi-line flag values in the list table
khvn26 Jul 21, 2026
0e39b44
feat: curated JSON shape for flag get and flag list
khvn26 Jul 22, 2026
ba492b2
docs: add api design doc as 06, renumber flags to 07
khvn26 Jul 22, 2026
2fcf7f8
feat: flagsmith api — curl-like access with the CLI's credentials
khvn26 Jul 22, 2026
19d4a1b
feat: flag identity overrides (--identifier), core and edge
khvn26 Jul 22, 2026
ee0b971
fix: collapse the usage string to a single line
khvn26 Jul 22, 2026
7abaefa
installation priorities
khvn26 Jul 22, 2026
295ae60
docs: add segments design (08) and flag list --segment
khvn26 Jul 22, 2026
cf68751
feat: flag list --segment lists a segment's overrides
khvn26 Jul 22, 2026
034ae0a
feat: segment CRUD
khvn26 Jul 22, 2026
3872c00
docs: add features design (09)
khvn26 Jul 22, 2026
ec74e13
feat: feature list and get
khvn26 Jul 22, 2026
3ccef0b
feat: feature create, update, delete
khvn26 Jul 22, 2026
3b524ba
feat: feature variant subcommand (multivariate options)
khvn26 Jul 22, 2026
130a268
fix: truncate the value column in feature list
khvn26 Jul 22, 2026
b1b0f88
feat: feature default value naming — DEFAULT VALUE / default_value
khvn26 Jul 22, 2026
33e5034
fix: send project/feature in segment and mv-option writes
khvn26 Jul 22, 2026
f77e350
docs: replace mocked feature/segment/flag examples with real output
khvn26 Jul 22, 2026
397fe81
docs: add projects & organisations design (10)
khvn26 Jul 22, 2026
5a72711
feat: organisation CRUD
khvn26 Jul 22, 2026
570c658
feat: project CRUD
khvn26 Jul 22, 2026
74ec424
docs: real output for project & organisation examples (10)
khvn26 Jul 22, 2026
58a6c1d
docs: add environments design (11)
khvn26 Jul 22, 2026
b5ec797
feat: environment CRUD and clone
khvn26 Jul 22, 2026
3054a00
feat: environment key — server-side SDK keys
khvn26 Jul 22, 2026
4869b9e
docs: add environment document command (11)
khvn26 Jul 22, 2026
5787c55
feat: environment document
khvn26 Jul 22, 2026
bacbdef
docs: add Help and errors to 02
khvn26 Jul 22, 2026
84e28e9
feat: error hints, plan-gating detection, usage on incorrect input
khvn26 Jul 22, 2026
1b93154
feat: examples on every command usage page
khvn26 Jul 22, 2026
e89a864
fix: follow pagination in getList across all pages
khvn26 Jul 22, 2026
04a07f9
fix: route interactive prompts to stderr, not stdout
khvn26 Jul 22, 2026
5ce6112
feat: centralise HTTP in an api.Client with timeouts and retries
khvn26 Jul 23, 2026
7462d29
fix: make init preserve sdkApiUrl and never clobber a config it can't…
khvn26 Jul 23, 2026
4294ecb
feat: decouple --no-input (liveness) from --yes (authorization)
khvn26 Jul 23, 2026
1645a66
feat: split Admin API env creds into FLAGSMITH_API_KEY and FLAGSMITH_…
khvn26 Jul 23, 2026
37cf3fe
fix: guard segment update against no-op full PUT
khvn26 Jul 23, 2026
83bbc61
init long-running as well
khvn26 Jul 23, 2026
221d0e8
improve wording
khvn26 Jul 23, 2026
ff4e351
feat: trace HTTP calls to stderr under FLAGSMITH_DEBUG
khvn26 Jul 23, 2026
1995b87
docs: mark design docs as draft/poc
khvn26 Jul 23, 2026
0a46dce
docs: design multivariate weight mutation for flag update
khvn26 Jul 23, 2026
d85620c
docs: add evaluate design (12)
khvn26 Jul 23, 2026
52b689a
fix: correct api command examples to include the api/v1/ prefix
khvn26 Jul 23, 2026
301001b
feat: move recovery guidance out of error messages and into hints
khvn26 Jul 24, 2026
9cae432
fix: don't print usage for hidden commands on incorrect input
khvn26 Jul 24, 2026
4489a45
docs: add flag enable/disable sugar (07)
khvn26 Jul 24, 2026
1b951a2
feat: flag enable/disable shorthand for flag update
khvn26 Jul 24, 2026
dd34162
feat: route enterprise-negotiable quota caps to support, not pricing
khvn26 Jul 24, 2026
9ffad81
docs: revert 02 §4 hint wording to the concise version
khvn26 Jul 24, 2026
4dcf462
feat: turn a project-cap 403 into an actionable pricing hint
khvn26 Jul 24, 2026
30ddf44
docs: segment override priorities, --feature list mode, and flag reor…
khvn26 Jul 26, 2026
e780d04
feat: accept segment names in flag commands' --segment
khvn26 Jul 26, 2026
f5b681b
feat: priority and segment {id, name} in override views
khvn26 Jul 26, 2026
dc63786
feat: flag update --priority moves a segment override
khvn26 Jul 26, 2026
75adae5
feat: flag list --feature lists a feature's overrides
khvn26 Jul 26, 2026
831d361
feat: flag reorder re-permutes segment override priorities
khvn26 Jul 26, 2026
0bf02bc
feat: segment-scoped messages name the segment as "name (id)"
khvn26 Jul 26, 2026
bc7b9fe
refactor: one home for the "Name (identifier)" display form
khvn26 Jul 26, 2026
08038fe
feat: feature positionals accept id-or-name references
khvn26 Jul 26, 2026
2849e59
feat: segments join the name cache; flag delete names its segment
khvn26 Jul 26, 2026
c216c51
perf: single-feature commands narrow the features fetch with search
khvn26 Jul 26, 2026
d4488b1
perf: flag mutations render their result without a second features fetch
khvn26 Jul 26, 2026
13d6954
perf: flag list --segment fans its metadata reads out concurrently
khvn26 Jul 27, 2026
b38f517
perf: flag reorder resolves refs and prints its result from data in hand
khvn26 Jul 27, 2026
4bf9af4
perf: identity commands resolve an identifier once per invocation
khvn26 Jul 27, 2026
2cb1d7e
perf: environment renders stop paying round-trips for labels
khvn26 Jul 27, 2026
257d69d
perf: project commands stop re-fetching organisations for labels
khvn26 Jul 27, 2026
691473a
perf: environment context resolves an exact key with one targeted call
khvn26 Jul 27, 2026
1a2b97e
perf: list requests ask the server for its largest page
khvn26 Jul 27, 2026
1d82784
Revert "perf: environment context resolves an exact key with one targ…
khvn26 Jul 27, 2026
083ba25
fix: org labels treat repeated organisation ids as one cache hit
khvn26 Jul 27, 2026
d149e49
refactor: one ritual for id-or-name resolution
khvn26 Jul 27, 2026
7ea95eb
refactor: one precedence helper for context values
khvn26 Jul 27, 2026
5bf16fc
refactor: collapse the api client's CRUD method triads onto generics
khvn26 Jul 27, 2026
5eb5a82
refactor: the experiments endpoints share one postUpdateFlags path
khvn26 Jul 27, 2026
8a4c42e
refactor: rawItem earns its keep with marshalOr and unmarshalRaw
khvn26 Jul 27, 2026
4a9bdee
refactor: requireFeature owns the fetch-and-find-one ritual
khvn26 Jul 27, 2026
bbbcec1
refactor: confirmed() owns the confirm-or-abort block
khvn26 Jul 27, 2026
5a5551f
refactor: renderList owns the list-command render closure
khvn26 Jul 27, 2026
5e1f792
fix: delete messages stop passing the typed ref as a name
khvn26 Jul 27, 2026
83efb70
fix: a new override inherits the environment default's enabled state
khvn26 Jul 27, 2026
b274287
fix: an empty --project/--organisation no longer panics init
khvn26 Jul 27, 2026
f3fcc43
fix: an empty paginated list renders [], not null
khvn26 Jul 27, 2026
943f3cc
fix: project name resolution honours the organisation scope
khvn26 Jul 27, 2026
abcea94
fix: --jq implies JSON in control flow, not just at render time
khvn26 Jul 27, 2026
23aefc6
fix: api -F joins an existing query string instead of starting another
khvn26 Jul 27, 2026
87e80e3
fix: a server-side key never reaches an error message
khvn26 Jul 27, 2026
ae66444
feat: config shows the config file path with a ~ for home
khvn26 Jul 27, 2026
aca404f
fix: time spent at a prompt no longer counts against the deadline
khvn26 Jul 27, 2026
54eff40
fix: OAuth metadata is anchored to the instance it was fetched for
khvn26 Jul 27, 2026
97b898f
fix: X-Environment-Key no longer follows cross-host redirects
khvn26 Jul 27, 2026
15b5954
fix: detail colouring derives column boundaries from known content
khvn26 Jul 27, 2026
e1ee861
ci: Go test matrix, golangci-lint, prek hooks; Node pipeline retired
khvn26 Jul 27, 2026
2f71d6f
test: TestAbbreviateHome passes on Windows
khvn26 Jul 27, 2026
2112440
ci: config-verify joins the pre-commit.ci skip list
khvn26 Jul 27, 2026
fc24fd7
feat: --version, honest build versions, and $schema that cannot dangle
khvn26 Jul 27, 2026
2832be0
docs: design host-scoped credential env vars
khvn26 Jul 27, 2026
c773e51
feat: host-scoped credential env vars
khvn26 Jul 27, 2026
69d62ee
test: cover withholding and surface scoping for the other two credent…
khvn26 Jul 27, 2026
aa55c22
fix: a newline in a value no longer panics the detail view
khvn26 Jul 27, 2026
6402a1b
fix: an empty variant list renders [], not null
khvn26 Jul 27, 2026
c1289c6
fix: boolean env switches read their value, not merely presence
khvn26 Jul 28, 2026
030c59e
fix: the name cache is written owner-only
khvn26 Jul 28, 2026
d0289db
fix: credentials follow a redirect only back to the exact origin
khvn26 Jul 28, 2026
cbed4c6
docs: auth token's example stops putting the credential in argv
khvn26 Jul 28, 2026
398dd87
test: the cache permission check is POSIX-only
khvn26 Jul 28, 2026
5a9a50b
honour maxRedirects
khvn26 Jul 28, 2026
fd46f56
fix: flatten every character tabwriter treats as structure
khvn26 Jul 28, 2026
6fd6c81
docs: record the falsey-env rule, drop unimplemented --limit
khvn26 Jul 28, 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
11 changes: 0 additions & 11 deletions .editorconfig

This file was deleted.

1 change: 0 additions & 1 deletion .eslintignore

This file was deleted.

6 changes: 0 additions & 6 deletions .eslintrc

This file was deleted.

28 changes: 0 additions & 28 deletions .github/workflows/publish.yml

This file was deleted.

63 changes: 43 additions & 20 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,54 @@ name: Build and Test

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

jobs:
build_and_test:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read

runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: test (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Node
uses: actions/setup-node@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5.6.0
with:
node-version-file: .nvmrc
registry-url: 'https://registry.npmjs.org'
go-version-file: go.mod
- run: go build ./...
- run: go test -race ./...

- name: Install dependencies
run: npm install
shell: bash
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5.6.0
with:
go-version-file: go.mod
- uses: golangci/golangci-lint-action@4afd733a84b1f43292c63897423277bb7f4313a9 # v8.0.0
with:
version: v2.11.4 # keep in step with the hook rev in .pre-commit-config.yaml
- run: go mod tidy -diff

- name: Build
run: npm run build
cross-compile:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5.6.0
with:
go-version-file: go.mod
- name: build release targets
run: |
for target in linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64 windows/arm64; do
echo "building $target"
GOOS=${target%/*} GOARCH=${target#*/} go build -o /dev/null .
done
18 changes: 0 additions & 18 deletions .github/workflows/release-please.yml

This file was deleted.

15 changes: 3 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,12 +1,3 @@
*-debug.log
*-error.log
/.nyc_output
/dist
/lib
/package-lock.json
/tmp
/yarn.lock
node_modules
oclif.manifest.json
.idea
flagsmith.json
/flagsmith
/dist/
*.test
14 changes: 14 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
version: "2"

linters:
exclusions:
presets:
- std-error-handling
rules:
- path: _test\.go
linters:
- errcheck

formatters:
enable:
- gofmt
12 changes: 0 additions & 12 deletions .mocharc.json

This file was deleted.

1 change: 0 additions & 1 deletion .nvmrc

This file was deleted.

35 changes: 35 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- id: check-merge-conflict

- repo: https://github.com/golangci/golangci-lint
rev: v2.11.4
hooks:
- id: golangci-lint-full
- id: golangci-lint-fmt
- id: golangci-lint-config-verify

- repo: local
hooks:
- id: go-mod-tidy
name: go mod tidy -diff
entry: go mod tidy -diff
language: system
files: (^go\.(mod|sum)$)|(\.go$)
pass_filenames: false
- id: go-test
name: go test
entry: go test ./...
language: system
types: [go]
pass_filenames: false
stages: [pre-push]

ci:
skip: [golangci-lint-full, golangci-lint-config-verify, go-mod-tidy, go-test]
1 change: 0 additions & 1 deletion .release-please-manifest.json

This file was deleted.

80 changes: 0 additions & 80 deletions CHANGELOG.md

This file was deleted.

Loading
Loading