@gw-tools/gw 0.62.0-beta.72.4 → 0.63.0-beta.73.1
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/README.md +113 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@ A command-line tool for managing git worktrees, built with Deno.
|
|
|
25
25
|
- [Auto-Detection](#auto-detection)
|
|
26
26
|
- [Example Configuration](#example-configuration)
|
|
27
27
|
- [Configuration Options](#configuration-options)
|
|
28
|
+
- [Telemetry (OpenTelemetry & Dash0)](#telemetry-opentelemetry--dash0)
|
|
28
29
|
- [Commands](#commands)
|
|
29
30
|
- [checkout](#checkout)
|
|
30
31
|
- [Arguments](#arguments)
|
|
@@ -385,6 +386,7 @@ All fields are optional and safe to commit — no machine-specific paths or runt
|
|
|
385
386
|
- **cleanThreshold**: Number of days before worktrees are considered stale for `gw clean` (defaults to 7, set via `gw init --clean-threshold`)
|
|
386
387
|
- **autoClean**: Silently remove stale worktrees in the background when running `gw checkout` or `gw list` (defaults to false, set via `gw init --auto-clean`)
|
|
387
388
|
- **updateStrategy**: Default strategy for `gw update` command: "merge" or "rebase" (defaults to "merge", set via `gw init --update-strategy`)
|
|
389
|
+
- **telemetry**: Opt-in OpenTelemetry / Dash0 telemetry (disabled by default). See [Telemetry](#telemetry-opentelemetry--dash0)
|
|
388
390
|
|
|
389
391
|
### Local Overrides (`config.local.json`)
|
|
390
392
|
|
|
@@ -399,6 +401,117 @@ Create `.gw/config.local.json` to override any config value for your machine onl
|
|
|
399
401
|
|
|
400
402
|
Local config is merged on top of `config.json` (shallow merge, local wins). Useful for adding personal files to `autoCopyFiles` without modifying the team config.
|
|
401
403
|
|
|
404
|
+
## Telemetry (OpenTelemetry & Dash0)
|
|
405
|
+
|
|
406
|
+
`gw` can emit [OpenTelemetry](https://opentelemetry.io/) traces and logs so you
|
|
407
|
+
can observe how the tool is used and **correlate releases with errors** in
|
|
408
|
+
[Dash0](https://www.dash0.com/). It is **opt-in and disabled by default** — no
|
|
409
|
+
telemetry leaves your machine unless you turn it on.
|
|
410
|
+
|
|
411
|
+
### What gets sent
|
|
412
|
+
|
|
413
|
+
When enabled, each command emits:
|
|
414
|
+
|
|
415
|
+
- **One span** per invocation (`gw <command>`) with `gw.command`,
|
|
416
|
+
`gw.command.exit_code`, `gw.command.duration_ms`, and `service.version`.
|
|
417
|
+
- **One log record** — `INFO` on success, `ERROR` (with `error.message`) on
|
|
418
|
+
failure.
|
|
419
|
+
|
|
420
|
+
Every signal carries the `service.version` resource attribute. That, combined
|
|
421
|
+
with a **deployment event** emitted by the release pipeline (see below), is
|
|
422
|
+
what lets Dash0 line up "a new version shipped" with "errors started".
|
|
423
|
+
|
|
424
|
+
`gw` never sends branch names, repository paths, or file names. Error messages
|
|
425
|
+
are included so failures can be investigated — redact them in the Collector if
|
|
426
|
+
that is a concern.
|
|
427
|
+
|
|
428
|
+
> **Design note:** telemetry is fully fail-open. Any export error is swallowed
|
|
429
|
+
> and never slows down or breaks a command, and nothing is ever written to
|
|
430
|
+
> stdout (so shell-eval commands like `gw cd` stay safe).
|
|
431
|
+
|
|
432
|
+
### Recommended setup: via a local OpenTelemetry Collector
|
|
433
|
+
|
|
434
|
+
Point `gw` at a local [OpenTelemetry Collector](https://opentelemetry.io/docs/collector/)
|
|
435
|
+
that holds your Dash0 auth token and forwards telemetry on. This keeps the
|
|
436
|
+
token out of any committed config, keeps the CLI fast (the Collector ACKs
|
|
437
|
+
locally), and lets you redact/transform data centrally.
|
|
438
|
+
|
|
439
|
+
1. Enable it in `.gw/config.json`:
|
|
440
|
+
|
|
441
|
+
```jsonc
|
|
442
|
+
{
|
|
443
|
+
"telemetry": {
|
|
444
|
+
"enabled": true,
|
|
445
|
+
"endpoint": "http://localhost:4318", // local OTel Collector
|
|
446
|
+
"environment": "production" // deployment.environment.name
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
2. Run a Collector that exports to Dash0 (token stays in the Collector config,
|
|
452
|
+
not in your repo):
|
|
453
|
+
|
|
454
|
+
```yaml
|
|
455
|
+
# otel-collector.yaml
|
|
456
|
+
receivers:
|
|
457
|
+
otlp:
|
|
458
|
+
protocols:
|
|
459
|
+
http: { endpoint: 0.0.0.0:4318 }
|
|
460
|
+
exporters:
|
|
461
|
+
otlp/dash0:
|
|
462
|
+
endpoint: ${env:DASH0_OTLP_ENDPOINT} # e.g. ingress.<region>.aws.dash0.com:4317
|
|
463
|
+
headers:
|
|
464
|
+
Authorization: Bearer ${env:DASH0_AUTH_TOKEN}
|
|
465
|
+
Dash0-Dataset: ${env:DASH0_DATASET}
|
|
466
|
+
service:
|
|
467
|
+
pipelines:
|
|
468
|
+
traces: { receivers: [otlp], exporters: [otlp/dash0] }
|
|
469
|
+
logs: { receivers: [otlp], exporters: [otlp/dash0] }
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### Alternative: send straight to Dash0
|
|
473
|
+
|
|
474
|
+
Skip the Collector and supply the endpoint and token via env vars (or
|
|
475
|
+
`.gw/config.local.json`, which is gitignored). **Never** put the token in the
|
|
476
|
+
committed `config.json`:
|
|
477
|
+
|
|
478
|
+
```bash
|
|
479
|
+
export GW_TELEMETRY=1
|
|
480
|
+
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingress.<region>.aws.dash0.com:4318"
|
|
481
|
+
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <token>,Dash0-Dataset=default"
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Configuration & env vars
|
|
485
|
+
|
|
486
|
+
| Setting | `config.json` key | Env override | Default |
|
|
487
|
+
| ------------- | ----------------------- | ----------------------------- | ----------------------- |
|
|
488
|
+
| Enable | `telemetry.enabled` | `GW_TELEMETRY` (`1`/`0`) | `false` |
|
|
489
|
+
| Endpoint | `telemetry.endpoint` | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318` |
|
|
490
|
+
| Environment | `telemetry.environment` | `OTEL_RESOURCE_ATTRIBUTES` | _(unset)_ |
|
|
491
|
+
| Service name | `telemetry.serviceName` | `OTEL_SERVICE_NAME` | `gw` |
|
|
492
|
+
| Headers | `telemetry.headers` | `OTEL_EXPORTER_OTLP_HEADERS` | _(none)_ |
|
|
493
|
+
| Flush timeout | `telemetry.timeoutMs` | — | `1500` |
|
|
494
|
+
|
|
495
|
+
`OTEL_SDK_DISABLED=true` is honoured as a hard kill switch. Set
|
|
496
|
+
`GW_TELEMETRY_DEBUG=1` to log export problems to stderr while setting things up.
|
|
497
|
+
|
|
498
|
+
### Correlating deployments with errors
|
|
499
|
+
|
|
500
|
+
The release pipeline (`scripts/release-ci.sh`) sends a `deployment.success`
|
|
501
|
+
event log to Dash0 after a successful publish, tagged with the released
|
|
502
|
+
`service.version` and the git commit. Because runtime error signals carry the
|
|
503
|
+
same `service.version`, Dash0 can show a deployment marker on the error
|
|
504
|
+
timeline and compare error rates before and after each release.
|
|
505
|
+
|
|
506
|
+
You can also send one manually:
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318" \
|
|
510
|
+
deno run --allow-net --allow-env --allow-read \
|
|
511
|
+
packages/gw-tool/scripts/send-deployment-event.ts \
|
|
512
|
+
--version 1.2.3 --environment production --commit "$(git rev-parse HEAD)"
|
|
513
|
+
```
|
|
514
|
+
|
|
402
515
|
## Commands
|
|
403
516
|
|
|
404
517
|
### checkout
|