Wire content-creator into build-push and staging/prod deploy image flow#337
Merged
Merged
Conversation
Co-authored-by: NickLetts2 <90337962+NickLetts2@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add content-creator service to CI/CD pipeline
Wire May 30, 2026
content-creator into build-push and staging/prod deploy image flow
NickLetts2
added a commit
that referenced
this pull request
Jun 1, 2026
…ervice-to-ci-cd Wire `content-creator` into build-push and staging/prod deploy image flow
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CD — Deploy to Stagingfailed becausecontent-creatorwas still treated as a local build image (curvit/content-creator:local) and never produced/tagged in GHCR. This PR alignscontent-creatorwith the existing deployable service pattern so staging/prod resolve and retag a realghcr.io/nickletts2/curvitimage.Build/push workflow integration (
.github/workflows/build-push.yml)content-creatortodorny/paths-filterwith the same shared dependency paths used by other Python services.needs_buildentry forservices/content-creator/Dockerfile->curvit-content-creator.curvit-content-creatortoretag-unchangedALL_TAGSso unchanged commits still getsha-*tags via-dev.Staging alias tagging (
.github/workflows/cd-staging.yml)curvit-content-creatorto the staging aliasSERVICESlist so:curvit-content-creator-stagingis refreshed per deploy.Compose deployment overlays
content-creatoroverrides in:docker-compose.staging.ymldocker-compose.prod.ymlimage: ghcr.io/nickletts2/curvit:curvit-content-creator-${IMAGE_TAG}build: !reset null,pull_policy: alwaysdepends_onhealth conditions forpostgresandcms-servicebackend+egress), with no Traefik labels.Example (new build matrix entry):
Original prompt
Problem
The
Deploy to stagingjob in theCD — Deploy to Stagingworkflow (.github/workflows/cd-staging.yml) is failing duringdocker compose pullwith:Failing run: https://github.com/NickLetts2/Curvit/actions/runs/26679614172/job/78637564834
Root cause
The
content-creatorservice exists fully underservices/content-creator/(Dockerfile, FastAPI app underapp/,requirements.txt,tests/, docs atdocs/content-creator.md) and is referenced indocker-compose.yml, but it was never wired into the CI/CD pipeline. Concretely, in contrast to the other 15 services (core-api,cms-service,messaging-service,billing-service, etc.),content-creatoris missing from:.github/workflows/build-push.yml— nopaths-filter, noneeds_build/add_itemblock in the matrix builder, and not in theALL_TAGSre-tag list. So noghcr.io/nickletts2/curvit:curvit-content-creator-<sha>image is ever produced.docker-compose.staging.ymlanddocker-compose.prod.yml— no override that switches the service to the GHCR image. The basedocker-compose.ymlreferencesimage: curvit/content-creator:localwithbuild:, so on staging Docker tries to pull from Docker Hub and fails..github/workflows/cd-staging.yml—curvit-content-creatoris missing from theSERVICES=( ... )array (lines 241–257) used to update the-stagingalias tag.We're going with Option A: promote
content-creatorto a fully CI-built service deployed to staging (and prepare the same wiring for prod, mirroring how every other backend service is set up).Required Changes
Please make the following changes consistently with how the existing Python services (e.g.
messaging-service,cms-service,billing-service) are configured. Match their patterns exactly — do not invent new conventions.1.
.github/workflows/build-push.ymldorny/paths-filterfilters:block, add acontent-creatorfilter mirroringmessaging-service:Build matrix and tag liststep, add aneeds_buildblock forcontent-creator(mirrormessaging-service):retag-unchangedjob, addcurvit-content-creatorto theALL_TAGS=( ... )array.2.
.github/workflows/cd-staging.ymlTag staging alias in GitHub Container Registrystep, addcurvit-content-creatorto theSERVICES=( ... )array so the-stagingalias is updated on every deploy.3.
docker-compose.staging.ymlAdd a
content-creatorservice override following the exact same shape as the existingmessaging-serviceoverride in this file (the snippet shown around lines 540–608 ofdocker-compose.staging.yml). Specifically:image: ghcr.io/nickletts2/curvit:curvit-content-creator-${IMAGE_TAG}build: !reset nullpull_policy: alwaysrestart: unless-stoppedenv_file: ${STAGING_ENV_FILE:-/opt/curvit/environments/staging/.env}ports: !reset []environment:setAPP_ENV: staging,LOG_LEVEL: "warning",AUTH_ISSUER: https://app.staging.curvit.co.uk,AUTH_AUDIENCE: curvit-api,INTERNAL_API_KEY: ${INTERNAL_API_KEY:?INTERNAL_API_KEY must be set},CMS_SERVICE_URL: "http://cms-service:8000",CONTENT_CREATOR_AI_API_KEY: ${CONTENT_CREATOR_AI_API_KEY:-},CONTENT_CREATOR_AI_MODEL: ${CONTENT_CREATOR_AI_MODEL:-claude-haiku-4-5-20251001},PROMPT_VERSION: ${CONTENT_CREATOR_PROMPT_VERSION:-v1.0}.depends_on: !resetwithpostgres: { condition: service_healthy }andcms-service: { condition: service_healthy }(mirroring the base compose).deploy.resources.limitssimilar tomessaging-service(e.g.cpus: "0.25",memory: 256M).loggingblock as the other services in this file.docker-compose.ymlcomments confirm content-creator has no public ingress. Do not attach it tocurvit-staging-proxy.backendonly (andegressif you can confirm it's needed for the Anthropic API call — yes, it callsanthropic/Claude, so includeegressasbilling-servicedoes for Stripe).4.
docker-compose.prod.ymlAdd an equivalent
content-creatoroverride mirroring its `messaging-serv...This pull request was created from Copilot chat.