Skip to main content

bloque-ci-gitlab

GitLab CI pipeline generator for Python + TypeScript monorepos.

Generates CI (lint + test) and release/publish (PyPI + npm) pipelines programmatically using dict-to-YAML, making them round-trip testable and IDE-friendly.

Install

uv add bloque-ci-gitlab

Quick Start

Generate a CI pipeline

from bloque_ci_gitlab.generators import generate_ci_pipeline
from bloque_ci_gitlab.serializer import write_pipeline

# Default: matches a standard Python + TypeScript monorepo CI
pipeline = generate_ci_pipeline()
write_pipeline(pipeline, ".gitlab-ci.yml")

Generate a release pipeline

from bloque_ci_gitlab.generators import generate_release_pipeline
from bloque_ci_gitlab.models import PublishConfig
from bloque_ci_gitlab.serializer import write_pipeline

pipeline = generate_release_pipeline(
    publish_python=PublishConfig(target="pypi"),
    publish_typescript=PublishConfig(target="npm"),
)
write_pipeline(pipeline, ".gitlab-ci-release.yml")

Customize jobs

from bloque_ci_gitlab.generators import generate_ci_pipeline
from bloque_ci_gitlab.models import PipelineConfig, PythonJobConfig

config = PipelineConfig(
    name="CI",
    triggers=["push", "merge_request"],
    python=PythonJobConfig(
        run_format_check=True,
        python_version="3.13",
    ),
    typescript=None,  # Skip TypeScript jobs
)
pipeline = generate_ci_pipeline(config)

Validate

from bloque_ci_gitlab.validate import validate_config, validate_pipeline_yaml
from bloque_ci_gitlab.models import PipelineConfig
from bloque_ci_gitlab.serializer import pipeline_to_yaml
from bloque_ci_gitlab.generators import generate_ci_pipeline

# Validate config before generation
result = validate_config(PipelineConfig())
assert result.valid

# Validate generated YAML structure
yaml_str = pipeline_to_yaml(generate_ci_pipeline())
result = validate_pipeline_yaml(yaml_str)
assert result.valid

API

Models

  • PythonJobConfig - Python CI job settings (version, test/lint/format commands)
  • TypeScriptJobConfig - TypeScript CI job settings (node version, lint/build/test)
  • PublishConfig - Publish target config (PyPI or npm, CI/CD variable names)
  • PipelineConfig - Top-level pipeline config (name, triggers, jobs)

Generators

  • generate_ci_pipeline(config?) - CI pipeline with lint + test + build jobs
  • generate_release_pipeline(publish_python?, publish_typescript?, trigger_tag_pattern?) - Release pipeline with publish jobs

Serializer

  • pipeline_to_yaml(pipeline) - Dict to clean YAML string
  • write_pipeline(pipeline, path) - Write pipeline to .yml file

Validation

  • validate_config(config) - Check config has at least one job
  • validate_pipeline_yaml(yaml_content) - Check YAML has valid GitLab CI structure (stages, jobs with stage+script)

GitLab CI vs GitHub Actions

Concept GitHub Actions GitLab CI
Top-level name, on, jobs stages, jobs at root
Job runner runs-on: ubuntu-latest image: python:3.12
Steps steps: [{uses:...}, {run:...}] before_script + script
Triggers on: [push, pull_request] rules: [{if: ...}]
Secrets ${{ secrets.TOKEN }} $TOKEN (CI/CD variable)
Cache Implicit in actions Explicit: cache: {paths:, key:}

Examples

Ready-to-use pipeline files in the examples/ directory:

  • ci.yml - Standard CI for Python + TypeScript monorepo
  • release-python.yml - Tag-triggered release to PyPI
  • release-typescript.yml - Tag-triggered release to npm

Metadata

Release files for ulfblk-ci-gitlab 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ulfblk-ci-gitlab 0.1.0
File Size Uploaded
ulfblk_ci_gitlab-0.1.0.tar.gz 8.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ulfblk-ci-gitlab 0.1.0
File Interpreter ABI Platform
ulfblk_ci_gitlab-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 16.4 kB

Release files / ulfblk_ci_gitlab-0.1.0.tar.gz

Download URL ulfblk_ci_gitlab-0.1.0.tar.gz
Size 8.5 kB
Tags Source
SHA-256 checksum
How to use checksums
89967e62951507a94d8a2e54f596a38ac460ab02ba5d980bd0c7570d5d126af2
BLAKE2b-256 checksum
How to use checksums
6333925782152c47c42f218acc6e9747d34b5c5d2e1f88093f531200d60b3352
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / ulfblk_ci_gitlab-0.1.0-py3-none-any.whl

Download URL ulfblk_ci_gitlab-0.1.0-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77db0ead69a5e5df731c1e6a11cabf3223d6693ad29d88ccf5c84d2bf2ed29a6
BLAKE2b-256 checksum
How to use checksums
d4ca0d841dbf666c6616050cf8202f90349a0e56acb0f3b21b3c00289239b082
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page