Skip to main content

GitLab CI pipeline generator: CI pipelines, release/publish workflows for Python and TypeScript monorepos

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ulfblk_ci_gitlab-0.1.0.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ulfblk_ci_gitlab-0.1.0-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file ulfblk_ci_gitlab-0.1.0.tar.gz.

File metadata

  • Download URL: ulfblk_ci_gitlab-0.1.0.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for ulfblk_ci_gitlab-0.1.0.tar.gz
Algorithm Hash digest
SHA256 89967e62951507a94d8a2e54f596a38ac460ab02ba5d980bd0c7570d5d126af2
MD5 c1f4cd8b919a8375502487df4c11492d
BLAKE2b-256 6333925782152c47c42f218acc6e9747d34b5c5d2e1f88093f531200d60b3352

See more details on using hashes here.

File details

Details for the file ulfblk_ci_gitlab-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ulfblk_ci_gitlab-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for ulfblk_ci_gitlab-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 77db0ead69a5e5df731c1e6a11cabf3223d6693ad29d88ccf5c84d2bf2ed29a6
MD5 6d56e4f64a52f65cadf71f4c046b2a60
BLAKE2b-256 d4ca0d841dbf666c6616050cf8202f90349a0e56acb0f3b21b3c00289239b082

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page