docs: Stop tying deploy-vps to a traefik edge #83
No reviewers
Labels
No labels
priority/P0
priority/P1
priority/P2
priority/P3
size/L
size/M
size/S
size/XL
size/XS
state/blocked
state/done
state/in-progress
state/in-review
state/needs-refinement
state/ready
type/bug
type/chore
type/feature
type/refactor
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
amtronics/platform-actions!83
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/78-template-deploy-header"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue
Closes #78
Problem
templates/release.yml's header said the template "deploys with the shareddeploy-vpsaction (a traefik VPS host)" and told anyone "behind a reverseproxy on published ports" to replace the deploy step with their own local
action. Both halves are wrong, and the second is the expensive one: every
application on this fleet is behind a reverse proxy, so the advice applied to
all of them.
ahmad/nameyis the live counter-example —deploy-vps@v3, publishingMARKETING_PUBLISH/PORTAL_PUBLISHfor the nginx-proxy-manager edge toforward. By that header its author should have written a local action.
The same claim was in two more places the issue did not name, found by the sweep
its fourth criterion asks for: the
deploy-domaininput's own description indeploy-vps/action.yml, and the matching README row.Solution
The header now says what the action does — copies
docker-compose.vps.ymlandinfra/alloy/config.alloy, writes the host.envfromapp-env, pulls, rollsout, health-checks — and that routing is the compose file's business, naming
both shapes in use: traefik labels on the shared edge (
suhba/suhba-docs), andpublished ports behind a proxy (
ahmad/namey).Removing the false reason leaves a real question, so the replacement answers it:
write a local deploy action when the shared one cannot do the job — a different
compose filename or set, or a rollout that is not "pull,
up -d, wait forhealthy" — and it names what you give up, since a local action that skips the
partial
grafana-prom-*check deploys silently without metrics.deploy-domainis now described by what it is: written to the host.envasDEPLOY_DOMAIN, with the compose deciding what it means.Review notes
The two remaining occurrences of "traefik" are deliberate and, I believe,
accurate: each names it as one of two shapes rather than as the edge. I did not
write that traefik is unused here —
suhba/suhba-docsruns onvps-productionand its labels are live and load-bearing, including the TLS resolver and the
X-Robots-Tagmiddleware.templates/release.ymlis also touched by the open #82, which changes the notifystatus:expression around line 311. This change is confined to the headercomment block, so the hunks do not overlap; whichever lands second should rebase
cleanly.
Risks and trade-offs
Comments and one input description — no behaviour changes. All five
validatesteps pass locally by exit code, and both edited YAML files parse.
WIP: docs: Stop tying deploy-vps to a traefik edgeto docs: Stop tying deploy-vps to a traefik edgeSelf-verified against each acceptance criterion on
6c14441;PR / validategreen.deploy-vpsrequires or assumes traefik. It now states what the action does — copydocker-compose.vps.ymlandinfra/alloy/config.alloy, write the host.envfromapp-env, pull, roll out, health-check — and that routing is the compose file's business.up -d/ wait for healthy." That is whatahmad/imamahgenuinely does differently. Neither a reverse proxy nor published ports appears as a reason, because neither is one.deploy-vpsand an example that does the same.ahmad/nameyis named in the header, besidesuhba/suhba-docsfor the traefik shape, so both are visible as normal rather than one being the default.suhba/suhba-docsexample, and thedeploy-domaindescription listing "a traefik router rule, a redirect URL, nothing at all" as things a compose may do with the value.Gates by exit code:
test-check-actions.py0,check-actions.py0 (it re-checkedtemplates/release.ymlanddeploy-vps/action.yml),test-behaviour-harness.py0,behaviour-tests.py0, README lint 0. Both edited YAML files parse.Two things the issue did not ask for but its fourth criterion required, so they are in here:
The
deploy-domaininput carried the same claim in its own description and in the README's input table — "Public hostname traefik routes." That is the copy a consumer actually reads while wiring the action, so leaving it would have kept the belief alive after the header stopped saying it.I added what a local action costs rather than only when to write one.
ahmad/imamah's leavesCOMPOSE_PROFILESempty on a partialgrafana-prom-*set wheredeploy-vpsexits 1, so it deploys silently without metrics — that is the concrete price of forking the deploy step, and it belongs next to the advice.Approved. No findings. All four criteria of
#78are met, and the fourth — the sweep — I re-ran rather than took on trust.Verified
deploy-vpsis what the action does.deploy-vps/action.yml:scp docker-compose.vps.yml(335),scp infra/alloy/config.alloy(336),scp .env.deploy → .env(337),docker compose pull(409),up -d --force-recreate --remove-orphans(412), then the healthcheck wait. Nothing in it routes anything, so "does no routing" is literally true rather than a simplification.ahmad/nameyusesdeploy-vps@v3(deploy.yml:51) and publishes ports for the proxy to forward —${MARKETING_PUBLISH:?…}:80and${PORTAL_PUBLISH:?…}:80in its compose, fed byapp-envlines 64-65.suhba/suhba-docsusesdeploy-vps@v3from bothrelease.yml:233anddeploy.yml:51and carries live traefik labels: theHost()router built fromDEPLOY_DOMAIN,entrypoints=websecure,tls.certresolver=le, and theX-Robots-Tag: noindex, nofollowplus HSTS middleware. So the two shapes are not illustrative, they are the two repositories the header names, and neither needed a different deploy step. That is the whole argument of#78and it holds.up -d, wait for healthy" is a property of the action's capability rather than of the host's edge — andahmad/imamah, the example kept, qualifies on exactly that ground. Naming the cost is the part I would not have thought to ask for: a local action that skips the partialgrafana-prom-*check deploys silently without metrics, which is measurably true ofimamah's today.action.yml:30lists it as one thing a compose might do withDEPLOY_DOMAIN— "a traefik router rule, a redirect URL, nothing at all" — andtemplates/release.yml:19names it as one of two shapes with the repository that uses it. Neither says the action assumes it..forgejo/workflows/*.ymlonmainfor the four corrected phrasings: zero stale copies. Consumers evidently trimmed the header block when copying the template, so this repository really was the only place the claim lived — which is the outcome worth confirming for a template fix, since the usual failure is a sentence corrected in one place and still being copied from another.PR / validategreen.One scheduling note, not a finding.
#82also editstemplates/release.yml, at the notifystatus:expression around line 311, and this change is confined to the header block above line 30 — so they do not overlap textually, but whichever merges second will need a rebase. No conflict to resolve either way.