Rename runtime images to explicit plex-playlist names
Some checks failed
CICD / Build CICD Image Failure Postmortem (push) Has been cancelled
CICD / Source Checks (push) Has been cancelled
CICD / Dependency Audits (Informational) (push) Has been cancelled
CICD / CICD Tests Complete (push) Has been cancelled
CICD / Build Release Images (push) Has been cancelled
CICD / Build Tester Images (push) Has been cancelled
CICD / Production Images Complete (push) Has been cancelled
CICD / Production Image Failures Postmortem (push) Has been cancelled
CICD / Build and Push CICD Images (push) Has been cancelled
CICD / Source Lanes Failure Postmortem (push) Has been cancelled
CICD / Runtime Black-Box Integration Tests (push) Has been cancelled
CICD / Integration Tests Failure Postmortem (push) Has been cancelled
CICD / End-to-End Tests (push) Has been cancelled
CICD / E2E Tests Failure Postmortem (push) Has been cancelled
CICD / Promote Staging Images To Release (push) Has been cancelled
Some checks failed
CICD / Build CICD Image Failure Postmortem (push) Has been cancelled
CICD / Source Checks (push) Has been cancelled
CICD / Dependency Audits (Informational) (push) Has been cancelled
CICD / CICD Tests Complete (push) Has been cancelled
CICD / Build Release Images (push) Has been cancelled
CICD / Build Tester Images (push) Has been cancelled
CICD / Production Images Complete (push) Has been cancelled
CICD / Production Image Failures Postmortem (push) Has been cancelled
CICD / Build and Push CICD Images (push) Has been cancelled
CICD / Source Lanes Failure Postmortem (push) Has been cancelled
CICD / Runtime Black-Box Integration Tests (push) Has been cancelled
CICD / Integration Tests Failure Postmortem (push) Has been cancelled
CICD / End-to-End Tests (push) Has been cancelled
CICD / E2E Tests Failure Postmortem (push) Has been cancelled
CICD / Promote Staging Images To Release (push) Has been cancelled
This commit is contained in:
@@ -1173,7 +1173,7 @@ jobs:
|
||||
return 1
|
||||
}
|
||||
|
||||
DEPLOYABLE_BACKEND_REPO="${GITEA_REGISTRY}/darkhelm.org/deployable-backend-staging"
|
||||
DEPLOYABLE_BACKEND_REPO="${GITEA_REGISTRY}/darkhelm.org/plex-playlist-backend-staging"
|
||||
DEPLOYABLE_BACKEND_TAG_REF="${DEPLOYABLE_BACKEND_REPO}:${HEAD_SHA}"
|
||||
DEPLOYABLE_BACKEND_CACHE_REF="${DEPLOYABLE_BACKEND_REPO}:cache"
|
||||
|
||||
@@ -1182,11 +1182,11 @@ jobs:
|
||||
DOCKER_BUILDKIT=1 docker build -f Dockerfile.backend \
|
||||
--cache-from "${DEPLOYABLE_BACKEND_CACHE_REF}" \
|
||||
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
||||
-t deployable-backend:"${HEAD_SHA}" .
|
||||
bash ./scripts/verify-deployable-image-purity.sh --image deployable-backend:"${HEAD_SHA}" --profile backend
|
||||
-t plex-playlist-backend:"${HEAD_SHA}" .
|
||||
bash ./scripts/verify-deployable-image-purity.sh --image plex-playlist-backend:"${HEAD_SHA}" --profile backend
|
||||
|
||||
docker tag "deployable-backend:${HEAD_SHA}" "${DEPLOYABLE_BACKEND_TAG_REF}"
|
||||
docker tag "deployable-backend:${HEAD_SHA}" "${DEPLOYABLE_BACKEND_CACHE_REF}"
|
||||
docker tag "plex-playlist-backend:${HEAD_SHA}" "${DEPLOYABLE_BACKEND_TAG_REF}"
|
||||
docker tag "plex-playlist-backend:${HEAD_SHA}" "${DEPLOYABLE_BACKEND_CACHE_REF}"
|
||||
|
||||
retry_registry_op push "${DEPLOYABLE_BACKEND_TAG_REF}" 5 4
|
||||
retry_registry_op push "${DEPLOYABLE_BACKEND_CACHE_REF}" 5 4
|
||||
@@ -1281,7 +1281,7 @@ jobs:
|
||||
return 1
|
||||
}
|
||||
|
||||
DEPLOYABLE_FRONTEND_REPO="${GITEA_REGISTRY}/darkhelm.org/deployable-frontend-staging"
|
||||
DEPLOYABLE_FRONTEND_REPO="${GITEA_REGISTRY}/darkhelm.org/plex-playlist-frontend-staging"
|
||||
DEPLOYABLE_FRONTEND_TAG_REF="${DEPLOYABLE_FRONTEND_REPO}:${HEAD_SHA}"
|
||||
DEPLOYABLE_FRONTEND_CACHE_REF="${DEPLOYABLE_FRONTEND_REPO}:cache"
|
||||
|
||||
@@ -1291,11 +1291,11 @@ jobs:
|
||||
--target production \
|
||||
--cache-from "${DEPLOYABLE_FRONTEND_CACHE_REF}" \
|
||||
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
||||
-t deployable-frontend:"${HEAD_SHA}" .
|
||||
bash ./scripts/verify-deployable-image-purity.sh --image deployable-frontend:"${HEAD_SHA}" --profile frontend
|
||||
-t plex-playlist-frontend:"${HEAD_SHA}" .
|
||||
bash ./scripts/verify-deployable-image-purity.sh --image plex-playlist-frontend:"${HEAD_SHA}" --profile frontend
|
||||
|
||||
docker tag "deployable-frontend:${HEAD_SHA}" "${DEPLOYABLE_FRONTEND_TAG_REF}"
|
||||
docker tag "deployable-frontend:${HEAD_SHA}" "${DEPLOYABLE_FRONTEND_CACHE_REF}"
|
||||
docker tag "plex-playlist-frontend:${HEAD_SHA}" "${DEPLOYABLE_FRONTEND_TAG_REF}"
|
||||
docker tag "plex-playlist-frontend:${HEAD_SHA}" "${DEPLOYABLE_FRONTEND_CACHE_REF}"
|
||||
|
||||
retry_registry_op push "${DEPLOYABLE_FRONTEND_TAG_REF}" 5 4
|
||||
retry_registry_op push "${DEPLOYABLE_FRONTEND_CACHE_REF}" 5 4
|
||||
@@ -2617,12 +2617,12 @@ jobs:
|
||||
|
||||
if [ -z "${STAGING_BACKEND_DIGEST_REF}" ]; then
|
||||
echo "Staging backend digest output missing; deriving from staging tag ${HEAD_SHA}"
|
||||
STAGING_BACKEND_DIGEST_REF="$(resolve_staging_digest_from_tag "${GITEA_REGISTRY}/darkhelm.org/deployable-backend-staging" "${HEAD_SHA}")"
|
||||
STAGING_BACKEND_DIGEST_REF="$(resolve_staging_digest_from_tag "${GITEA_REGISTRY}/darkhelm.org/plex-playlist-backend-staging" "${HEAD_SHA}")"
|
||||
fi
|
||||
|
||||
if [ -z "${STAGING_FRONTEND_DIGEST_REF}" ]; then
|
||||
echo "Staging frontend digest output missing; deriving from staging tag ${HEAD_SHA}"
|
||||
STAGING_FRONTEND_DIGEST_REF="$(resolve_staging_digest_from_tag "${GITEA_REGISTRY}/darkhelm.org/deployable-frontend-staging" "${HEAD_SHA}")"
|
||||
STAGING_FRONTEND_DIGEST_REF="$(resolve_staging_digest_from_tag "${GITEA_REGISTRY}/darkhelm.org/plex-playlist-frontend-staging" "${HEAD_SHA}")"
|
||||
fi
|
||||
|
||||
if [ -z "${STAGING_BACKEND_DIGEST_REF}" ] || [ -z "${STAGING_FRONTEND_DIGEST_REF}" ]; then
|
||||
@@ -2683,8 +2683,8 @@ jobs:
|
||||
|
||||
PREVIOUS_RELEASE_VERSION="$(printf '%s\n' "${RELEASE_TAG_LIST}" | awk -v current="${RELEASE_VERSION}" 'NF {if ($0 == current) {print prev; found=1; exit} prev=$0} END {if (!found) print prev}')"
|
||||
|
||||
RELEASE_BACKEND_REPO="${GITEA_REGISTRY}/darkhelm.org/deployable-backend"
|
||||
RELEASE_FRONTEND_REPO="${GITEA_REGISTRY}/darkhelm.org/deployable-frontend"
|
||||
RELEASE_BACKEND_REPO="${GITEA_REGISTRY}/darkhelm.org/plex-playlist-backend"
|
||||
RELEASE_FRONTEND_REPO="${GITEA_REGISTRY}/darkhelm.org/plex-playlist-frontend"
|
||||
|
||||
BACKEND_RELEASE_VERSION_REF="${RELEASE_BACKEND_REPO}:${RELEASE_VERSION}"
|
||||
BACKEND_RELEASE_TAGGED_REF="${RELEASE_BACKEND_REPO}:${RELEASE_TAGGED_VERSION}"
|
||||
|
||||
@@ -13,7 +13,7 @@ services:
|
||||
retries: 12
|
||||
|
||||
backend:
|
||||
image: ${DEPLOYABLE_BACKEND_IMAGE:-deployable-backend:local}
|
||||
image: ${DEPLOYABLE_BACKEND_IMAGE:-plex-playlist-backend:local}
|
||||
environment:
|
||||
DATABASE_URL: ${DB_URL:-postgresql://plex_user:plex_password@database:5432/plex_playlist}
|
||||
ENVIRONMENT: production
|
||||
@@ -22,7 +22,7 @@ services:
|
||||
condition: service_healthy
|
||||
|
||||
frontend:
|
||||
image: ${DEPLOYABLE_FRONTEND_IMAGE:-deployable-frontend:local}
|
||||
image: ${DEPLOYABLE_FRONTEND_IMAGE:-plex-playlist-frontend:local}
|
||||
depends_on:
|
||||
backend:
|
||||
condition: service_started
|
||||
|
||||
@@ -13,7 +13,7 @@ services:
|
||||
retries: 12
|
||||
|
||||
backend:
|
||||
image: ${DEPLOYABLE_BACKEND_IMAGE:-deployable-backend:local}
|
||||
image: ${DEPLOYABLE_BACKEND_IMAGE:-plex-playlist-backend:local}
|
||||
environment:
|
||||
DATABASE_URL: ${DB_URL:-postgresql://plex_user:plex_password@database:5432/plex_playlist}
|
||||
ENVIRONMENT: production
|
||||
|
||||
@@ -72,12 +72,12 @@
|
||||
### **Current Release Lifecycle (2026-07)**
|
||||
|
||||
- Runtime deployable images are published first to staging repositories:
|
||||
- `deployable-backend-staging`
|
||||
- `deployable-frontend-staging`
|
||||
- `plex-playlist-backend-staging`
|
||||
- `plex-playlist-frontend-staging`
|
||||
- Runtime validation (`Runtime Black-Box Integration Tests` and `End-to-End Tests`) must pass before release tagging.
|
||||
- `Promote Release Images` retags validated staging artifacts to release repositories, but only on automated `push` runs to `main`:
|
||||
- `deployable-backend`
|
||||
- `deployable-frontend`
|
||||
- `plex-playlist-backend`
|
||||
- `plex-playlist-frontend`
|
||||
- Published release tags:
|
||||
- `latest`
|
||||
- `v<major>.<minor>.0`
|
||||
|
||||
@@ -14,10 +14,10 @@ automation work under epic #66.
|
||||
Lifecycle note:
|
||||
|
||||
- CI first builds deployable runtime artifacts in staging repositories
|
||||
(`deployable-backend-staging`, `deployable-frontend-staging`).
|
||||
(`plex-playlist-backend-staging`, `plex-playlist-frontend-staging`).
|
||||
- After integration and E2E validation pass, CI promotes those immutable
|
||||
artifacts to release repositories (`deployable-backend`,
|
||||
`deployable-frontend`) via tag promotion.
|
||||
artifacts to release repositories (`plex-playlist-backend`,
|
||||
`plex-playlist-frontend`) via tag promotion.
|
||||
|
||||
Included:
|
||||
|
||||
|
||||
@@ -411,11 +411,11 @@ The pipeline is intentionally staged so expensive image jobs run only after sour
|
||||
2. Source + audit lanes:
|
||||
`Source Checks` and `Dependency Audits (Informational)` run after producer completion. Audit failures are intentionally non-blocking so both frontend and backend audits always report.
|
||||
3. Runtime image lanes:
|
||||
`Build Release Images` publishes `deployable-backend-staging` and `deployable-frontend-staging`; `Build Tester Images` publishes integration/e2e tester images; then `Production Images Complete` gates downstream runtime tests.
|
||||
`Build Release Images` publishes `plex-playlist-backend-staging` and `plex-playlist-frontend-staging`; `Build Tester Images` publishes integration/e2e tester images; then `Production Images Complete` gates downstream runtime tests.
|
||||
4. Runtime validation lanes:
|
||||
`Runtime Black-Box Integration Tests` and `End-to-End Tests` validate staged runtime artifacts.
|
||||
5. Promotion lane:
|
||||
`Promote Release Images` runs only for automated `push` events on `main`. It retags validated staging artifacts to release repos (`deployable-backend`, `deployable-frontend`) with `latest`, `v<major>.<minor>.0`, `v<major>.<minor>.<patch>`, and `v<major>.<minor>.<patch>-<7-char-short-sha>` tags. If the `main` commit is untagged, CI creates the next patch tag automatically; if no prior semver tag exists, the bootstrap baseline is `v0.0.0`.
|
||||
`Promote Release Images` runs only for automated `push` events on `main`. It retags validated staging artifacts to release repos (`plex-playlist-backend`, `plex-playlist-frontend`) with `latest`, `v<major>.<minor>.0`, `v<major>.<minor>.<patch>`, and `v<major>.<minor>.<patch>-<7-char-short-sha>` tags. If the `main` commit is untagged, CI creates the next patch tag automatically; if no prior semver tag exists, the bootstrap baseline is `v0.0.0`.
|
||||
6. Postmortem lanes:
|
||||
targeted postmortem jobs run when key lanes fail to capture diagnostics even when primary jobs fail early.
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ PROJECT_NAME="${COMPOSE_PROJECT_NAME:-plex-e2e-local}"
|
||||
|
||||
mkdir -p "${ROOT_DIR}/frontend/.playwright-artifacts"
|
||||
|
||||
export DEPLOYABLE_BACKEND_IMAGE="${DEPLOYABLE_BACKEND_IMAGE:-deployable-backend:local}"
|
||||
export DEPLOYABLE_FRONTEND_IMAGE="${DEPLOYABLE_FRONTEND_IMAGE:-deployable-frontend:local}"
|
||||
export DEPLOYABLE_BACKEND_IMAGE="${DEPLOYABLE_BACKEND_IMAGE:-plex-playlist-backend:local}"
|
||||
export DEPLOYABLE_FRONTEND_IMAGE="${DEPLOYABLE_FRONTEND_IMAGE:-plex-playlist-frontend:local}"
|
||||
export DB_PASSWORD="${DB_PASSWORD:-plex_password}"
|
||||
export DB_URL="${DB_URL:-postgresql://plex_user:${DB_PASSWORD}@database:5432/plex_playlist}"
|
||||
export E2E_ARTIFACT_DIR="${E2E_ARTIFACT_DIR:-${ROOT_DIR}/frontend/.playwright-artifacts}"
|
||||
|
||||
@@ -5,7 +5,7 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
COMPOSE_FILE="${ROOT_DIR}/compose.ci.integration.yml"
|
||||
PROJECT_NAME="${COMPOSE_PROJECT_NAME:-plex-int-local}"
|
||||
|
||||
export DEPLOYABLE_BACKEND_IMAGE="${DEPLOYABLE_BACKEND_IMAGE:-deployable-backend:local}"
|
||||
export DEPLOYABLE_BACKEND_IMAGE="${DEPLOYABLE_BACKEND_IMAGE:-plex-playlist-backend:local}"
|
||||
export DB_PASSWORD="${DB_PASSWORD:-plex_password}"
|
||||
export DB_URL="${DB_URL:-postgresql://plex_user:${DB_PASSWORD}@database:5432/plex_playlist}"
|
||||
|
||||
@@ -15,7 +15,7 @@ cleanup() {
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "Running runtime integration checks against deployable backend image via compose"
|
||||
echo "Running runtime integration checks against plex-playlist backend image via compose"
|
||||
echo "DEPLOYABLE_BACKEND_IMAGE=${DEPLOYABLE_BACKEND_IMAGE}"
|
||||
|
||||
docker compose -p "${PROJECT_NAME}" -f "${COMPOSE_FILE}" up -d database backend
|
||||
|
||||
Reference in New Issue
Block a user