diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 509d050..fb1a58c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,7 +3,7 @@ name: Deploy # Job structure (consolidated 2026-04-30; see runbook for rationale): # prepare → discover stacks, capture previous SHA, classify removed/existing/new -# deploy → skip-gate, teardown, tree update, registry login, dockge, all stacks +# deploy → skip-gate, teardown, tree update, registry login, all stacks # health-check → validate critical stacks (separate job for distinct timeout profile) # rollback → git reset to previous SHA + redeploy on deploy/health failure # notify → Discord notification (always) @@ -19,11 +19,6 @@ on: description: "Absolute path to the live compose tree on the runner host" required: true type: string - live-dockge-path: - description: "Absolute path to dockge's compose tree (when has-dockge=true)" - required: false - type: string - default: /opt/dockge repo-name: required: true type: string @@ -36,9 +31,6 @@ on: target-ref: required: true type: string - has-dockge: - type: boolean - default: false shared-networks: description: "Space-separated bridge networks to create (if missing) before any stack starts, for stacks that join them as `external: true`. Created outside any Compose project, so no stack's `down` can remove them." type: string @@ -261,7 +253,7 @@ jobs: deploy: # Consolidated deploy phase. Replaces 7 prior jobs: - # teardown-removed, update-tree, registry-login, deploy-dockge, + # teardown-removed, update-tree, registry-login, deploy-dockge (dockge since removed), # deploy-existing (matrix), deploy-new (matrix), cleanup-failed-new. # Single self-hosted runner serializes matrix entries anyway, so the # collapse just removes job cold-start overhead with no parallelism loss. @@ -276,7 +268,6 @@ jobs: new_failed_stacks: ${{ steps.summary.outputs.new_failed_stacks }} env: LIVE_REPO_PATH: ${{ inputs.live-repo-path }} - DOCKGE_PATH: ${{ inputs.live-dockge-path }} TARGET_REF: ${{ inputs.target-ref }} FORCE_DEPLOY: ${{ inputs.force-deploy || inputs.force-recreate }} # Expanded as ${RECREATE_FLAG:+"$RECREATE_FLAG"} so an empty value adds @@ -286,7 +277,6 @@ jobs: IMAGE_PULL_TIMEOUT: ${{ inputs.image-pull-timeout }} IMAGE_PULL_ATTEMPTS: ${{ inputs.image-pull-attempts }} FAILED_LOG_LINES: ${{ inputs.failed-container-log-lines }} - HAS_DOCKGE: ${{ inputs.has-dockge }} SHARED_NETWORKS: ${{ inputs.shared-networks }} HAS_REMOVED: ${{ needs.prepare.outputs.has_removed_stacks }} HAS_EXISTING: ${{ needs.prepare.outputs.has_existing_stacks }} @@ -552,21 +542,6 @@ jobs: read -ra nets <<< "$SHARED_NETWORKS" ./.compose-workflow/scripts/deployment/ensure-shared-networks.sh "${nets[@]}" - - name: Deploy dockge - if: | - steps.skip-gate.outputs.skipped == 'false' - && env.HAS_DOCKGE == 'true' - run: | - set -euo pipefail - # shellcheck source=/dev/null - source "$RUNNER_TEMP/compose-pull.sh" - cd "$DOCKGE_PATH" - compose_pull_retry "$LIVE_REPO_PATH/compose.env" - timeout "$SERVICE_STARTUP_TIMEOUT" op run --no-masking --env-file="$LIVE_REPO_PATH/compose.env" -- \ - docker compose up -d --build --quiet-pull --quiet-build \ - --wait --wait-timeout "$COMPOSE_WAIT_TIMEOUT" --remove-orphans \ - ${RECREATE_FLAG:+"$RECREATE_FLAG"} - - name: Deploy existing stacks id: deploy-existing if: | diff --git a/CLAUDE.md b/CLAUDE.md index b8f8e68..7b2f62f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,16 +35,15 @@ Three reusable workflows live in `.github/workflows/`: - **Runs on**: `[self-hosted, ]` (e.g. `[self-hosted, piwine]`) - **5 jobs** (consolidated 2026-04-30 from a prior 11-job structure — single-runner concurrency=1 means matrices serialize anyway): 1. **`prepare`** — discover stacks, capture previous SHA, classify removed/existing/new, detect critical stacks - 2. **`deploy`** — skip-gate, teardown removed, update tree from workspace (no `git fetch` from origin needed; runner has no GitHub creds), 1P configure, multi-registry login (ghcr/dockerhub/gitlab/gitlab-zenterprise), dockge (optional), ensure shared networks (optional), existing stacks, new stacks, cleanup-on-failure, summary outputs + 2. **`deploy`** — skip-gate, teardown removed, update tree from workspace (no `git fetch` from origin needed; runner has no GitHub creds), 1P configure, multi-registry login (ghcr/dockerhub/gitlab/gitlab-zenterprise), ensure shared networks (optional), existing stacks, new stacks, cleanup-on-failure, summary outputs 3. **`health-check`** — validate critical stacks via inline `docker compose ps -a` parsing (no separate script). Skips one-shot exit-0 containers (e.g. migration sidecars gated via `service_completed_successfully`) 4. **`rollback`** — `git reset --hard ` + redeploy if `deploy` or `health-check` failed 5. **`notify`** — Discord webhook with status, pipeline icon line, and PR comment posting (when invoked from a PR-triggering chain) - **Key inputs**: - `runner-label` — e.g. `piwine`, `piwine-office`, `zendc`. Combined with implicit `self-hosted` - `live-repo-path` — absolute path on the runner host (typically `/opt/compose`) - - `live-dockge-path` — absolute path to dockge tree (when `has-dockge: true`) - `repo-name`, `webhook-url`, `discord-user-id`, `target-ref` - - `has-dockge` — boolean (`false` everywhere since dockge was retired on piwine/piwine-office, 2026-10) + - (`has-dockge` / `live-dockge-path` were removed after dockge was retired on every host, 2026-10; callers must not pass them) - `shared-networks` — space-separated cross-stack networks (e.g. `"proxy backup"` on piwine), created by `ensure-shared-networks.sh` in both `deploy` and `rollback` before any `up`; labelled `com.compose-workflow.shared=true` so `docker-prune` skips them - `force-deploy` — skip the "already at target SHA" gate - `auto-detect-critical` — read `com.compose.tier: infrastructure` labels (default: true) diff --git a/README.md b/README.md index 5c579ab..421397d 100644 --- a/README.md +++ b/README.md @@ -76,12 +76,11 @@ jobs: webhook-url: "op://Docker/discord-github-notifications/piwine_webhook_url" discord-user-id: "op://Docker/discord-github-notifications/user_id" target-ref: ${{ github.event.workflow_run.head_sha || github.sha }} - has-dockge: false # true only if the host runs a dockge tree shared-networks: "proxy backup" # optional; omit when no stack needs one force-deploy: ${{ inputs.force-deploy || false }} ``` -Optional inputs: `live-dockge-path` (when `has-dockge: true`), `shared-networks` (see below), `auto-detect-critical` (default `true`), `critical-services` (manual override), `image-pull-timeout`, `image-pull-attempts`, `service-startup-timeout`, `failed-container-log-lines`. +Optional inputs: `shared-networks` (see below), `auto-detect-critical` (default `true`), `critical-services` (manual override), `image-pull-timeout`, `image-pull-attempts`, `service-startup-timeout`, `failed-container-log-lines`. ### Shared networks diff --git a/docs/superpowers/runbooks/adding-a-new-host.md b/docs/superpowers/runbooks/adding-a-new-host.md index 275c182..878cf01 100644 --- a/docs/superpowers/runbooks/adding-a-new-host.md +++ b/docs/superpowers/runbooks/adding-a-new-host.md @@ -20,7 +20,6 @@ Pick these before starting and substitute throughout: | `