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 jobsgenerate_release_pipeline(publish_python?, publish_typescript?, trigger_tag_pattern?)- Release pipeline with publish jobs
Serializer
pipeline_to_yaml(pipeline)- Dict to clean YAML stringwrite_pipeline(pipeline, path)- Write pipeline to .yml file
Validation
validate_config(config)- Check config has at least one jobvalidate_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 monoreporelease-python.yml- Tag-triggered release to PyPIrelease-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)
| File | Size | Uploaded | |
|---|---|---|---|
| ulfblk_ci_gitlab-0.1.0.tar.gz | 8.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|