lumos-identity-cli 0.0.0.dev1__tar.gz → 2.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.cursor/rules/docs.mdc +2 -2
  2. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.github/workflows/build.yml +2 -2
  3. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.github/workflows/release.yml +3 -54
  4. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.releaserc.yaml +2 -2
  5. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/CHANGELOG.md +12 -0
  6. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/Makefile +2 -0
  7. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/PKG-INFO +2 -2
  8. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/contributing.md +4 -4
  9. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/examples.md +1 -1
  10. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/installation.md +9 -3
  11. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/reference.md +64 -47
  12. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/src/conf.py +9 -0
  13. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/src/contributing.md +4 -4
  14. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/src/installation.md +8 -2
  15. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/pyproject.toml +2 -2
  16. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/cli.py +1 -1
  17. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/tests/cli_test.py +6 -1
  18. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/uv.lock +8 -20
  19. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.cursor/Dockerfile +0 -0
  20. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.cursor/rules/commit-message.mdc +0 -0
  21. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.devcontainer/devcontainer.json +0 -0
  22. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.gitignore +0 -0
  23. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/.pre-commit-config.yaml +0 -0
  24. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/README.md +0 -0
  25. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/authentication.md +0 -0
  26. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/index.md +0 -0
  27. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/src/authentication.md +0 -0
  28. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/src/examples.md +0 -0
  29. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/src/index.md +0 -0
  30. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/docs/src/reference.md +0 -0
  31. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/sample-scripts/create_requests.py +0 -0
  32. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/sample-scripts/customer-secrets.sh +0 -0
  33. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/__init__.py +0 -0
  34. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/__main__.py +0 -0
  35. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/common/__init__.py +0 -0
  36. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/common/client.py +0 -0
  37. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/common/client_helpers.py +0 -0
  38. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/common/helpers.py +0 -0
  39. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/common/keyhelpers.py +0 -0
  40. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/common/logging.py +0 -0
  41. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/common/models.py +0 -0
  42. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/list_collections/__init__.py +0 -0
  43. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/list_collections/cli.py +0 -0
  44. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/request/__init__.py +0 -0
  45. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/src/lumos/request/cli.py +0 -0
  46. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/tests/client_helpers_test.py +0 -0
  47. {lumos_identity_cli-0.0.0.dev1 → lumos_identity_cli-2.4.2}/tests/helpers_test.py +0 -0
@@ -26,7 +26,7 @@ Only edit documentation in these locations:
26
26
  After editing any files in `docs/src/`, rebuild the documentation:
27
27
 
28
28
  ```bash
29
- make -C docs docs
29
+ make docs
30
30
  ```
31
31
 
32
32
  This generates:
@@ -66,4 +66,4 @@ When editing `docs/src/*.md`:
66
66
  - Follow existing formatting conventions
67
67
  - Use proper Sphinx/MyST markdown syntax
68
68
  - Include cross-references where appropriate
69
- - Always rebuild with `make -C docs docs` after changes
69
+ - Always rebuild with `make docs` after changes
@@ -44,7 +44,7 @@ jobs:
44
44
  - name: Check for uncommitted documentation changes
45
45
  run: |
46
46
  if [ -n "$(git status --porcelain docs/)" ]; then
47
- echo "::error::Generated documentation is out of date. Please run 'make -C docs docs' and commit the changes."
47
+ echo "::error::Generated documentation is out of date. Please run 'make docs' and commit the changes."
48
48
  echo ""
49
49
  echo "The following files have uncommitted changes:"
50
50
  git status --porcelain docs/
@@ -209,7 +209,7 @@ jobs:
209
209
  - name: Build binary
210
210
  shell: bash
211
211
  run: |
212
- uv run pyinstaller src/lumos/__main__.py --name lumos
212
+ uv run pyinstaller src/lumos/__main__.py --name lumos --collect-data click_extra
213
213
  VERSION="${{ inputs.version || 'dev' }}"
214
214
  tar -czf lumos-${{ matrix.platform }}-v${VERSION}.tar.gz -C ./dist/lumos .
215
215
 
@@ -8,21 +8,10 @@ on:
8
8
  required: false
9
9
  type: boolean
10
10
  default: false
11
- test-publish-to-pypi:
12
- description: "Publish a manual test build to PyPI without creating a tag/release"
13
- required: false
14
- type: boolean
15
- default: false
16
- test-version:
17
- description: "Version for test publish (must be unique on PyPI, e.g. 2.3.0.dev123)"
18
- required: false
19
- type: string
20
- default: ""
21
11
 
