From e8251ca0225b0186c67ae707e79ec11ae8b66acd Mon Sep 17 00:00:00 2001 From: Felipe Bidu Date: Wed, 3 Jun 2026 13:44:54 +0100 Subject: [PATCH] =?UTF-8?q?fix(template):=20GitLab=20CI=20=E2=80=94=20pyri?= =?UTF-8?q?ght=20libatomic=20+=20decouple=20maintenance=20jobs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two issues found running the generated GitLab CI on a real runner: - `type-check` failed because pyright's bundled Node can't start on the slim image (`libatomic.so.1: cannot open shared object file`). Install libatomic1 in that job's before_script. - `copier-update` and `renovate` (maintenance stage) were skipped whenever the test stage failed, so a failing project test suite would silently block template/dependency updates. Add `needs: []` so they run independently of the test stage. Both found via the end-to-end GitLab demo. Co-Authored-By: Claude Opus 4.8 (1M context) --- template/.gitlab-ci.yml.jinja | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/template/.gitlab-ci.yml.jinja b/template/.gitlab-ci.yml.jinja index c4d8e78..ab63b54 100644 --- a/template/.gitlab-ci.yml.jinja +++ b/template/.gitlab-ci.yml.jinja @@ -23,6 +23,9 @@ type-check: stage: test image: python:{{ python_version }}-slim before_script: + # pyright ships its own Node, which needs libatomic at runtime — absent + # from the slim image ("libatomic.so.1: cannot open shared object file"). + - apt-get update && apt-get install -y --no-install-recommends libatomic1 - pip install uv - uv sync --dev script: @@ -69,6 +72,8 @@ build: renovate: stage: maintenance image: renovate/renovate:latest + # Don't gate maintenance on the project's own test stage. + needs: [] rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' variables: @@ -99,6 +104,9 @@ copier-update: stage: maintenance image: python:{{ python_version }}-slim interruptible: true + # Run independently of the test stage — a template sync shouldn't be blocked + # by the project's own tests failing. + needs: [] rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' variables: