lightnow-cli 1.0.3__tar.gz → 1.0.5__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.
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/.github/workflows/ci.yml +0 -1
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/.github/workflows/release.yml +20 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/PKG-INFO +92 -5
- lightnow_cli-1.0.5/README.md +190 -0
- lightnow_cli-1.0.5/docs/development.md +77 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/docs/release.md +7 -1
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/__init__.py +1 -1
- lightnow_cli-1.0.5/lightnow_cli/commands/integrations.py +1902 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/main.py +2 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/pyproject.toml +1 -1
- lightnow_cli-1.0.5/tests/test_authenticated_http.py +41 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_cli.py +4 -1
- lightnow_cli-1.0.5/tests/test_integrations.py +3105 -0
- lightnow_cli-1.0.3/README.md +0 -103
- lightnow_cli-1.0.3/docs/development.md +0 -51
- lightnow_cli-1.0.3/lightnow_cli/commands/integrations.py +0 -659
- lightnow_cli-1.0.3/tests/test_integrations.py +0 -1346
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/.gitignore +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/CHANGELOG.md +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/CONTRIBUTING.md +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/LICENSE +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/Makefile +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/SECURITY.md +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/README.md +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/docs.md +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/openapi.json +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/server.json +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/authenticated_http.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/client.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/__init__.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/auth.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/context.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/publish.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/query.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/runner.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/validate.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/config.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/tls.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/validation.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/__init__.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_auth_flow.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_client.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_config.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_context.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_tls.py +0 -0
- {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_validation.py +0 -0
|
@@ -57,6 +57,26 @@ jobs:
|
|
|
57
57
|
path: dist/*
|
|
58
58
|
if-no-files-found: error
|
|
59
59
|
|
|
60
|
+
github-release:
|
|
61
|
+
name: Create GitHub release
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
needs: build
|
|
64
|
+
permissions:
|
|
65
|
+
contents: write
|
|
66
|
+
|
|
67
|
+
steps:
|
|
68
|
+
- name: Download distributions
|
|
69
|
+
uses: actions/download-artifact@v4
|
|
70
|
+
with:
|
|
71
|
+
name: python-distributions
|
|
72
|
+
path: dist
|
|
73
|
+
|
|
74
|
+
- name: Publish GitHub release notes
|
|
75
|
+
uses: softprops/action-gh-release@v2
|
|
76
|
+
with:
|
|
77
|
+
generate_release_notes: true
|
|
78
|
+
files: dist/*
|
|
79
|
+
|
|
60
80
|
publish-pypi:
|
|
61
81
|
name: Publish to PyPI
|
|
62
82
|
runs-on: ubuntu-latest
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lightnow-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.5
|
|
4
4
|
Summary: Official LightNow CLI for MCP registry discovery, client config sync, and local MCP runner workflows
|
|
5
5
|
Project-URL: Homepage, https://github.com/lightnow-ai/lightnow-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/lightnow-ai/lightnow-cli
|
|
@@ -46,23 +46,37 @@ Description-Content-Type: text/markdown
|
|
|
46
46
|
|
|
47
47
|
The **LightNow CLI** connects your local MCP clients with LightNow.
|
|
48
48
|
|
|
49
|
-
Use it to discover MCP servers,
|
|
50
|
-
|
|
49
|
+
Use it to sign in, discover MCP servers, configure local AI clients such as
|
|
50
|
+
Codex, Claude Desktop, Cursor, VS Code and Google Antigravity, and keep MCP
|
|
51
|
+
server configuration and secrets managed by LightNow.
|
|
51
52
|
|
|
52
53
|
## Install
|
|
53
54
|
|
|
54
|
-
Requirements:
|
|
55
|
+
Requirements for Python-based installs:
|
|
55
56
|
|
|
56
57
|
- Python 3.11 or higher
|
|
57
58
|
- `pipx`
|
|
58
59
|
- a [LightNow account](https://www.lightnow.ai/)
|
|
59
60
|
|
|
61
|
+
Install the CLI with Homebrew:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
brew tap lightnow-ai/tap
|
|
65
|
+
brew install lightnow-cli
|
|
66
|
+
```
|
|
67
|
+
|
|
60
68
|
Install the CLI with `pipx`:
|
|
61
69
|
|
|
62
70
|
```bash
|
|
63
71
|
pipx install lightnow-cli
|
|
64
72
|
```
|
|
65
73
|
|
|
74
|
+
Or install it with `uv`:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
uv tool install lightnow-cli
|
|
78
|
+
```
|
|
79
|
+
|
|
66
80
|
If you prefer installing directly from the public repository:
|
|
67
81
|
|
|
68
82
|
```bash
|
|
@@ -102,7 +116,73 @@ Show your favorites:
|
|
|
102
116
|
lightnow favorites
|
|
103
117
|
```
|
|
104
118
|
|
|
105
|
-
##
|
|
119
|
+
## Configure an MCP Client
|
|
120
|
+
|
|
121
|
+
The recommended setup is Local Proxy mode: your MCP client gets one `LightNow`
|
|
122
|
+
entry and the local proxy resolves the configured MCP servers and secrets at
|
|
123
|
+
runtime.
|
|
124
|
+
|
|
125
|
+
Install the Local Proxy executable first with Homebrew:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
brew tap lightnow-ai/tap
|
|
129
|
+
brew install lightnow-proxy
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Or install it with `pipx`:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
pipx install lightnow-proxy
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Or install it with `uv`:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
uv tool install lightnow-proxy
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
The proxy package installs the `lightnow-proxy` command used in MCP client configs.
|
|
145
|
+
|
|
146
|
+
For local development from a checkout:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
uv tool install --from /path/to/lightnow-proxy lightnow-proxy
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Then sync your client:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
lightnow sync --client codex --local-proxy
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Other common clients:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
lightnow sync --client claude-desktop --local-proxy
|
|
162
|
+
lightnow sync --client antigravity --local-proxy
|
|
163
|
+
lightnow sync --client cursor --local-proxy
|
|
164
|
+
lightnow sync --client vscode --local-proxy
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Let LightNow choose the configured organization policy for a client:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
lightnow sync --client codex --from-settings
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Check whether a client is configured as expected:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
lightnow config-status --client codex
|
|
177
|
+
lightnow config-status --client claude-desktop --json
|
|
178
|
+
lightnow config-status --client cursor --json
|
|
179
|
+
lightnow config-status --client vscode --json
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
For details, examples, diagrams and troubleshooting, see
|
|
183
|
+
[Connect MCP clients](https://docs.lightnow.ai/getting-started/sync-mcp-clients).
|
|
184
|
+
|
|
185
|
+
### Direct Sync
|
|
106
186
|
|
|
107
187
|
Sync your default LightNow runtime profile into Codex:
|
|
108
188
|
|
|
@@ -123,6 +203,13 @@ files:
|
|
|
123
203
|
lightnow sync --client codex --runner
|
|
124
204
|
```
|
|
125
205
|
|
|
206
|
+
For daemon-style local testing, `--local-proxy-transport http` writes a
|
|
207
|
+
localhost Streamable HTTP entry instead of a stdio auto-start entry.
|
|
208
|
+
|
|
209
|
+
Note: Google has moved individual Gemini CLI users to Antigravity. LightNow
|
|
210
|
+
keeps `gemini-cli` support for Enterprise/API-key environments, but
|
|
211
|
+
`antigravity` is the recommended Google local client target for individuals.
|
|
212
|
+
|
|
126
213
|
## Run One Server
|
|
127
214
|
|
|
128
215
|
Run a configured MCP server through LightNow:
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# LightNow CLI
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/lightnow-cli/)
|
|
4
|
+
|
|
5
|
+
The **LightNow CLI** connects your local MCP clients with LightNow.
|
|
6
|
+
|
|
7
|
+
Use it to sign in, discover MCP servers, configure local AI clients such as
|
|
8
|
+
Codex, Claude Desktop, Cursor, VS Code and Google Antigravity, and keep MCP
|
|
9
|
+
server configuration and secrets managed by LightNow.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
Requirements for Python-based installs:
|
|
14
|
+
|
|
15
|
+
- Python 3.11 or higher
|
|
16
|
+
- `pipx`
|
|
17
|
+
- a [LightNow account](https://www.lightnow.ai/)
|
|
18
|
+
|
|
19
|
+
Install the CLI with Homebrew:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
brew tap lightnow-ai/tap
|
|
23
|
+
brew install lightnow-cli
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Install the CLI with `pipx`:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pipx install lightnow-cli
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Or install it with `uv`:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uv tool install lightnow-cli
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
If you prefer installing directly from the public repository:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pipx install git+https://github.com/lightnow-ai/lightnow-cli.git
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Sign In
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
lightnow login
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The CLI opens a browser window for LightNow authentication. After sign-in, check
|
|
51
|
+
your session with:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
lightnow status
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Find MCP Servers
|
|
58
|
+
|
|
59
|
+
Search the LightNow Registry:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
lightnow search sonarqube
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Show details for one server:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
lightnow info io.github.SonarSource/sonarqube-mcp-server
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Show your favorites:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
lightnow favorites
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Configure an MCP Client
|
|
78
|
+
|
|
79
|
+
The recommended setup is Local Proxy mode: your MCP client gets one `LightNow`
|
|
80
|
+
entry and the local proxy resolves the configured MCP servers and secrets at
|
|
81
|
+
runtime.
|
|
82
|
+
|
|
83
|
+
Install the Local Proxy executable first with Homebrew:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
brew tap lightnow-ai/tap
|
|
87
|
+
brew install lightnow-proxy
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Or install it with `pipx`:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pipx install lightnow-proxy
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Or install it with `uv`:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
uv tool install lightnow-proxy
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The proxy package installs the `lightnow-proxy` command used in MCP client configs.
|
|
103
|
+
|
|
104
|
+
For local development from a checkout:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
uv tool install --from /path/to/lightnow-proxy lightnow-proxy
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Then sync your client:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
lightnow sync --client codex --local-proxy
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Other common clients:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
lightnow sync --client claude-desktop --local-proxy
|
|
120
|
+
lightnow sync --client antigravity --local-proxy
|
|
121
|
+
lightnow sync --client cursor --local-proxy
|
|
122
|
+
lightnow sync --client vscode --local-proxy
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Let LightNow choose the configured organization policy for a client:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
lightnow sync --client codex --from-settings
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Check whether a client is configured as expected:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
lightnow config-status --client codex
|
|
135
|
+
lightnow config-status --client claude-desktop --json
|
|
136
|
+
lightnow config-status --client cursor --json
|
|
137
|
+
lightnow config-status --client vscode --json
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
For details, examples, diagrams and troubleshooting, see
|
|
141
|
+
[Connect MCP clients](https://docs.lightnow.ai/getting-started/sync-mcp-clients).
|
|
142
|
+
|
|
143
|
+
### Direct Sync
|
|
144
|
+
|
|
145
|
+
Sync your default LightNow runtime profile into Codex:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
lightnow sync --client codex
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Preview changes before writing:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
lightnow sync --client codex --dry-run
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Use runner mode when you do not want secrets written into client configuration
|
|
158
|
+
files:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
lightnow sync --client codex --runner
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
For daemon-style local testing, `--local-proxy-transport http` writes a
|
|
165
|
+
localhost Streamable HTTP entry instead of a stdio auto-start entry.
|
|
166
|
+
|
|
167
|
+
Note: Google has moved individual Gemini CLI users to Antigravity. LightNow
|
|
168
|
+
keeps `gemini-cli` support for Enterprise/API-key environments, but
|
|
169
|
+
`antigravity` is the recommended Google local client target for individuals.
|
|
170
|
+
|
|
171
|
+
## Run One Server
|
|
172
|
+
|
|
173
|
+
Run a configured MCP server through LightNow:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
lightnow run --profile default --server sonarqube
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## More Documentation
|
|
180
|
+
|
|
181
|
+
- [CLI usage guide](https://docs.lightnow.ai/getting-started/sync-mcp-clients)
|
|
182
|
+
- [CLI reference](https://docs.lightnow.ai/reference/cli)
|
|
183
|
+
- [Local development](docs/development.md)
|
|
184
|
+
- [Release process](docs/release.md)
|
|
185
|
+
- [Security policy](SECURITY.md)
|
|
186
|
+
- [Contributing](CONTRIBUTING.md)
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
Apache-2.0. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Local Development
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
python3 -m venv .venv
|
|
7
|
+
source .venv/bin/activate
|
|
8
|
+
pip install -e ".[dev]"
|
|
9
|
+
lightnow --help
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
For local editable installs through `pipx`:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pipx install --force --editable .
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Checks
|
|
19
|
+
|
|
20
|
+
Run all checks:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
make all
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Run targeted checks:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
make lint
|
|
30
|
+
make format-check
|
|
31
|
+
make isort-check
|
|
32
|
+
make type-check
|
|
33
|
+
make test
|
|
34
|
+
make cli-check
|
|
35
|
+
make integration
|
|
36
|
+
make package
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The tests cover command parsing, validation logic, token refresh, registry
|
|
40
|
+
queries, sync patching, local runner behavior, and secret redaction.
|
|
41
|
+
|
|
42
|
+
## Local Proxy Config Posture
|
|
43
|
+
|
|
44
|
+
`lightnow sync --client <client> --local-proxy` should leave the target MCP
|
|
45
|
+
client with one LightNow entry and no unmanaged MCP servers unless the customer
|
|
46
|
+
explicitly keeps a mixed setup.
|
|
47
|
+
|
|
48
|
+
Use the redacted status command while testing client integrations:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
lightnow config-status --client codex
|
|
52
|
+
lightnow config-status --client claude-desktop
|
|
53
|
+
lightnow config-status --client antigravity --json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Expected states:
|
|
57
|
+
|
|
58
|
+
- `managed`: only the LightNow Local Proxy entry is configured.
|
|
59
|
+
- `mixed`: LightNow Local Proxy exists, but unmanaged MCP entries are also
|
|
60
|
+
present.
|
|
61
|
+
- `unmanaged`: MCP entries exist, but none point at the LightNow Local Proxy.
|
|
62
|
+
- `legacy_runner`: older per-server `lightnow run` wrappers are still present.
|
|
63
|
+
- `missing`, `invalid` or `unreadable`: the client config cannot be used as-is.
|
|
64
|
+
|
|
65
|
+
The command must not print secrets, headers or payloads. It is the local building
|
|
66
|
+
block for future UI-led enablement and enterprise posture reporting.
|
|
67
|
+
|
|
68
|
+
## Local LightNow Environment
|
|
69
|
+
|
|
70
|
+
Use the local profile when working against the LightNow local stack:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
lightnow login --local
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Local HTTPS verification depends on the workspace local CA. Run the LightNow
|
|
77
|
+
local stack certificate setup before using `*.lightnow.local` endpoints.
|
|
@@ -22,7 +22,7 @@ Before publishing a release:
|
|
|
22
22
|
```bash
|
|
23
23
|
make all
|
|
24
24
|
```
|
|
25
|
-
4. Verify the GitHub Actions `CI` workflow is green on `
|
|
25
|
+
4. Verify the GitHub Actions `CI` workflow is green on `main`.
|
|
26
26
|
5. Configure PyPI Trusted Publishing before the first PyPI release:
|
|
27
27
|
- PyPI project name: `lightnow-cli`
|
|
28
28
|
- Owner: `lightnow-ai`
|
|
@@ -38,7 +38,13 @@ Before publishing a release:
|
|
|
38
38
|
- tests pass,
|
|
39
39
|
- source distribution and wheel are built,
|
|
40
40
|
- `twine check` passes,
|
|
41
|
+
- a GitHub Release is created with generated release notes and distribution artifacts,
|
|
41
42
|
- PyPI publish succeeds through Trusted Publishing.
|
|
43
|
+
8. Update the Homebrew tap after the release artifact is available:
|
|
44
|
+
- repository: `lightnow-ai/homebrew-tap`
|
|
45
|
+
- formula: `Formula/lightnow-cli.rb`
|
|
46
|
+
- replace the formula template URL, version and SHA256 with the released artifact,
|
|
47
|
+
- run `brew audit`, `brew install --build-from-source`, and `brew test`.
|
|
42
48
|
|
|
43
49
|
Do not publish with long-lived local PyPI tokens.
|
|
44
50
|
|