22
12
  jobs:
23
13
  prepare:
24
14
  name: Determine next version
25
- if: inputs.test-publish-to-pypi != true
26
15
  runs-on: ubuntu-latest
27
16
  outputs:
28
17
  new-release-version: ${{ steps.semantic.outputs.new-release-version }}
@@ -61,7 +50,7 @@ jobs:
61
50
  build:
62
51
  name: Build
63
52
  needs: prepare
64
- if: inputs.test-publish-to-pypi != true && needs.prepare.outputs.new-release-version != ''
53
+ if: needs.prepare.outputs.new-release-version != ''
65
54
  uses: ./.github/workflows/build.yml
66
55
  with:
67
56
  version: ${{ needs.prepare.outputs.new-release-version }}
@@ -71,7 +60,7 @@ jobs:
71
60
  release:
72
61
  name: Create Release
73
62
  needs: [prepare, build]
74
- if: inputs.test-publish-to-pypi != true && inputs.dry-run != 'true'
63
+ if: inputs.dry-run != 'true'
75
64
  runs-on: ubuntu-latest
76
65
  environment:
77
66
  name: pypi
@@ -150,7 +139,7 @@ jobs:
150
139
  release-homebrew:
151
140
  name: Release Homebrew Tap
152
141
  needs: [prepare, release]
153
- if: inputs.test-publish-to-pypi != true && inputs.dry-run != 'true'
142
+ if: inputs.dry-run != 'true'
154
143
  runs-on: ubuntu-latest
155
144
  steps:
156
145
  - uses: actions/create-github-app-token@v2
@@ -167,43 +156,3 @@ jobs:
167
156
  -H "Accept: application/vnd.github+json" \
168
157
  https://api.github.com/repos/teamlumos/homebrew-tap/dispatches \
169
158
  -d '{"event_type": "release", "client_payload": {"version": "${{ needs.prepare.outputs.new-release-version }}"}}'
170
-
171
- test-publish:
172
- name: Test Publish to PyPI (DO NOT MERGE)
173
- if: inputs.test-publish-to-pypi == true
174
- runs-on: ubuntu-latest
175
- environment:
176
- name: pypi
177
- url: https://pypi.org/project/lumos-identity-cli/
178
- permissions:
179
- id-token: write
180
- contents: read
181
- steps:
182
- - uses: actions/checkout@v4
183
-
184
- - name: Validate test version input
185
- shell: bash
186
- run: |
187
- if [ -z "${{ inputs.test-version }}" ]; then
188
- echo "::error::test-version is required when test-publish-to-pypi=true"
189
- exit 1
190
- fi
191
-
192
- - name: Setup Python
193
- uses: actions/setup-python@v5
194
- with:
195
- python-version: '3.10.6'
196
-
197
- - name: Setup UV
198
- uses: astral-sh/setup-uv@v4
199
- with:
200
- version: latest
201
-
202
- - name: Build test distribution
203
- shell: bash
204
- run: |
205
- uv version "${{ inputs.test-version }}"
206
- uv build
207
-
208
- - name: Publish test build to PyPI
209
- uses: pypa/gh-action-pypi-publish@release/v1
@@ -21,11 +21,11 @@ plugins:
21
21
  - verifyReleaseCmd: echo "new-release-version=${nextRelease.version}" >> $GITHUB_OUTPUT
22
22
  prepareCmd: |
23
23
  uv sync --group docs
24
- make -C docs docs
24
+ make docs
25
25
  successCmd: |
26
26
  export DEBUG=rdme*
27
27
  echo "Publishing documentation to readme.io..."
28
- rdme docs docs/src/_build/readme-io
28
+ rdme docs docs/src/_build/rdme
29
29
  echo "✅ Documentation published to readme.io"
30
30
 
31
31
  - - "@semantic-release/git"
