BREAKING CHANGE
Migration plan for upgrading from 1.6.0+v1.8.1.

## 1. Reinsert secrets with shortened names

Secret and config names were shortened to max 14 characters to prevent going over Docker's 64 character
limit when STACK_NAME and VERSION are added to it.

- `abra app secret list <domain>` to see which secrets are missing under their new name
- `abra app cmd --local <domain> migrate_secret_names` to reinsert all of them automatically
      (or manually: `abra app secret insert <domain> <secret_name> v1 <value>` per secret)

## 2. If you use OIDC (moved to seperate compose file)

- Add to your .env: `COMPOSE_FILE="$COMPOSE_FILE:compose.grafana-oidc.yml"`

## 3. If you use SMTP (moved to a seperate compose file)

- Add to your .env: `COMPOSE_FILE="$COMPOSE_FILE:compose.grafana-smtp.yml"`

## 4. node_exporter/cadvisor/promtail replaced by Grafana Alloy

Metrics collection changed from Prometheus scraping endpoints
to Alloy pushing via `remote_write`/`loki push`.

- Remove `compose.promtail.yml`, `compose.expose-ports.yml` and
      `compose.basic-auth.yml` from your .env if present. They no
      longer exist. `compose.yml` now declares the `basic_auth` secret directly, so
      `SECRET_BASIC_AUTH_VERSION` is always required.
- Add `PROMETHEUS_REMOTE_WRITE_URL=https://prometheus.$DOMAIN/api/v1/write`
      (`$DOMAIN` if this host also runs `compose.prometheus.yml`, otherwise a remote
      Prometheus' URL). Without this, Alloy collects no metrics at all.
- Add `LOKI_PUSH_URL` (existing var, still used) and pick a log source:
      `JOURNALD=1` (systemd hosts), `SYSLOG_FILES=1` (non-systemd, tails
      `/var/log/*log`), or `SYSLOG=1` + `compose.syslog.yml` (network syslog listener).

- If this host had its own `node.$DOMAIN`/`cadvisor.$DOMAIN` scrape target
      configured on a central Prometheus, remove it. Those endpoints are gone.
- `scrape-config.example.yml` and the `add_node`/`add_domain` abra.sh commands
      are gone. Replaced by label-based auto-discovery (see README).
- `docker stack deploy` doesn't prune removed services, so old `cadvisor`/
      `promtail` containers keep running after a normal `abra app deploy`. Run
      `abra app undeploy <domain>` then `abra app deploy <domain>` to clear them out.
- Diff your `.env` against the current `.env.sample`, to verify any other changes.

### New: label-based metrics auto-discovery

Alloy now auto-discovers and scrapes other Docker Swarm services on the same
host/`proxy` network that opt in via `prometheus.io/scrape=true` deploy labels.
See the README's "Auto-discovering metrics from other apps" section.

- If you scrape Traefik metrics: the old `metrics.traefik.$domain` pull-based
      endpoint still works if you keep the scrape config in Prometheus and
      existing dashboards keep showing its data, but it's recommended to get
      Traefik onto the new label-based discovery.

### Dashboards

The Swarm, Stacks and Traefik dashboards were reworked to show old (pull-model)
and new (Alloy push-model) data as one continuous line, so you don't lose history
across the migration.
