Skip to main content

Reusable CI workflows for Py/TS with SBOM & signatures.

Project description

⭐ ci-matrix-starter — Reusable CI Workflows (Python & TypeScript)

A lean, production-ready GitHub Actions starter that ships reusable CI workflows for Python (3.11/3.12) and TypeScript/Node 20. It’s designed for always-green CI with strict local gates mirroring CI, CodeQL out of the box, optional SBOM generation, and guard-rails for safe merges (branch protection + required checks).

CI / build CodeQL Analysis Release Python 3.11|3.12 License: MIT Donate


Repo layout

.
├── .github/workflows/
│   ├── build.yml                 # Aggregator: calls reusable jobs (TS & Py)
│   ├── ts-ci.yml                 # Reusable TypeScript/Node CI
│   └── py-ci.yml                 # Reusable Python CI
├── src/
│   ├── index.ts                  # minimal TS sanity (example)
│   └── ci_matrix_starter/        # minimal Py package (example)
├── tests/                        # Python tests (example)
├── package.json                  # Node project (example scripts)
├── pyproject.toml                # Python tooling (ruff/black/pytest/mypy)
└── README.md

🚀 Quick Start (consumers)

Use the reusable workflows in your repo

Create .github/workflows/ci.yml in your project:

name: CI
on:
  pull_request:
  push:
    branches: [main]

jobs:
  # Python matrix (3.11/3.12) with strict gates
  py:
    uses: CoderDeltaLAN/ci-matrix-starter/.github/workflows/py-ci.yml@v0.1.0
    with:
      py-versions: '["3.11","3.12"]'
      cov-min: 100

  # TypeScript / Node 20
  ts:
    uses: CoderDeltaLAN/ci-matrix-starter/.github/workflows/ts-ci.yml@v0.1.0

Tip: the aggregator in this repo (build.yml) is a reference showing how to orchestrate multiple reusable jobs.

Local mirror (same gates as CI)

Node / TS

npx prettier --check .
npx eslint . --max-warnings=0
npx tsc --noEmit
npm test --silent

Python

python -m pip install --upgrade pip
pip install poetry
poetry install --no-interaction
poetry run ruff check .
poetry run black --check .
PYTHONPATH=src poetry run pytest -q --cov=src --cov-fail-under=100
poetry run mypy src

Nothing in your shell needs to change. Consume the workflows by reference (uses:) and keep your repo clean.


📦 What the workflows expect

TypeScript

  • package.json with test script (any test runner).
  • tsconfig.json limiting sources (e.g., src/**/*.ts).
  • eslint.config.mjs (flat config) and Prettier 3.
  • Node 20.x recommended.

Python

  • pyproject.toml with dev tools (ruff, black, pytest, mypy, poetry).
  • Tests under tests/; coverage threshold via cov-min input (default in example: 100).
  • Matrix 3.11/3.12 (customizable via py-versions).

Optional SBOM & signing

  • Workflows can export SBOMs (CycloneDX). If you set COSIGN_KEY & COSIGN_PASSWORD as secrets, signing will be attempted (safe-by-default: skipped when absent).

⛳ Required checks (CI gating)

Typical required contexts (suggested for branch protection):

  • CI / build (aggregator success)
  • CodeQL Analyze / codeql (security)

Enable linear history, dismiss stale reviews on new pushes, and auto-merge once checks are green for a professional, low-friction flow.


🧪 Local Developer Workflow (mirrors CI)

# Node
npx prettier --check . && npx eslint . --max-warnings=0 && npx tsc --noEmit && npm test --silent

# Python
python -m pip install --upgrade pip && pip install poetry
poetry install --no-interaction
poetry run ruff check . && poetry run black --check .
PYTHONPATH=src poetry run pytest -q --cov=src --cov-fail-under=100
poetry run mypy src

🔧 CI (GitHub Actions)

  • Reusable jobs for Python and TypeScript; call them from your repo via uses: with a tag (e.g., @v0.1.0).
  • Built-in CodeQL workflow example.
  • Strict, fast feedback suitable for PR auto-merge when green.

Python job snippet recap:

- run: python -m pip install --upgrade pip
- run: pip install poetry
- run: poetry install --no-interaction
- run: poetry run ruff check .
- run: poetry run black --check .
- env:
    PYTHONPATH: src
  run: poetry run pytest -q
- run: poetry run mypy src

TypeScript job snippet recap:

- run: npx prettier --check .
- run: npx eslint . --max-warnings=0
- run: npx tsc --noEmit
- run: npm test --silent || echo "no tests"

🗺 When to Use This Project

  • You need ready-to-use CI for Python + TypeScript with clean defaults.
  • You want reusable workflows you can reference by tag.
  • You value security (CodeQL), SBOMs, and strict gates to keep main always green.

🧩 Customization

  • Pin a release tag, e.g., @v0.1.0.
  • Adjust Python matrix: with.py-versions.
  • Tune coverage: with.cov-min.
  • Provide secrets to enable optional cosign signing.
  • Extend jobs by adding your own steps after uses: blocks.

🔒 Security

  • Code scanning via CodeQL.
  • Recommend enabling: required conversations resolved, dismiss stale reviews, signed commits, and squash merges.
  • Avoid uploading sensitive artifacts to public PRs.

🙌 Contributing

  • Small, atomic PRs using Conventional Commits.
  • Keep local & CI gates green before requesting review.
  • Use auto-merge once checks pass.

💚 Donations & Sponsorship

If this project saves you time, consider supporting ongoing maintenance. Thank you! Donate


🔎 SEO Keywords

reusable github actions workflows, python typescript ci starter, node 20 eslint 9 prettier 3, ruff black mypy pytest, cycloneDX sbom cosign signing, codeql security analysis, branch protection auto merge, always green ci, monorepo friendly ci, strict local gates mirror


👤 Author

CoderDeltaLAN (Yosvel) GitHub: https://github.com/CoderDeltaLAN


📄 License

Released under the MIT License. See LICENSE.

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

ci_matrix_starter-0.1.7.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

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

ci_matrix_starter-0.1.7-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

Details for the file ci_matrix_starter-0.1.7.tar.gz.

File metadata

  • Download URL: ci_matrix_starter-0.1.7.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ci_matrix_starter-0.1.7.tar.gz
Algorithm Hash digest
SHA256 f289016b800acd4b5dd65a0d530f1fe826ed611250243e03b80584b76b365eb5
MD5 3a97416ed572247c9de20fb93debb8f8
BLAKE2b-256 bbef4120a82b6e303e81ee09da580733468ebd2df9e2c9f3d569590cc5438a5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ci_matrix_starter-0.1.7.tar.gz:

Publisher: publish-pypi.yml on CoderDeltaLAN/ci-matrix-starter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ci_matrix_starter-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for ci_matrix_starter-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 1a0f6a6d12764b0ad3e34596d760bbfab2e01f672c06d9a4bdbbf197781b2b98
MD5 a387d0044e5d1f54ab333bbf65fabd34
BLAKE2b-256 0ef2278cdaeb1a5aab98beab8ec4874a33c93f2ff95def2003d4b9f2c69ba2d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ci_matrix_starter-0.1.7-py3-none-any.whl:

Publisher: publish-pypi.yml on CoderDeltaLAN/ci-matrix-starter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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