33A lean, production-ready ** GitHub Actions starter** that ships ** reusable CI workflows** for ** Python (3.11/3.12)** and ** TypeScript/Node 20** .
44Designed for ** always-green CI** with strict local gates mirroring CI, ** CodeQL** out of the box, optional ** SBOM** generation, and guard-rails for safe merges.
55
6- <!-- BADGES:CENTERED:BEGIN -->
7-
8- <!-- 1) Core status (fila corta arriba) -->
9- <p align =" center " ><sub ><strong >Core status</strong ></sub ></p >
10- <p align =" center " >
11- <a href =" https://securityscorecards.dev/viewer/?uri=github.com/CoderDeltaLAN/ci-matrix-starter " >
12- <img alt="OpenSSF Scorecard" src="https://api.securityscorecards.dev/projects/github.com/CoderDeltaLAN/ci-matrix-starter/badge" />
13- </a >
14- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/supply-chain.yml " >
15- <img alt="supply-chain" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/supply-chain.yml/badge.svg?branch=main&label=supply-chain" />
16- </a >
17- <a href =" https://pypi.org/project/ci-matrix-starter/ " >
18- <img alt="PyPI" src="https://img.shields.io/pypi/v/ci-matrix-starter?logo=pypi&label=PyPI" />
19- </a >
20- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/py-ci-badge.yml " >
21- <img alt="Python CI (reusable)" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/py-ci-badge.yml/badge.svg?branch=main&label=Python%20CI%20(reusable)" />
22- </a >
23- </p >
24-
25- <!-- 2) CI & automation -->
26- <p align =" center " ><sub ><strong >CI & automation</strong ></sub ></p >
6+ <!-- BADGES:FOOT:BEGIN -->
277<p align =" center " >
8+ <sub ><strong >Core status</strong ></sub ><br />
289 <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/build.yml " >
29- <img alt="CI / build" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/build.yml/badge.svg?branch=main&label=CI" />
30- </a >
31- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ts-ci.yml " >
32- <img alt="TS CI (reusable)" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ts-ci.yml/badge.svg?branch=main&label=TS%20CI%20(reusable)" />
33- </a >
34- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/auto-assign.yml " >
35- <img alt="auto-assign" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/auto-assign.yml/badge.svg?branch=main&label=auto-assign" />
36- </a >
37- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/labeler.yml " >
38- <img alt="pr-labeler" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/labeler.yml/badge.svg?branch=main&label=pr-labeler" />
10+ <img alt="CI" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/build.yml/badge.svg?branch=main&label=CI" />
3911 </a >
40- </p >
41-
42- <!-- 3) Security & supply-chain -->
43- <p align =" center " ><sub ><strong >Security & ; supply-chain</strong ></sub ></p >
44- <p align =" center " >
4512 <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/codeql.yml " >
46- <img alt="CodeQL Analyze" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/codeql.yml/badge.svg?branch=main&label=CodeQL%20Analyze" />
47- </a >
48- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/release-sbom.yml " >
49- <img alt="SBOM" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/release-sbom.yml/badge.svg?branch=main&label=SBOM" />
50- </a >
51- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/dependabot-automerge.yml " >
52- <img alt="Dependabot auto-merge" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/dependabot-automerge.yml/badge.svg?branch=main&label=Dependabot%20auto-merge" />
13+ <img alt="CodeQL Analyze" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/codeql.yml/badge.svg?branch=main&label=CodeQL%20Analyze" />
5314 </a >
54- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ghcr-publish.yml " >
55- <img alt="GHCR publish" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ghcr-publish.yml/badge.svg?branch=main&label=GHCR" />
56- </a >
57- </p >
58-
59- <!-- 4) Releases & packaging -->
60- <p align =" center " ><sub ><strong >Releases & ; packaging</strong ></sub ></p >
61- <p align =" center " >
6215 <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/releases " >
63- <img alt="release" src="https://img.shields.io/github/v/release/CoderDeltaLAN/ci-matrix-starter?display_name=tag" />
64- </a >
65- <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/publish-pypi.yml " >
66- <img alt="Publish PyPI" src="https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/publish-pypi.yml/badge.svg?branch=main&label=Publish%20PyPI" />
16+ <img alt="Release" src="https://img.shields.io/github/v/release/CoderDeltaLAN/ci-matrix-starter?display_name=tag&label=release" />
6717 </a >
68- <a href =" https://pypi.org/project/ci-matrix-starter/ " >
69- <img alt="PyPI - Python versions" src="https://img.shields.io/pypi/pyversions/ci-matrix-starter?label=PyPI%20pyversions" />
70- </a >
71- <a href =" https://pypi.org/project/ci-matrix-starter/ " >
72- <img alt="PyPI - Wheel" src="https://img.shields.io/pypi/wheel/ci-matrix-starter?label=Wheel" />
73- </a >
74- </p >
75-
76- <!-- 5) Meta -->
77- <p align =" center " ><sub ><strong >Meta</strong ></sub ></p >
78- <p align =" center " >
7918 <img alt =" Python 3.11 | 3.12 " src =" https://img.shields.io/badge/Python-3.11%20%7C%203.12-3776AB?logo=python " />
8019 <a href =" LICENSE " >
8120 <img alt="License MIT" src="https://img.shields.io/badge/License-MIT-blue.svg" />
8221 </a >
8322 <a href =" https://www.paypal.com/donate/?hosted_button_id=YVENCBNCZWVPW " >
84- <img alt="Donate" src="https://img.shields.io/badge/Donate-PayPal-0070ba?logo=paypal&logoColor=white" />
85- </a >
86- <a href =" https://www.conventionalcommits.org/en/v1.0.0/ " >
87- <img alt="Conventional Commits" src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-ffa500" />
23+ <img alt="Donate" src="https://img.shields.io/badge/Donate-PayPal-0070ba?logo=paypal&logoColor=white" />
8824 </a >
89- </p >
25+ <br /><br />
26+
27+ <sub ><strong >CI & ; automation</strong ></sub ><br />
28+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/py-ci-badge.yml " >
29+ <img alt =" Python CI (reusable) " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/py-ci-badge.yml/badge.svg?branch=main& ; label=Python%20CI%20(reusable) " />
30+ </a >
31+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ts-ci-badge.yml " >
32+ <img alt =" TS CI (reusable) " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ts-ci-badge.yml/badge.svg?branch=main& ; label=TS%20CI " />
33+ </a >
34+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/auto-assign-badge.yml " >
35+ <img alt =" auto-assign " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/auto-assign-badge.yml/badge.svg?branch=main& ; label=auto-assign " />
36+ </a >
37+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/pr-labeler-badge.yml " >
38+ <img alt =" pr-labeler " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/pr-labeler-badge.yml/badge.svg?branch=main& ; label=pr-labeler " />
39+ </a >
40+ <br /><br />
41+
42+ <sub ><strong >Security & ; supply-chain</strong ></sub ><br />
43+ <a href =" https://securityscorecards.dev/viewer/?uri=github.com/CoderDeltaLAN/ci-matrix-starter " >
44+ <img alt =" OpenSSF Scorecard " src =" https://api.securityscorecards.dev/projects/github.com/CoderDeltaLAN/ci-matrix-starter/badge " />
45+ </a >
46+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/supply-chain.yml " >
47+ <img alt =" Supply chain " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/supply-chain.yml/badge.svg?branch=main& ; label=Supply%20chain " />
48+ </a >
49+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/dependabot-automerge-badge.yml " >
50+ <img alt =" Dependabot auto-merge " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/dependabot-automerge-badge.yml/badge.svg?branch=main& ; label=Dependabot%20auto-merge " />
51+ </a >
52+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ghcr-publish-badge.yml " >
53+ <img alt =" Publish container to GHCR " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/ghcr-publish-badge.yml/badge.svg?branch=main& ; label=Publish%20container%20to%20GHCR " />
54+ </a >
55+ <br /><br />
56+
57+ <sub ><strong >Releases & ; packaging</strong ></sub ><br />
58+ <a href =" https://pypi.org/project/ci-matrix-starter/ " >
59+ <img alt =" PyPI " src =" https://img.shields.io/pypi/v/ci-matrix-starter?logo=pypi& ; label=PyPI " />
60+ </a >
61+ <a href =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/release-sbom-badge.yml " >
62+ <img alt =" release-sbom " src =" https://github.com/CoderDeltaLAN/ci-matrix-starter/actions/workflows/release-sbom-badge.yml/badge.svg?branch=main& ; label=release-sbom " />
63+ </a >
64+ <img alt =" PyPI pyversions " src =" https://img.shields.io/pypi/pyversions/ci-matrix-starter?logo=python& ; label=PyPI%20pyversions " />
65+ <img alt =" Wheel " src =" https://img.shields.io/pypi/wheel/ci-matrix-starter?label=Wheel " />
9066
91- <!-- BADGES:CENTERED:END -->
67+ </p >
68+ <!-- BADGES:FOOT:END -->
9269
9370---
9471
@@ -97,20 +74,47 @@ Designed for **always-green CI** with strict local gates mirroring CI, **CodeQL*
9774``` text
9875.
9976├── .github/workflows/
100- │ ├── build.yml # Aggregator: calls reusable jobs (TS & Py)
101- │ ├── ts-ci.yml # Reusable TypeScript/Node CI
102- │ └── py-ci.yml # Reusable Python CI
77+ │ ├── build.yml # aggregator (example)
78+ │ ├── codeql.yml # CodeQL analysis
79+ │ ├── supply-chain.yml # SBOM + weekly gates
80+ │ ├── release-sbom.yml # release SBOM publish
81+ │ ├── ghcr-publish.yml # container to GHCR (example)
82+ │ ├── release-drafter.yml # release notes draft
83+ │ ├── auto-assign.yml # auto-assign reviewers
84+ │ ├── labeler.yml # PR labeler
85+ │ ├── dependabot-automerge.yml # auto-merge Dependabot
86+ │ ├── ts-ci.yml # reusable TypeScript/Node CI
87+ │ ├── py-ci.yml # reusable Python CI
88+ │ └── py-ci-badge.yml # wrapper for README badge
89+ ├── docs/
90+ │ └── screens/
91+ │ └── local-sanity.png # terminal screenshot (example)
10392├── src/
104- │ ├── index.ts # minimal TS sanity ( example)
105- │ └── ci_matrix_starter/ # minimal Py package (example)
106- ├── tests/ # Python tests (example)
107- ├── package.json # Node project (example scripts)
108- ├── pyproject.toml # Python tooling (ruff/black/pytest/mypy)
93+ │ ├── index.ts # minimal TS example
94+ │ └── ci_matrix_starter/ # minimal Py package
95+ ├── tests/ # Python tests (example)
96+ ├── package.json # Node scripts
97+ ├── pyproject.toml # Python tooling
10998└── README.md
11099```
111100
112101---
113102
103+ ## 🖥️ Operating System Compatibility ✅
104+
105+ ``` text
106+ | OS | Status |
107+ |------------------|:------:|
108+ | Linux | ✅ |
109+ | macOS | ✅ |
110+ | Windows (WSL2) | ✅ |
111+ | FreeBSD | ✅ |
112+ | Android (Termux) | ✅ |
113+ | Containers (CI) | ✅ |
114+ ```
115+
116+ ---
117+
114118## 🚀 Quick Start (consumers)
115119
116120### Use the reusable workflows in _ your_ repo
@@ -129,8 +133,8 @@ jobs:
129133 py :
130134 uses :
CoderDeltaLAN/ci-matrix-starter/.github/workflows/[email protected] 131135 with :
132- py-versions : ' ["3.11","3.12"]'
133- cov-min : 100
136+ python_versions : ' ["3.11","3.12"]'
137+ run_tests : true
134138
135139 # TypeScript / Node 20
136140 ts :
@@ -177,7 +181,7 @@ poetry run mypy src
177181
178182- ` pyproject.toml` with dev tools (**ruff**, **black**, **pytest**, **mypy**, **poetry**).
179183- Tests under `tests/`; coverage threshold via `cov-min`.
180- - Matrix **3.11/3.12** (customizable with `py-versions `).
184+ Matrix **3.11/3.12** (customizable with `python_versions `).
181185
182186**Optional SBOM & signing**
183187
@@ -212,6 +216,19 @@ poetry run mypy src
212216
213217---
214218
219+ <!-- SCREENSHOT:BEGIN -->
220+
221+ # ## Local sanity (screenshot)
222+
223+ <p align="center">
224+ <img src="docs/screens/local-sanity.png"
225+ alt="Local sanity (pre-commit, linters and smoke tests passing)"
226+ width="100%" style="max-width:900px" />
227+ </p>
228+ <!-- SCREENSHOT:END -->
229+
230+ ---
231+
215232# # 🔧 CI (GitHub Actions)
216233
217234- Reusable jobs for **Python** and **TypeScript**; call them via `uses:` with a tag (e.g., `@v0.1.7`).
@@ -254,8 +271,8 @@ TypeScript snippet:
254271# # 🧩 Customization
255272
256273- Pin a release tag, e.g., `@v0.1.7`.
257- - Adjust Python matrix : ` with.py-versions ` .
258- - Tune coverage : ` with.cov-min ` .
274+ - Adjust Python matrix : ` with.python_versions ` .
275+ - Toggle tests in the wrapper : ` with.run_tests ` (true/false) .
259276- Provide secrets to enable optional **cosign** signing.
260277- Extend jobs by adding steps after `uses:`.
261278
@@ -279,7 +296,7 @@ TypeScript snippet:
279296
280297# # 💚 Donations & Sponsorship
281298
282- If this project saves you time, consider supporting ongoing maintenance. Thank you!
299+ Support open-source : your donations keep projects clean, secure, and evolving for the global community.
283300[](https://www.paypal.com/donate/?hosted_button_id=YVENCBNCZWVPW)
284301
285302---
0 commit comments