Commits on Source 14

  • Elliot Forbes's avatar
    feat: add the migrator CI component · 6f24ff4c
    Elliot Forbes authored
    Packages the database-migration jobs for services using the Theseus
    migrator (gitlab-org/theseus/migrator), replacing the hand-copied jobs
    from the Theseus how-to:
    
    - validate_migrations: builds the derived migrations image and runs the
      offline contract check on MRs and default-branch pushes that touch the
      migration directory or Dockerfile.
    - roundtrip_migrations: proves the SQL applies and reverses (up,
      down --to-version 0, up) against a throwaway Postgres on dind.
      Disabled via roundtrip_enabled: false for directories with
      irreversible migrations.
    - build_migrations: builds and pushes the derived image tagged with
      APP_VERSION from the release-platform chart-versions job, so the
      deploy-time hook resolving .Chart.AppVersion always finds it;
      latest_tag: true adds a latest tag for local-dev flows.
    
    The validate and roundtrip jobs drive the distroless migrator image via
    docker run on a dind daemon (it cannot be a job image), the same pattern
    as the migrator's own smoke test. All three jobs are lifted from
    gitlab-org/quality/go-service-template, the reference implementation,
    where they have been proven through staging and production deploys.
    
    Fulfils the consumer-CI-component item on the migrator roadmap
    (gitlab-org/theseus/migrator README) and point 3 of the improvement plan
    on gitlab-org/theseus#1.
    
    Co-Authored-By: default avatarClaude Fable 5 <noreply@anthropic.com>
    6f24ff4c
  • Elliot Forbes's avatar
    style: appease jsonnetfmt · bc668d2d
    Elliot Forbes authored
    Co-Authored-By: default avatarClaude Fable 5 <noreply@anthropic.com>
    bc668d2d
  • Elliot Forbes's avatar
    chore: regenerate templates/migrator via scripts/generate.sh · 90338506
    Elliot Forbes authored
    The previous commit re-copied the generated files by calling the copy
    helpers directly, which wrote the do-not-edit headers without the ./
    prefix the script produces, failing check_generate.
    
    Co-Authored-By: default avatarClaude Fable 5 <noreply@anthropic.com>
    90338506
  • Luke Hollinda's avatar
    fix: explain why build_migrations failed on an unset APP_VERSION · e42d3606
    Luke Hollinda authored
    The bare `test -n "$APP_VERSION"` exited 1 with no output, leaving the
    consumer to work out for themselves that the chart-versions job either
    did not run or published nothing. That is the failure most consumers
    will hit first, and it is about to become reachable in more pipelines
    once the version job need is made optional.
    
    Replace it with the error format AGENTS.md asks for: what broke, where
    APP_VERSION is meant to come from, what to check, and a doc link.
    
    Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    e42d3606
  • Luke Hollinda's avatar
    fix: make the migrator chart-versions dependency optional · 65c570fc
    Luke Hollinda authored
    build_migrations runs on every default-branch push, but the Fairway
    chart-versions job it needs inherits semantic_release's rules, which
    skip it on a release-platform canonical namespace, on mirrors, when
    SEMANTIC_RELEASE_DISABLED is set, and when there is no .releaserc.json.
    A non-optional needs:job that matches nothing fails pipeline creation,
    so in all of those cases including this component cost the consumer
    their whole default-branch pipeline rather than one job.
    
    Mark it optional, matching release-platform's goreleaser need and
    Fairway's own descriptor-job need. The APP_VERSION guard then reports
    the missing version as an ordinary job failure.
    
    Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    65c570fc
  • Luke Hollinda's avatar
    fix: run the migrator dind jobs on .docker_buildx_base · 50e2e02e
    Luke Hollinda authored
    validate_migrations and roundtrip_migrations stood up their own
    docker-in-docker daemon: no TLS, no registry mirror, no runner tag, and
    none of the --mtu 1360 workaround the shared base carries for
    production-engineering#28488. They also never logged in to the registry,
    so a db/Dockerfile with a private FROM could not be built.
    
    Extend .docker_buildx_base instead and override only script:, which
    picks up the daemon configuration from one place. The base performs its
    login from script:, so that line is restated in each job.
    
    postgres_image becomes a full image reference defaulting to the same
    mirror, leaving no unauthenticated Docker Hub pull in either job; the
    docker_hub_host input it replaces is dropped.
    
    Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    50e2e02e
  • Luke Hollinda's avatar
    fix: surface the Postgres log when the migrator round trip cannot connect · 5ff4fda0
    Luke Hollinda authored
    A container that exits during startup is indistinguishable from a slow
    one through pg_isready alone: both end as a bare 60-second timeout with
    the actual cause left in a log nobody prints.
    
    Dump `docker logs pg` and say so before failing.
    
    Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    5ff4fda0
  • Luke Hollinda's avatar
    docs: explain how version_job tracks release-platform's runway_dir · ae5d3f80
    Luke Hollinda authored
    Fairway embeds the manifest path in its chart-versions job name, so the
    name changes with release-platform's runway_dir while the version_job
    default stays pinned to the .runway spelling. Nothing in the component
    can derive one input's default from another, so say it plainly and show
    the override.
    
    Also warn that release-platform.md gives the pre-manifest-path name.
    
    Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    ae5d3f80
  • Luke Hollinda's avatar
    docs: correct the Fairway job names in release-platform · 505a17cd
    Luke Hollinda authored
    Fairway embeds the manifest path in each helm-chart job name, so the
    real jobs are "📝 [.runway/fairway.yaml] Helm chart versions" and
    friends, not the unbracketed names documented here. Anyone wiring a
    needs: from these docs got a name matching nothing.
    
    The template link pointed at v1.10.0 while the component pins v3.2.1.
    Renovate updates the pin in release-platform.jsonnet and cannot see a
    version in prose, so link main as the other Fairway links here do.
    
    Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    505a17cd
  • Luke Hollinda's avatar
    docs: drop the migrator warning about release-platform's job names · eb460e00
    Luke Hollinda authored
    Those names are now correct, so pointing readers away from the docs
    they would naturally follow no longer helps.
    
    Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    eb460e00
  • Elliot Forbes's avatar
    test(migrator): assert on the generated rules, needs and tagging · 4af5d5fe
    Elliot Forbes authored
    The manitest only checked that the three job names appeared in the output,
    so a future edit could reintroduce the commit-SHA tagging this component
    exists to remove, or drop the optional: on the version_job need, without a
    failing test. Lock the content that matters: the optional dotenv need, the
    APP_VERSION guard running before DOCKER_DESTINATION is derived, the release
    tag (and no CI_COMMIT_SHA), the opt-in latest tag, the default-branch-only
    build rule, the changes: filters and schedule exclusion on the MR jobs, the
    roundtrip opt-out, the up/down/up sequence, the Postgres readiness fallback,
    the registry login before each dind build, and .docker_buildx_base on all
    three jobs with no plaintext dind left behind.
    
    Counts use std.strReplace rather than std.findSubstr, as in
    release-platform.manitest.jsonnet, so the file runs in milliseconds.
    
    Co-Authored-By: default avatarClaude Fable 5.1 <noreply@anthropic.com>
    4af5d5fe
  • Elliot Forbes's avatar
    e8ab6a0d
  • Brittany Wilkerson's avatar
    Merge branch 'ef-migrator-component' into 'main' · 52cb093a
    Brittany Wilkerson authored
    feat: add the migrator CI component
    
    See merge request !1925
    52cb093a
  • semantic-release-bot's avatar
    chore(release): 5.33.0 · 72ff719f
    semantic-release-bot authored
    ## [5.33.0](https://gitlab.com/gitlab-com/gl-infra/common-ci-tasks/-/compare/...) (2026-10-06)
    
    ### Features
    
    * add the migrator CI component ([6f24ff4c](6f24ff4c))
    
    ### Fixes
    
    * explain why build_migrations failed on an unset APP_VERSION ([e42d3606](e42d3606))
    * make the migrator chart-versions dependency optional ([65c570fc](65c570fc))
    * run the migrator dind jobs on .docker_buildx_base ([50e2e02e](50e2e02e))
    * surface the Postgres log when the migrator round trip cannot connect ([5ff4fda0](5ff4fda0))
    
    ### Docs
    
    * correct the Fairway job names in release-platform ([505a17cd](505a17cd))
    * drop the migrator warning about release-platform's job names ([eb460e00](eb460e00))
    * explain how version_job tracks release-platform's runway_dir ([ae5d3f80](ae5d3f80))
    * **migrator:** label the job-name code fence ([e8ab6a0d](e8ab6a0d))
    
    ### Tests
    
    * **migrator:** assert on the generated rules, needs and tagging ([4af5d5fe](4af5d5fe))
    
    ### Others
    
    * appease jsonnetfmt ([bc668d2d](bc668d2d))
    * regenerate templates/migrator via scripts/generate.sh ([90338506](90338506))
    72ff719f
Loading
Loading