@crvouga/atlas 0.7.0 → 0.8.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.
- package/CHANGELOG.md +6 -0
- package/README.md +44 -3
- package/docs/deploying.md +59 -2
- package/docs/server.md +2 -0
- package/llms-full.txt +61 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -68,6 +68,48 @@ live step logs and a Running status filter. Producers send heartbeats every
|
|
|
68
68
|
configure `ATLAS_RUN_TIMEOUT_SECONDS` and `ATLAS_RUN_STALL_SECONDS` (0 disables the progress timeout),
|
|
69
69
|
or edit these settings in the client. An interruption never turns missing outcomes into passes.
|
|
70
70
|
|
|
71
|
+
## Deploy to Railway without code
|
|
72
|
+
|
|
73
|
+
Copy this image URI into **Railway → New service → Docker image**:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
ghcr.io/crvouga/atlas:latest
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The image includes the Atlas server and viewer; hosting it needs no repository, Dockerfile, build command
|
|
80
|
+
or package installation. [`latest` on GHCR](https://github.com/users/crvouga/packages/container/atlas) follows
|
|
81
|
+
the newest checked `main` image, independently of npm releases.
|
|
82
|
+
|
|
83
|
+
1. Leave the start command unset. Add a long random secret as `ATLAS_TOKEN` (at least 12 characters;
|
|
84
|
+
use 48 or more) and set `RAILWAY_RUN_UID=0` for [Railway volume permissions](https://docs.railway.com/volumes#permissions).
|
|
85
|
+
2. Attach a persistent volume at `/data` and keep one replica so reports and server settings survive updates.
|
|
86
|
+
3. Set the healthcheck path to `/readyz` and generate a public domain. Railway supplies `PORT`;
|
|
87
|
+
leave `ATLAS_PORT` unset. Open the domain and sign in with the token as the password (any username).
|
|
88
|
+
4. Enable **Settings → Source → Configure Auto Updates → Anytime** to follow `latest`.
|
|
89
|
+
[Railway checks for image updates periodically](https://docs.railway.com/deployments/image-auto-updates);
|
|
90
|
+
detection can take a few hours.
|
|
91
|
+
|
|
92
|
+
For the exact image from a run, open **[CI](https://github.com/crvouga/atlas/actions/workflows/ci.yml) →
|
|
93
|
+
run → Summary → Atlas CI**. The summary includes a copyable full commit tag, the immutable registry digest,
|
|
94
|
+
whether that run updated `latest`, all job results, npm release details and artifact links. Use the commit
|
|
95
|
+
tag to pin or roll back a deployment. The [deployment guide](docs/deploying.md#run-it) covers optional reader
|
|
96
|
+
and publisher tokens, bucket storage and sending results from your projects.
|
|
97
|
+
|
|
98
|
+
### Deploy without authentication
|
|
99
|
+
|
|
100
|
+
For anonymous access, use this image in Railway instead:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
ghcr.io/crvouga/atlas-insecure:latest
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
It contains the same server and viewer, with anonymous reading, uploads and administration enabled.
|
|
107
|
+
Follow the Railway steps above, leaving `ATLAS_TOKEN`, `ATLAS_PUBLISH_TOKEN`, `ATLAS_READ_TOKEN` and
|
|
108
|
+
configuration-file auth tokens unset. Open the generated domain directly; no sign-in is required.
|
|
109
|
+
Anyone who discovers the URL can read reports, upload results and change settings. An unlisted URL
|
|
110
|
+
is not access control. See the [anonymous deployment guide](docs/deploying.md#deploy-without-authentication)
|
|
111
|
+
for a token-free project configuration and verification commands.
|
|
112
|
+
|
|
71
113
|
## For AI agents
|
|
72
114
|
|
|
73
115
|
Atlas is built to be integrated and operated by agents, with nothing to click and nothing to guess.
|
|
@@ -187,9 +229,8 @@ unless you choose a bucket. `atlas dev` runs the same server with the client's d
|
|
|
187
229
|
development is one host too. See [the server](docs/server.md) and
|
|
188
230
|
[running Atlas for a project](docs/deploying.md).
|
|
189
231
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
The [deployment guide](docs/deploying.md#run-it) covers the token, persistent volume and healthcheck.
|
|
232
|
+
Deploy the server using the [Railway setup above](#deploy-to-railway-without-code), or follow the
|
|
233
|
+
[deployment guide](docs/deploying.md#run-it) for other hosts.
|
|
193
234
|
|
|
194
235
|
```sh
|
|
195
236
|
atlas serve # the project's server, at :8080 (ATLAS_TOKEN says who may upload)
|
package/docs/deploying.md
CHANGED
|
@@ -214,7 +214,15 @@ use a named `--store project=s3://… --write project` to put uploads in a share
|
|
|
214
214
|
### Run it
|
|
215
215
|
|
|
216
216
|
**Railway (deploy an image, no repository or code changes).** Create a service from the Docker image
|
|
217
|
-
`ghcr.io/crvouga/atlas:latest`.
|
|
217
|
+
`ghcr.io/crvouga/atlas:latest`. Copy the URI below into Railway's image field:
|
|
218
|
+
|
|
219
|
+
```text
|
|
220
|
+
ghcr.io/crvouga/atlas:latest
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
For a specific revision, open a [CI run](https://github.com/crvouga/atlas/actions/workflows/ci.yml)'s
|
|
224
|
+
**Summary → Atlas CI**: it includes the published commit image URI, immutable digest and whether that run
|
|
225
|
+
updated `latest`. Pull request builds and failed publications are labelled accordingly.
|
|
218
226
|
|
|
219
227
|
1. In Railway choose **New service → Docker image** and enter `ghcr.io/crvouga/atlas:latest`.
|
|
220
228
|
Leave the start command unset: the image includes the server and the prebuilt viewer.
|
|
@@ -239,7 +247,56 @@ your project's test results still needs the integration described there.
|
|
|
239
247
|
For bucket storage instead, set `ATLAS_STORE=project=s3://my-bucket/atlas/my-project`, `ATLAS_WRITE=project`,
|
|
240
248
|
and the bucket credentials. Keep the `/data` volume for server settings and local state.
|
|
241
249
|
|
|
242
|
-
|
|
250
|
+
### Deploy without authentication
|
|
251
|
+
|
|
252
|
+
Use `ghcr.io/crvouga/atlas-insecure:latest` for a server that requires no sign-in or API token. It is built
|
|
253
|
+
from the same commit, server and viewer as `ghcr.io/crvouga/atlas:latest`, with `ATLAS_INSECURE=true`
|
|
254
|
+
to allow listening on the network without tokens. Anonymous callers have full read, publish and admin access.
|
|
255
|
+
Anyone who discovers an unlisted URL can read reports, upload results and change settings; the URL is
|
|
256
|
+
not access control.
|
|
257
|
+
|
|
258
|
+
In Railway, create a **Docker image** service with:
|
|
259
|
+
|
|
260
|
+
```text
|
|
261
|
+
ghcr.io/crvouga/atlas-insecure:latest
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Leave the start command unset. Attach a persistent volume at `/data`, set `RAILWAY_RUN_UID=0`, keep one
|
|
265
|
+
replica, set the healthcheck to `/readyz` and generate a public domain. Leave `ATLAS_PORT` unset so Railway's
|
|
266
|
+
`PORT` is used. Enable **Settings → Source → Configure Auto Updates → Anytime** to follow `latest`.
|
|
267
|
+
Do not set `ATLAS_TOKEN`, `ATLAS_PUBLISH_TOKEN` or `ATLAS_READ_TOKEN`, or add `auth.tokens` to
|
|
268
|
+
`/data/atlas.server.json`: configured tokens still enable authentication. When reusing a volume from an
|
|
269
|
+
authenticated deployment, remove its saved auth tokens first. Open the domain directly, including `/admin`
|
|
270
|
+
for settings (leave the token field blank and choose **Load settings**).
|
|
271
|
+
|
|
272
|
+
Verify anonymous reads and uploads without an Authorization header:
|
|
273
|
+
|
|
274
|
+
```sh
|
|
275
|
+
curl --fail https://YOUR-DOMAIN/readyz
|
|
276
|
+
curl --fail https://YOUR-DOMAIN/api/server
|
|
277
|
+
curl --fail 'https://YOUR-DOMAIN/api/checks?project=my-project' \
|
|
278
|
+
-H 'content-type: application/json' \
|
|
279
|
+
-d '{"producer":"smoke","checks":[{"id":"deployed","title":"Deployed","status":"passed"}]}'
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Readiness returns HTTP 200, `/api/server` reports `"open":true` and `"role":"admin"`, and the upload returns
|
|
283
|
+
HTTP 201. Configure a project with `ATLAS_STORE=https://YOUR-DOMAIN` and `ATLAS_PROJECT=my-project`;
|
|
284
|
+
leave its `ATLAS_TOKEN` unset. Use the same publishing commands described in
|
|
285
|
+
[sending results](#3-send-results-from-ci-and-from-laptops), omitting credentials.
|
|
286
|
+
|
|
287
|
+
For local Docker:
|
|
288
|
+
|
|
289
|
+
```sh
|
|
290
|
+
docker run --pull always -p 8080:8080 -v atlas-data:/data ghcr.io/crvouga/atlas-insecure:latest
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Both images publish full commit tags for pinning or rollback. A new GHCR package must be made Public
|
|
294
|
+
once before Railway can pull without registry credentials; see
|
|
295
|
+
[image publication](https://github.com/crvouga/atlas/blob/main/docs/releasing.md#server-image).
|
|
296
|
+
|
|
297
|
+
### Docker
|
|
298
|
+
|
|
299
|
+
The same published image works anywhere Docker runs. It already contains the client (the same
|
|
243
300
|
for every project: the server tells the page where its data is), and keeps results on the volume at `/data`:
|
|
244
301
|
|
|
245
302
|
```sh
|
package/docs/server.md
CHANGED
|
@@ -56,6 +56,8 @@ ATLAS_STORE=http://127.0.0.1:5180 bunx atlas report publish --producer unit --ju
|
|
|
56
56
|
For Railway, deploy `ghcr.io/crvouga/atlas:latest` directly: the image contains the server and
|
|
57
57
|
viewer, and every green `main` push updates it. See [running Atlas for a project](deploying.md#run-it) for
|
|
58
58
|
Railway's volume, tokens, healthcheck and image auto updates, or for Docker, Kubernetes and CI.
|
|
59
|
+
For anonymous reading, uploads and administration, use `ghcr.io/crvouga/atlas-insecure:latest` with no tokens
|
|
60
|
+
configured; see [deploying without authentication](deploying.md#deploy-without-authentication).
|
|
59
61
|
|
|
60
62
|
## Configuration
|
|
61
63
|
|
package/llms-full.txt
CHANGED
|
@@ -1008,6 +1008,8 @@ ATLAS_STORE=http://127.0.0.1:5180 bunx atlas report publish --producer unit --ju
|
|
|
1008
1008
|
For Railway, deploy `ghcr.io/crvouga/atlas:latest` directly: the image contains the server and
|
|
1009
1009
|
viewer, and every green `main` push updates it. See [running Atlas for a project](deploying.md#run-it) for
|
|
1010
1010
|
Railway's volume, tokens, healthcheck and image auto updates, or for Docker, Kubernetes and CI.
|
|
1011
|
+
For anonymous reading, uploads and administration, use `ghcr.io/crvouga/atlas-insecure:latest` with no tokens
|
|
1012
|
+
configured; see [deploying without authentication](deploying.md#deploy-without-authentication).
|
|
1011
1013
|
|
|
1012
1014
|
## Configuration
|
|
1013
1015
|
|
|
@@ -1586,7 +1588,15 @@ use a named `--store project=s3://… --write project` to put uploads in a share
|
|
|
1586
1588
|
### Run it
|
|
1587
1589
|
|
|
1588
1590
|
**Railway (deploy an image, no repository or code changes).** Create a service from the Docker image
|
|
1589
|
-
`ghcr.io/crvouga/atlas:latest`.
|
|
1591
|
+
`ghcr.io/crvouga/atlas:latest`. Copy the URI below into Railway's image field:
|
|
1592
|
+
|
|
1593
|
+
```text
|
|
1594
|
+
ghcr.io/crvouga/atlas:latest
|
|
1595
|
+
```
|
|
1596
|
+
|
|
1597
|
+
For a specific revision, open a [CI run](https://github.com/crvouga/atlas/actions/workflows/ci.yml)'s
|
|
1598
|
+
**Summary → Atlas CI**: it includes the published commit image URI, immutable digest and whether that run
|
|
1599
|
+
updated `latest`. Pull request builds and failed publications are labelled accordingly.
|
|
1590
1600
|
|
|
1591
1601
|
1. In Railway choose **New service → Docker image** and enter `ghcr.io/crvouga/atlas:latest`.
|
|
1592
1602
|
Leave the start command unset: the image includes the server and the prebuilt viewer.
|
|
@@ -1611,7 +1621,56 @@ your project's test results still needs the integration described there.
|
|
|
1611
1621
|
For bucket storage instead, set `ATLAS_STORE=project=s3://my-bucket/atlas/my-project`, `ATLAS_WRITE=project`,
|
|
1612
1622
|
and the bucket credentials. Keep the `/data` volume for server settings and local state.
|
|
1613
1623
|
|
|
1614
|
-
|
|
1624
|
+
### Deploy without authentication
|
|
1625
|
+
|
|
1626
|
+
Use `ghcr.io/crvouga/atlas-insecure:latest` for a server that requires no sign-in or API token. It is built
|
|
1627
|
+
from the same commit, server and viewer as `ghcr.io/crvouga/atlas:latest`, with `ATLAS_INSECURE=true`
|
|
1628
|
+
to allow listening on the network without tokens. Anonymous callers have full read, publish and admin access.
|
|
1629
|
+
Anyone who discovers an unlisted URL can read reports, upload results and change settings; the URL is
|
|
1630
|
+
not access control.
|
|
1631
|
+
|
|
1632
|
+
In Railway, create a **Docker image** service with:
|
|
1633
|
+
|
|
1634
|
+
```text
|
|
1635
|
+
ghcr.io/crvouga/atlas-insecure:latest
|
|
1636
|
+
```
|
|
1637
|
+
|
|
1638
|
+
Leave the start command unset. Attach a persistent volume at `/data`, set `RAILWAY_RUN_UID=0`, keep one
|
|
1639
|
+
replica, set the healthcheck to `/readyz` and generate a public domain. Leave `ATLAS_PORT` unset so Railway's
|
|
1640
|
+
`PORT` is used. Enable **Settings → Source → Configure Auto Updates → Anytime** to follow `latest`.
|
|
1641
|
+
Do not set `ATLAS_TOKEN`, `ATLAS_PUBLISH_TOKEN` or `ATLAS_READ_TOKEN`, or add `auth.tokens` to
|
|
1642
|
+
`/data/atlas.server.json`: configured tokens still enable authentication. When reusing a volume from an
|
|
1643
|
+
authenticated deployment, remove its saved auth tokens first. Open the domain directly, including `/admin`
|
|
1644
|
+
for settings (leave the token field blank and choose **Load settings**).
|
|
1645
|
+
|
|
1646
|
+
Verify anonymous reads and uploads without an Authorization header:
|
|
1647
|
+
|
|
1648
|
+
```sh
|
|
1649
|
+
curl --fail https://YOUR-DOMAIN/readyz
|
|
1650
|
+
curl --fail https://YOUR-DOMAIN/api/server
|
|
1651
|
+
curl --fail 'https://YOUR-DOMAIN/api/checks?project=my-project' \
|
|
1652
|
+
-H 'content-type: application/json' \
|
|
1653
|
+
-d '{"producer":"smoke","checks":[{"id":"deployed","title":"Deployed","status":"passed"}]}'
|
|
1654
|
+
```
|
|
1655
|
+
|
|
1656
|
+
Readiness returns HTTP 200, `/api/server` reports `"open":true` and `"role":"admin"`, and the upload returns
|
|
1657
|
+
HTTP 201. Configure a project with `ATLAS_STORE=https://YOUR-DOMAIN` and `ATLAS_PROJECT=my-project`;
|
|
1658
|
+
leave its `ATLAS_TOKEN` unset. Use the same publishing commands described in
|
|
1659
|
+
[sending results](#3-send-results-from-ci-and-from-laptops), omitting credentials.
|
|
1660
|
+
|
|
1661
|
+
For local Docker:
|
|
1662
|
+
|
|
1663
|
+
```sh
|
|
1664
|
+
docker run --pull always -p 8080:8080 -v atlas-data:/data ghcr.io/crvouga/atlas-insecure:latest
|
|
1665
|
+
```
|
|
1666
|
+
|
|
1667
|
+
Both images publish full commit tags for pinning or rollback. A new GHCR package must be made Public
|
|
1668
|
+
once before Railway can pull without registry credentials; see
|
|
1669
|
+
[image publication](https://github.com/crvouga/atlas/blob/main/docs/releasing.md#server-image).
|
|
1670
|
+
|
|
1671
|
+
### Docker
|
|
1672
|
+
|
|
1673
|
+
The same published image works anywhere Docker runs. It already contains the client (the same
|
|
1615
1674
|
for every project: the server tells the page where its data is), and keeps results on the volume at `/data`:
|
|
1616
1675
|
|
|
1617
1676
|
```sh
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crvouga/atlas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Atlas: specs of any kind, reported as layered evidence. Publish checks from any runner (JUnit, CTRF, a script), combine them across nodes, branches, environments and backends, gate CI on the result, and run statecharts against the real app.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|