@@ -1,3 +1,15 @@
1
+ ## [2.4.1](https://github.com/teamlumos/lumos-cli/compare/v2.4.0...v2.4.1) (2026-05-19)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * release to pypi ([61057c0](https://github.com/teamlumos/lumos-cli/commit/61057c0218787d30d22c69a06dbe2a17a646ca2d))
7
+
8
+
9
+ ### Reverts
10
+
11
+ * Revert "test(ci): add manual PyPI test-publish path" ([bff18ee](https://github.com/teamlumos/lumos-cli/commit/bff18ee0eeee48fa33c90ce9ae0929800c5a3858))
12
+
1
13
  # [2.4.0](https://github.com/teamlumos/lumos-cli/compare/v2.3.0...v2.4.0) (2026-01-09)
2
14
 
3
15
 
@@ -32,6 +32,8 @@ markdown:
32
32
  @echo "Build finished. The Markdown files are in $(BUILDDIR)/markdown."
33
33
  @cp $(BUILDDIR)/markdown/*.md $(GIT_ROOT)/docs/
34
34
  @echo "Markdown files copied to docs/"
35
+ @# Normalize platform-specific config paths so docs/reference.md matches Linux CI.
36
+ @perl -i -pe 's{~/Library/Application Support/lumos}{~/.config/lumos}g' $(GIT_ROOT)/docs/reference.md
35
37
 
36
38
  # Generate rdme documentation with YAML frontmatter
37
39
  rdme:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lumos-identity-cli
3
- Version: 0.0.0.dev1
3
+ Version: 2.4.2
4
4
  Summary: Lumos command line interface.
5
5
  Project-URL: Homepage, https://github.com/teamlumos/lumos-cli
6
6
  Project-URL: Repository, https://github.com/teamlumos/lumos-cli
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
16
  Requires-Python: <4,>=3.10.6
17
- Requires-Dist: click-extra<8,>=7.4.0
17
+ Requires-Dist: click-extra<8,>=7.10.0
18
18
  Requires-Dist: pick<3,>=2.2.0
19
19
  Requires-Dist: pydantic<3,>=2.6.0
20
20
  Requires-Dist: pytz>=2024.1
@@ -165,11 +165,11 @@ Documentation is built using [Sphinx](https://www.sphinx-doc.org/) with [MyST Ma
165
165
  uv sync --group docs
166
166
 
167
167
  # Build both HTML and Markdown, copy markdown to docs/
168
- make -C docs docs
168
+ make docs
169
169
 
170
170
  # Or build individually:
171
- make -C docs html # HTML only
172
- make -C docs markdown # Markdown only
171
+ make html # HTML only
172
+ make markdown # Markdown only
173
173
 
174
174
  # View the HTML docs
175
175
  open docs/src/_build/html/index.html
@@ -253,7 +253,7 @@ uv version X.Y.Z
253
253
 
254
254
  # Build artifacts
255
255
  uv build
256
- uv run pyinstaller src/lumos/__main__.py
256
+ uv run pyinstaller src/lumos/__main__.py --collect-data click_extra
257
257
 
258
258
  # Create and push tag
259
259
  git tag vX.Y.Z
@@ -375,7 +375,7 @@ lumos list apps --csv > apps.csv
375
375
  All `list` commands support multiple output formats:
376
376
 
377
377
  | Format | Flag | Use Case |
378
- | ------- | ----------- | ------------------------------ |
378
+ |:--------|:------------|:-------------------------------|
379
379
  | Table | (default) | Human-readable terminal output |
380
380
  | JSON | `--json` | Scripting and API integration |
381
381
  | CSV | `--csv` | Spreadsheet import/export |
@@ -10,14 +10,20 @@ brew install teamlumos/tap/lumos
10
10
 
11
11
  This installs a native binary with no Python dependencies required.
12
12
 
13
- ## Python (PyPI)
13
+ ## Python (via PyPI)
14
14
 
15
- Install from PyPI when you want the Python package:
15
+ Install the CLI from [PyPI](https://pypi.org/project/lumos-identity-cli/) with pip or uv:
16
16
 
17
17
  ```bash
18
18
  pip install lumos-identity-cli
19
19
  ```
20
20
 
21
+ ```bash
22
+ uv tool install lumos-identity-cli
23
+ ```
24
+
25
+ Requires Python 3.10.6 or newer. After installation, run `lumos --version` to verify.
26
+
21
27
  ### Supported Platforms
22
28
 
23
29
  - macOS (Apple Silicon / ARM64)
@@ -30,7 +36,7 @@ pip install lumos-identity-cli
30
36
  Download pre-built binaries directly from the [GitHub Releases page](https://github.com/teamlumos/lumos-cli/releases):
31
37
 
32
38
  | Platform | Architecture | Download |
33
- | -------- | --------------------- | --------------------------------- |
39
+ |:---------|:----------------------|:----------------------------------|
34
40
  | Linux | AMD64 (x86_64) | `lumos-linux-amd64-vX.X.X.tar.gz` |
35
41
  | Linux | ARM64 | `lumos-linux-arm64-vX.X.X.tar.gz` |
36
42
  | macOS | ARM64 (Apple Silicon) | `lumos-macos-arm64-vX.X.X.tar.gz` |
@@ -13,28 +13,34 @@ Usage: lumos [OPTIONS] COMMAND [ARGS]...
13
13
  Lumos CLI - Command line interface for Lumos
14
14
 
15
15
  Options:
16
- --time / --no-time Measure and print elapsed execution time. [default: no-
17
- time]
16
+ --time / --no-time Measure and print elapsed execution time. [default:
17
+ no-time]
18
+ --config CONFIG_PATH Location of the configuration file. Supports local
19
+ path with glob patterns or remote URL. [default: ~/.c
20
+ onfig/lumos/{*.toml,*.yaml,*.yml,*.json,*.ini,pyprojec
21
+ t.toml}]
22
+ --no-config Ignore all configuration files and only use command
23
+ line parameters and environment variables.
24
+ --validate-config FILE Validate the configuration file and exit.
18
25
  --color, --ansi / --no-color, --no-ansi
19
- Strip out all colors and all ANSI codes from output.
20
- [default: color]
21
- --config CONFIG_PATH Location of the configuration file. Supports local path
22
- with glob patterns or remote URL. [default:
23
- ~/.config/lumos/*.toml|*.yaml|*.yml|*.json|*.ini]
24
- --no-config Ignore all configuration files and only use command line
25
- parameters and environment variables.
26
- --show-params Show all CLI parameters, their provenance, defaults and
27
- value, then exit.
28
- --table-format [asciidoc|csv|csv-excel|csv-excel-tab|csv-unix|double-grid|double-outline|fancy-grid|fancy-outline|github|grid|heavy-grid|heavy-outline|html|jira|latex|latex-booktabs|latex-longtable|latex-raw|mediawiki|mixed-grid|mixed-outline|moinmoin|orgtbl|outline|pipe|plain|presto|pretty|psql|rounded-grid|rounded-outline|rst|simple|simple-grid|simple-outline|textile|tsv|unsafehtml|vertical|youtrack]
29
- Rendering style of tables. [default: rounded-outline]
30
- --verbosity LEVEL Either CRITICAL, ERROR, WARNING, INFO, DEBUG. [default:
31
- WARNING]
32
- -v, --verbose Increase the default WARNING verbosity by one level for
33
- each additional repetition of the option. [default: 0]
34
- --version Show the version and exit.
35
- -h, --help Show this message and exit.
26
+ Strip out all colors and all ANSI codes from output.
27
+ [default: color]
28
+ --theme [dark|dracula|light|monokai|nord|solarized_dark]
29
+ Color theme used for help screens. [default: dark]
30
+ --show-params Show all CLI parameters, their provenance, defaults
31
+ and value, then exit.
32
+ --table-format [aligned|asciidoc|colon-grid|csv|csv-excel|csv-excel-tab|csv-unix|double-grid|double-outline|fancy-grid|fancy-outline|github|grid|heavy-grid|heavy-outline|hjson|html|jira|json|json5|jsonc|latex|latex-booktabs|latex-longtable|latex-raw|mediawiki|mixed-grid|mixed-outline|moinmoin|orgtbl|outline|pipe|plain|presto|pretty|psql|rounded-grid|rounded-outline|rst|simple|simple-grid|simple-outline|textile|toml|tsv|unsafehtml|vertical|xml|yaml|youtrack]
33
+ Rendering style of tables. [default: rounded-outline]
34
+ --verbosity LEVEL Either CRITICAL, ERROR, WARNING, INFO, DEBUG.
35
+ [default: WARNING]
36
+ -v, --verbose Increase the default WARNING verbosity by one level
37
+ for each additional repetition of the option.
38
+ [default: 0]
39
+ --version Show the version and exit.
40
+ -h, --help Show this message and exit.
36
41
 
37
42
  Commands:
43
+ help Show help for a command.
38
44
  list List various Lumos resources
39
45
  login Login to your Lumos account via OAuth.
40
46
  logout Logout of your Lumos account.
@@ -117,30 +123,36 @@ Usage: lumos list [OPTIONS] COMMAND [ARGS]...
117
123
  List various Lumos resources
118
124
 
119
125
  Options:
120
- --time / --no-time Measure and print elapsed execution time. [default: no-
121
- time]
126
+ --time / --no-time Measure and print elapsed execution time. [default:
127
+ no-time]
128
+ --config CONFIG_PATH Location of the configuration file. Supports local
129
+ path with glob patterns or remote URL. [default: ~/.c
130
+ onfig/lumos/{*.toml,*.yaml,*.yml,*.json,*.ini,pyprojec
131
+ t.toml}]
132
+ --no-config Ignore all configuration files and only use command
133
+ line parameters and environment variables.
134
+ --validate-config FILE Validate the configuration file and exit.
122
135
  --color, --ansi / --no-color, --no-ansi
123
- Strip out all colors and all ANSI codes from output.
124
- [default: color]
125
- --config CONFIG_PATH Location of the configuration file. Supports local path
126
- with glob patterns or remote URL. [default:
127
- ~/.config/lumos/*.toml|*.yaml|*.yml|*.json|*.ini]
128
- --no-config Ignore all configuration files and only use command line
129
- parameters and environment variables.
130
- --show-params Show all CLI parameters, their provenance, defaults and
131
- value, then exit.
132
- --table-format [asciidoc|csv|csv-excel|csv-excel-tab|csv-unix|double-grid|double-outline|fancy-grid|fancy-outline|github|grid|heavy-grid|heavy-outline|html|jira|latex|latex-booktabs|latex-longtable|latex-raw|mediawiki|mixed-grid|mixed-outline|moinmoin|orgtbl|outline|pipe|plain|presto|pretty|psql|rounded-grid|rounded-outline|rst|simple|simple-grid|simple-outline|textile|tsv|unsafehtml|vertical|youtrack]
133
- Rendering style of tables. [default: rounded-outline]
134
- --verbosity LEVEL Either CRITICAL, ERROR, WARNING, INFO, DEBUG. [default:
135
- WARNING]
136
- -v, --verbose Increase the default WARNING verbosity by one level for
137
- each additional repetition of the option. [default: 0]
138
- --version Show the version and exit.
139
- -h, --help Show this message and exit.
136
+ Strip out all colors and all ANSI codes from output.
137
+ [default: color]
138
+ --theme [dark|dracula|light|monokai|nord|solarized_dark]
139
+ Color theme used for help screens. [default: dark]
140
+ --show-params Show all CLI parameters, their provenance, defaults
141
+ and value, then exit.
142
+ --table-format [aligned|asciidoc|colon-grid|csv|csv-excel|csv-excel-tab|csv-unix|double-grid|double-outline|fancy-grid|fancy-outline|github|grid|heavy-grid|heavy-outline|hjson|html|jira|json|json5|jsonc|latex|latex-booktabs|latex-longtable|latex-raw|mediawiki|mixed-grid|mixed-outline|moinmoin|orgtbl|outline|pipe|plain|presto|pretty|psql|rounded-grid|rounded-outline|rst|simple|simple-grid|simple-outline|textile|toml|tsv|unsafehtml|vertical|xml|yaml|youtrack]
143
+ Rendering style of tables. [default: rounded-outline]
144
+ --verbosity LEVEL Either CRITICAL, ERROR, WARNING, INFO, DEBUG.
145
+ [default: WARNING]
146
+ -v, --verbose Increase the default WARNING verbosity by one level
147
+ for each additional repetition of the option.
148
+ [default: 0]
149
+ --version Show the version and exit.
150
+ -h, --help Show this message and exit.
140
151
 
141
152
  Commands:
142
153
  apps List apps in the appstore
143
154
  groups List groups for the domain or the specified --app
155
+ help Show help for a command.
144
156
  permissions List permissions for a given app
145
157
  requests List access requests
146
158
  users List users in Lumos
@@ -297,17 +309,21 @@ Options:
297
309
  request
298
310
  --time / --no-time Measure and print elapsed execution time. [default:
299
311
  no-time]
300
- --color, --ansi / --no-color, --no-ansi
301
- Strip out all colors and all ANSI codes from output.
302
- [default: color]
303
312
  --config CONFIG_PATH Location of the configuration file. Supports local
304
- path with glob patterns or remote URL. [default:
305
- ~/.config/lumos/*.toml|*.yaml|*.yml|*.json|*.ini]
313
+ path with glob patterns or remote URL. [default: ~/.c
314
+ onfig/lumos/{*.toml,*.yaml,*.yml,*.json,*.ini,pyprojec
315
+ t.toml}]
306
316
  --no-config Ignore all configuration files and only use command
307
317
  line parameters and environment variables.
318
+ --validate-config FILE Validate the configuration file and exit.
319
+ --color, --ansi / --no-color, --no-ansi
320
+ Strip out all colors and all ANSI codes from output.
321
+ [default: color]
322
+ --theme [dark|dracula|light|monokai|nord|solarized_dark]
323
+ Color theme used for help screens. [default: dark]
308
324
  --show-params Show all CLI parameters, their provenance, defaults
309
325
  and value, then exit.
310
- --table-format [asciidoc|csv|csv-excel|csv-excel-tab|csv-unix|double-grid|double-outline|fancy-grid|fancy-outline|github|grid|heavy-grid|heavy-outline|html|jira|latex|latex-booktabs|latex-longtable|latex-raw|mediawiki|mixed-grid|mixed-outline|moinmoin|orgtbl|outline|pipe|plain|presto|pretty|psql|rounded-grid|rounded-outline|rst|simple|simple-grid|simple-outline|textile|tsv|unsafehtml|vertical|youtrack]
326
+ --table-format [aligned|asciidoc|colon-grid|csv|csv-excel|csv-excel-tab|csv-unix|double-grid|double-outline|fancy-grid|fancy-outline|github|grid|heavy-grid|heavy-outline|hjson|html|jira|json|json5|jsonc|latex|latex-booktabs|latex-longtable|latex-raw|mediawiki|mixed-grid|mixed-outline|moinmoin|orgtbl|outline|pipe|plain|presto|pretty|psql|rounded-grid|rounded-outline|rst|simple|simple-grid|simple-outline|textile|toml|tsv|unsafehtml|vertical|xml|yaml|youtrack]
311
327
  Rendering style of tables. [default: rounded-outline]
312
328
  --verbosity LEVEL Either CRITICAL, ERROR, WARNING, INFO, DEBUG.
313
329
  [default: WARNING]
@@ -319,6 +335,7 @@ Options:
319
335
 
320
336
  Commands:
321
337
  cancel Cancel a request by ID
338
+ help Show help for a command.
322
339
  poll Poll a request by ID for up to 5 minutes
323
340
  status Check the status of a request by ID or `--last` for the most recent...
324
341
  ```
@@ -330,7 +347,7 @@ Check the status of a request by ID or use `--last` for the most recent request.
330
347
  **Options:**
331
348
 
332
349
  | Flag | Description |
333
- | ------------------- | ---------------------- |
350
+ |:--------------------|:-----------------------|
334
351
  | `--request-id` | Request ID to check |
335
352
  | `--last` | Get the last request |
336
353
  | `--status-only` | Output status only |
@@ -344,7 +361,7 @@ Poll a request by ID for up to 5 minutes, waiting for completion.
344
361
  **Options:**
345
362
 
346
363
  | Flag | Description |
347
- | -------------- | -------------------------------- |
364
+ |:---------------|:---------------------------------|
348
365
  | `--request-id` | Request ID to poll |
349
366
  | `--wait` | How many minutes to wait (max 5) |
350
367
 
@@ -355,6 +372,6 @@ Cancel a pending request.
355
372
  **Options:**
356
373
 
357
374
  | Flag | Description |
358
- | -------------- | ----------------------- |
375
+ |:---------------|:------------------------|
359
376
  | `--request-id` | Request ID to cancel |
360
377
  | `--reason` | Reason for cancellation |
@@ -6,6 +6,11 @@
6
6
  import os
7
7
  import sys
8
8
 
9
+ # Stabilize click help wrapping in generated docs across dev machines and CI.
10
+ import click.formatting
11
+
12
+ click.formatting.FORCED_WIDTH = 78
13
+
9
14
  # Add the source directory to the path for autodoc
10
15
  sys.path.insert(0, os.path.abspath("../../src"))
11
16
 
@@ -42,6 +47,10 @@ extensions = [
42
47
  "sphinx_rdme",
43
48
  ]
44
49
 
50
+ # Required for {click:run} / {click:source} directives in docs/src/reference.md.
51
+ # click-extra 7.10+ gates build-time CLI execution behind this opt-in flag.
52
+ click_extra_enable_exec_directives = True
53
+
45
54
  # MyST Parser configuration
46
55
  myst_enable_extensions = [
47
56
  "colon_fence",
@@ -188,11 +188,11 @@ Documentation is built using [Sphinx](https://www.sphinx-doc.org/) with [MyST Ma
188
188
  uv sync --group docs
189
189
 
190
190
  # Build both HTML and Markdown, copy markdown to docs/
191
- make -C docs docs
191
+ make docs
192
192
 
193
193
  # Or build individually:
194
- make -C docs html # HTML only
195
- make -C docs markdown # Markdown only
194
+ make html # HTML only
195
+ make markdown # Markdown only
196
196
 
197
197
  # View the HTML docs
198
198
  open docs/src/_build/html/index.html
@@ -275,7 +275,7 @@ uv version X.Y.Z
275
275
 
276
276
  # Build artifacts
277
277
  uv build
278
- uv run pyinstaller src/lumos/__main__.py
278
+ uv run pyinstaller src/lumos/__main__.py --collect-data click_extra
279
279
 
280
280
  # Create and push tag
281
281
  git tag vX.Y.Z
@@ -21,14 +21,20 @@ brew install teamlumos/tap/lumos
21
21
 
22
22
  This installs a native binary with no Python dependencies required.
23
23
 
24
- ## Python (PyPI)
24
+ ## Python (via PyPI)
25
25
 
26
- Install from PyPI when you want the Python package:
26
+ Install the CLI from [PyPI](https://pypi.org/project/lumos-identity-cli/) with pip or uv:
27
27
 
28
28
  ```bash
29
29
  pip install lumos-identity-cli
30
30
  ```
31
31
 
32
+ ```bash
33
+ uv tool install lumos-identity-cli
34
+ ```
35
+
36
+ Requires Python 3.10.6 or newer. After installation, run `lumos --version` to verify.
37
+
32
38
  ### Supported Platforms
33
39
 
34
40
  - macOS (Apple Silicon / ARM64)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lumos-identity-cli"
3
- version = "0.0.0.dev1"
3
+ version = "2.4.2"
4
4
  description = "Lumos command line interface."
5
5
  readme = "README.md"
6
6
  authors = [{ name = "lumos-dev" }]
@@ -15,7 +15,7 @@ classifiers = [
15
15
  "Programming Language :: Python :: 3.12",
16
16
  ]
17
17
  dependencies = [
18
- "click-extra>=7.4.0,<8",
18
+ "click-extra>=7.10.0,<8",
19
19
  "pick>=2.2.0,<3",
20
20
  "pydantic>=2.6.0,<3",
21
21
  "pytz>=2024.1",
@@ -15,7 +15,7 @@ client = ApiClient()
15
15
 
16
16
  @group(
17
17
  context_settings={"help_option_names": ["-h", "--help"]},
18
- version=__version__,
18
+ version_fields={"version": __version__},
19
19
  )
20
20
  @option("--debug", is_flag=True, help="Enable debug mode", hidden=True)
21
21
  @pass_context
@@ -5,6 +5,7 @@ These tests validate the end-user experience by testing CLI structure,
5
5
  options, and help text without making actual API calls.
6
6
  """
7
7
 
8
+ import os
8
9
  from unittest.mock import patch
9
10
  from uuid import UUID
10
11
 
@@ -84,7 +85,11 @@ def mock_access_request(mock_user, mock_app, mock_permission):
84
85
 
85
86
  @pytest.fixture
86
87
  def runner():
87
- return CliRunner()
88
+ # GitHub Actions sets FORCE_COLOR=1; click-extra 7.10+ then highlights help
89
+ # keywords with ANSI codes, which breaks plain-string assertions.
90
+ env = os.environ.copy()
91
+ env["FORCE_COLOR"] = "0"
92
+ return CliRunner(env=env)
88
93
 
89
94
 
90
95
  class TestMainCLI:
@@ -189,7 +189,7 @@ wheels = [
189
189
 
190
190
  [[package]]
191
191
  name = "click-extra"
192
- version = "7.4.0"
192
+ version = "7.16.1"
193
193
  source = { registry = "https://pypi.org/simple" }
194
194
  dependencies = [
195
195
  { name = "boltons" },
@@ -202,9 +202,9 @@ dependencies = [
202
202
  { name = "tomli", marker = "python_full_version < '3.11'" },
203
203
  { name = "wcmatch" },
204
204
  ]
205
- sdist = { url = "https://files.pythonhosted.org/packages/50/2a/79e85d7683fd97037326dbdad60524c075ef01dad2adad0a6d6fa40c41a4/click_extra-7.4.0.tar.gz", hash = "sha256:869cd811074a4c5049fb241087e55242bf36ee328133ae932f37730833d9b9d9", size = 86763, upload-time = "2025-12-08T05:06:28.587Z" }
205
+ sdist = { url = "https://files.pythonhosted.org/packages/5e/02/d180104019150d340049dccc41f17d9ba0c3363c44767b01b029716d259b/click_extra-7.16.1.tar.gz", hash = "sha256:a616651275a9673ed4930976a1d6bdd93dc04325cf475ccc38399b0c4396644e", size = 190154, upload-time = "2026-05-15T06:53:28.075Z" }
206
206
  wheels = [
207
- { url = "https://files.pythonhosted.org/packages/5f/8e/61d484461ead9f2c971ba11a9ee591aed0c0e707b2e4ac28ddc26e65e486/click_extra-7.4.0-py3-none-any.whl", hash = "sha256:f827066818b8f41e83189793e64dcd67425b228f62332597e02d3ec9cf4711b5", size = 102505, upload-time = "2025-12-08T05:06:27.164Z" },
207
+ { url = "https://files.pythonhosted.org/packages/d8/91/81c0dacf90bc8d9f778ef74e3993cad0e7c99647afd7352a6e9769c0398c/click_extra-7.16.1-py3-none-any.whl", hash = "sha256:d83cb123f82f13d95bc5d0ffa3d049c3bcdb55278105d0a77059eb0735e9286e", size = 208248, upload-time = "2026-05-15T06:53:26.535Z" },
208
208
  ]
209
209
 
210
210
  [[package]]
@@ -276,15 +276,6 @@ wheels = [
276
276
  { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" },
277
277
  ]
278
278
 
279
- [[package]]
280
- name = "distro"
281
- version = "1.9.0"
282
- source = { registry = "https://pypi.org/simple" }
283
- sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" }
284
- wheels = [
285
- { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" },
286
- ]
287
-
288
279
  [[package]]
289
280
  name = "docutils"
290
281
  version = "0.20.1"
@@ -308,14 +299,11 @@ wheels = [
308
299
 
309
300
  [[package]]
310
301
  name = "extra-platforms"
311
- version = "6.0.0"
302
+ version = "12.0.3"
312
303
  source = { registry = "https://pypi.org/simple" }
313
- dependencies = [
314
- { name = "distro" },
315
- ]
316
- sdist = { url = "https://files.pythonhosted.org/packages/fb/df/73e313d4ecca7b703b6f369d9ed0c2c0d4d8a149e1c675e9915f8426a513/extra_platforms-6.0.0.tar.gz", hash = "sha256:ff0d392e390d2447183af4b300dd4569d2dbf760adf1e30c2b0cefb30ee58488", size = 45977, upload-time = "2026-01-02T09:15:41.019Z" }
304
+ sdist = { url = "https://files.pythonhosted.org/packages/4c/f6/a20c4586c9bd653f596258455652725405f4b734e6270f7fc07a1a498932/extra_platforms-12.0.3.tar.gz", hash = "sha256:0a3201a05f93f18c840f3e9970d33f756a621eea719cbdfa24a514f96c79de7e", size = 72879, upload-time = "2026-04-29T06:47:18.131Z" }
317
305
  wheels = [
318
- { url = "https://files.pythonhosted.org/packages/99/13/0a6a20bd85679d30d8e85d4e63397f8deabe2e9614d6a656ad3e02a76fb7/extra_platforms-6.0.0-py3-none-any.whl", hash = "sha256:732619d1f7db602e12189a66a7de7d8492607452c2d1b5444952174e92864ed0", size = 53001, upload-time = "2026-01-02T09:15:42.193Z" },
306
+ { url = "https://files.pythonhosted.org/packages/46/ef/efc376476f41868ca834b30ed100b250d53da2b4929ee8e63ef48e7b0b03/extra_platforms-12.0.3-py3-none-any.whl", hash = "sha256:b6b7fad4b41e1f9f161cc74c03d963e43a3a34e0ee1991943314685314b01cf6", size = 76128, upload-time = "2026-04-29T06:47:16.945Z" },
319
307
  ]
320
308
 
321
309
  [[package]]
@@ -377,7 +365,7 @@ wheels = [
377
365
 
378
366
  [[package]]
379
367
  name = "lumos-identity-cli"
380
- version = "0.0.0.dev1"
368
+ version = "2.4.2"
381
369
  source = { editable = "." }
382
370
  dependencies = [
383
371
  { name = "click-extra" },
@@ -413,7 +401,7 @@ docs = [
413
401
 
414
402
  [package.metadata]
415
403
  requires-dist = [
416
- { name = "click-extra", specifier = ">=7.4.0,<8" },
404
+ { name = "click-extra", specifier = ">=7.10.0,<8" },
417
405
  { name = "pick", specifier = ">=2.2.0,<3" },
418
406
  { name = "pydantic", specifier = ">=2.6.0,<3" },
419
407
  { name = "pytz", specifier = ">=2024.1" },