This repository hosts shared CI building blocks for the Kubeflow community: reusable GitHub Actions
and scripts that any Kubeflow Subproject can consume from its own .github/workflows or Makefile.
The goal is to reduce duplication across Kubeflow repositories and to give the maintainers one place
to align on CI best practices.
The following scripts are available.
Every source file needs the Apache 2.0 header from hack/boilerplate/. New files must use the
year-less header (Copyright The Kubeflow Authors.). The verifier rejects a hardcoded year on
files added relative to the base branch.
Run this script as follows:
python hack/boilerplate/boilerplate.py --base-ref masterVendored third-party code that must keep its upstream license header can be skipped with
--exclude, which takes a Python regular expression matched (with re.search) against each
file's repository-relative path. Repeat the flag for multiple patterns:
python hack/boilerplate/boilerplate.py --base-ref main \
--exclude '^third_party/' \
--exclude '^internal/starrocks/mysqldriver/'The following GitHub actions are available.
Runs the license header check above against the calling repository. Check out the repository
with fetch-depth: 0 first so the base branch can be resolved:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: kubeflow/testing/.github/actions/verify-boilerplate@<commit-sha>
with:
base-ref: main
# Optional: one regular expression per line; blank lines and # comments are ignored.
exclude: |
^third_party/
# Vendored go-sql-driver/mysql (MPL-2.0); keeps its upstream header.
^internal/starrocks/mysqldriver/We welcome contributions to enhance support for common Kubeflow infrastructure! Please see our CONTRIBUTING guide for details.