From a37b259f47d9eb8d436e5b882966dbb2ac257ac8 Mon Sep 17 00:00:00 2001 From: Ryan Kegel Date: Sun, 26 Apr 2026 22:53:04 -0400 Subject: [PATCH] feat: add workflow for promoting master to production with testing and deployment steps --- .gitea/workflows/promote-master.yaml | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/.gitea/workflows/promote-master.yaml b/.gitea/workflows/promote-master.yaml index de95c35..b21366e 100644 --- a/.gitea/workflows/promote-master.yaml +++ b/.gitea/workflows/promote-master.yaml @@ -317,6 +317,42 @@ jobs: chmod 600 .env .rollback-meta docker-compose down + + wait_for_container_removal() { + container_name="$1" + attempts=0 + while docker ps -a --format '{{.Names}}' | grep -qx "$container_name"; do + attempts=$((attempts + 1)) + if [ "$attempts" -ge 12 ]; then + echo "Container ${container_name} still exists after waiting for teardown." + docker ps -a --filter "name=^${container_name}$" + return 1 + fi + echo "Waiting for ${container_name} to be removed..." + sleep 5 + done + } + + wait_for_port_release() { + port="$1" + attempts=0 + while docker ps -a --format '{{.ID}} {{.Names}} {{.Ports}} {{.Status}}' | grep -E "(^|[[:space:]])0\.0\.0\.0:${port}->|:::${port}->" >/dev/null 2>&1; do + attempts=$((attempts + 1)) + if [ "$attempts" -ge 12 ]; then + echo "Port ${port} is still allocated after teardown. Blocking container(s):" + docker ps -a --format '{{.ID}} {{.Names}} {{.Ports}} {{.Status}}' | grep -E "(^|[[:space:]])0\.0\.0\.0:${port}->|:::${port}->" || true + return 1 + fi + echo "Waiting for port ${port} to be released..." + sleep 5 + done + } + + wait_for_container_removal chores-app-frontend-prod + wait_for_container_removal chores-app-backend-prod + wait_for_port_release 443 + wait_for_port_release 5001 + docker-compose pull docker-compose up -d