turnout-cli 0.17.0 → 0.19.0

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 (2) hide show
  1. package/README.md +16 -12
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -32,10 +32,15 @@ Start working, from wherever you happen to be:
32
32
 
33
33
  ```console
34
34
  $ cd ~/dev/web/src/components
35
- $ turnout dev
36
- [web] pnpm dev
35
+ $ turnout dev --open
36
+ [web] pnpm dev --port 5100
37
+ [web] http://web.localhost -> dev server port 5100
38
+ ◇ web ready in 1.4s - http://web.localhost
37
39
  ```
38
40
 
41
+ The server is up, the page is open, and the console stays quiet from here -
42
+ until something breaks, which is when you want it loud.
43
+
39
44
  Move the whole contour at once when the frontend and the API must agree:
40
45
 
41
46
  ```console
@@ -74,7 +79,7 @@ And see what has been going on:
74
79
 
75
80
  ```console
76
81
  $ turnout status
77
- turnout 0.17.0
82
+ turnout 0.19.0
78
83
  Data directory: ~/.local/share/lacodda/turnout
79
84
  Apps: 2 (api, web)
80
85
  Servers: 2 (prod-eu, staging)
@@ -85,8 +90,9 @@ Targets: 1 (web-prod-eu)
85
90
  Bindings:
86
91
  api -> staging
87
92
  web -> prod-eu
88
- Gateway: running (pid 24180; web:7100 -> VITE_API_URL, api:7101 -> TURNOUT_GATEWAY_URL)
93
+ Gateway: running (pid 24180)
89
94
  Front: http://localhost - http://NAME.localhost
95
+ Spare: web:7100 -> VITE_API_URL, api:7101 -> TURNOUT_GATEWAY_URL
90
96
  Recent:
91
97
  2026-08-09T01:15:02Z deploy web -> prod-eu (142 files)
92
98
  2026-08-09T01:12:44Z use web -> prod-eu
@@ -96,13 +102,14 @@ Recent:
96
102
 
97
103
  - **A dev gateway.** Apps always talk to `localhost`; turnout forwards to the selected stand over HTTP or HTTPS (self-signed certificates allowed per server), rewrites redirects, proxies WebSockets, and keeps a cookie jar per app+stand pair so switching does not log you out.
98
104
  - **One address per app.** `http://myapp.localhost` reaches the dev server turnout started for `myapp`, whichever port it took - the gateway's front door routes by name, and `*.localhost` needs no hosts file. The port is assigned once and handed to the server as `PORT` and `{port}`; `turnout open myapp` opens the address.
99
- - **The port is written once.** An app's gateway port lives in turnout only; the app is handed the address - `turnout dev` sets it as an environment variable the framework can see (`VITE_API_URL`, `REACT_APP_API_URL`, your pick), and a `.env.development.local` that turnout keeps in step covers a dev server started from an IDE. `build` never gets it, so a production bundle cannot bake in localhost.
105
+ - **You never type a port.** turnout assigns an app's gateway port when you register it and its dev port on the first `dev`; both live in turnout only, and the app is handed the address - `turnout dev` sets it as an environment variable the framework can see (`VITE_API_URL`, `REACT_APP_API_URL`, your pick), and a `.env.development.local` that turnout keeps in step covers a dev server started from an IDE. `build` never gets it, so a production bundle cannot bake in localhost.
100
106
  - **Servers, logins and paths kept apart.** A machine, the credential that logs into it and the directory files land in are three named entities. Define a deploy account once and point every stand at it; declare a web root once and reuse it across servers.
101
107
  - **Named deploy targets.** The four of them under one name: `turnout deploy web-prod-eu` from any directory, no flags to re-type. A first deploy that has no target yet offers to save the one it just used.
102
108
  - **Key access set up, not just used.** `turnout key setup prod` generates an ed25519 key, authorizes it on the server, proves it signs in and only then switches the credential over - so a server-side misconfiguration never costs you the password that still works. Windows servers included: an administrator account keeps its keys in a different file that sshd reads instead, and turnout writes to the right one.
103
109
  - **The SSH agent signs for you.** A credential can authenticate with a key the agent already holds unlocked, so a passphrase is typed once per login session instead of once per command - turnout never reads the key file at all. `SSH_AUTH_SOCK` on Linux and macOS; on Windows, Pageant or the OpenSSH agent service, whichever is running. An agent holding several keys is the normal case: they are offered in turn and the first the server accepts wins.
104
110
  - **Secrets in the OS keyring** - Windows Credential Manager, macOS Keychain, Linux Secret Service. A secret belongs to a credential, so one `pass set` covers every stand that credential reaches. Copy it to the clipboard with one command; nothing lands in a config file, and `status` only ever reports *that* a credential exists.
105
111
  - **Commands from any directory.** `dev`, `build`, `test`, `lint` and any custom command run in the right project folder. Commands are taken from your actual `package.json` scripts, so a project whose dev script is `serve` still answers to `turnout dev`.
112
+ - **A quiet console.** A build shows a loader and its elapsed time, not two minutes of scrollback; a dev server goes quiet once it reports itself and speaks again only when something breaks. A failure prints its output on the spot - no re-run to see what went wrong - and every job's output is kept in a log file whatever the terminal showed. `-v` gives you all of it, and so does any pipe, so scripts and CI logs are unchanged.
106
113
  - **A hand on the server.** `turnout ssh web-prod` opens a session with host, port, user and key from the catalogs, in the deploy directory, the password already on the clipboard; `turnout exec web-prod -- docker compose ps` runs one command there and hands back its exit code.
107
114
  - **Deploy over SSH/SFTP** - build, upload, restart, with remote backup and restore when a release goes wrong. Artifacts travel as a single archive instead of thousands of round trips, falling back to file-by-file when the server cannot unpack one. Linux and Windows servers alike: turnout detects which shell answers SSH and phrases every remote command in it.
108
115
  - **Portable settings.** `export` writes your apps, servers, credentials, paths, targets and groups to one file and `import` merges it on another machine; secrets come along only when you ask, sealed with a passphrase.
@@ -169,13 +176,10 @@ Full command reference and concepts: **[lacodda.github.io/turnout](https://lacod
169
176
 
170
177
  ## Status
171
178
 
172
- Everything above works today. What is next:
173
-
174
- - [ ] **Background runs** - `dev --detach`, `ps`, `logs`, `stop`, OS notifications
175
- - [ ] **Observability** - gateway request log, `doctor`, `report` for handing context to an assistant
176
- - [ ] **Deploy consists** - atomic deploy and rollback across a group of apps
177
-
178
- Released versions and what landed in each: [CHANGELOG on the Releases page](https://github.com/lacodda/turnout/releases).
179
+ v0.19.0, in daily use. Everything above works today: stands and switching
180
+ between them, the gateway, secrets in the OS keyring, the quiet console, and
181
+ build and deploy from any directory. What landed in each version:
182
+ [the Releases page](https://github.com/lacodda/turnout/releases).
179
183
 
180
184
  ## Documentation
181
185
 
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "turnout-cli",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "turnout": {
5
- "binary": "v0.17.0"
5
+ "binary": "v0.19.0"
6
6
  },
7
7
  "description": "A developer's switchyard: point local apps at any backend stand, keep servers and secrets at hand, build and deploy from any directory",
8
8
  "license": "MIT",