From 288996b457229fcdbc680f1711be78b7f8242146 Mon Sep 17 00:00:00 2001 From: Matthieu MOREL Date: Mon, 2 Feb 2026 07:35:10 +0100 Subject: [PATCH] Add workflows for Python, Go, and Bazel ecosystems Signed-off-by: Matthieu MOREL --- .bcr/metadata.template.json | 19 ++++ .bcr/presubmit.yml | 17 +++ .bcr/source.template.json | 5 + .github/dependabot.yml | 6 + .github/workflows/go-release.yml | 34 ++++++ .github/workflows/publish-to-bcr.yml | 21 ++++ .github/workflows/python-release.yml | 47 ++++++++ .github/workflows/release.yml | 55 ++++++++++ .github/workflows/version-bump.yml | 64 +++++++++++ .gitignore | 13 ++- DEVELOPER.md | 14 +++ README.md | 15 +++ VERSIONING.md | 145 +++++++++++++++++++++++++ python/dist/xds-0.1.0-py3-none-any.whl | Bin 45988 -> 0 bytes python/dist/xds-0.1.0.tar.gz | Bin 16921 -> 0 bytes python/pyproject.toml | 4 +- 16 files changed, 456 insertions(+), 3 deletions(-) create mode 100644 .bcr/metadata.template.json create mode 100644 .bcr/presubmit.yml create mode 100644 .bcr/source.template.json create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/go-release.yml create mode 100644 .github/workflows/publish-to-bcr.yml create mode 100644 .github/workflows/python-release.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/version-bump.yml create mode 100644 VERSIONING.md delete mode 100644 python/dist/xds-0.1.0-py3-none-any.whl delete mode 100644 python/dist/xds-0.1.0.tar.gz diff --git a/.bcr/metadata.template.json b/.bcr/metadata.template.json new file mode 100644 index 00000000..07a182a5 --- /dev/null +++ b/.bcr/metadata.template.json @@ -0,0 +1,19 @@ +{ + "homepage": "https://github.com/cncf/xds", + "maintainers": [ + { + "name": "Adi Peleg", + "github_user_id": 4787431, + "github": "adisuissa" + }, + { + "github_user_id": 454682, + "github": "phlax" + } + ], + "repository": [ + "github:cncf/xds" + ], + "versions": [], + "yanked_versions": {} +} diff --git a/.bcr/presubmit.yml b/.bcr/presubmit.yml new file mode 100644 index 00000000..1c9da899 --- /dev/null +++ b/.bcr/presubmit.yml @@ -0,0 +1,17 @@ +matrix: + platform: + - macos + - ubuntu2204 + bazel: + - 7.x + - 8.x + - 9.x +tasks: + verify_targets: + name: "Verify build targets" + platform: ${{ platform }} + bazel: ${{ bazel }} + build_targets: + - "@xds//..." + test_targets: + - "@xds//..." diff --git a/.bcr/source.template.json b/.bcr/source.template.json new file mode 100644 index 00000000..ac0722c1 --- /dev/null +++ b/.bcr/source.template.json @@ -0,0 +1,5 @@ +{ + "integrity": "", + "strip_prefix": "xds-{VERSION}", + "url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz" +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..58865cf2 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: "weekly" diff --git a/.github/workflows/go-release.yml b/.github/workflows/go-release.yml new file mode 100644 index 00000000..b96e122c --- /dev/null +++ b/.github/workflows/go-release.yml @@ -0,0 +1,34 @@ +name: Go Module Release + +on: + push: + tags: + - 'v*' + +jobs: + release: + name: Verify and Test Go Module + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout code + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + + - name: Set up Go + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + with: + go-version: '1.24' + + - name: Verify Go module + working-directory: go + run: | + go mod verify + go mod tidy + go build ./... + + - name: Run Go tests + working-directory: go + run: go test ./... -v + diff --git a/.github/workflows/publish-to-bcr.yml b/.github/workflows/publish-to-bcr.yml new file mode 100644 index 00000000..94d50be7 --- /dev/null +++ b/.github/workflows/publish-to-bcr.yml @@ -0,0 +1,21 @@ +name: Publish to BCR + +on: + push: + tags: + - 'v*' + +jobs: + publish: + name: Publish to Bazel Central Registry + permissions: + contents: write + id-token: write + attestations: write + uses: bazel-contrib/publish-to-bcr/.github/workflows/publish.yaml@0bd40ad4f872b4d216d3f01bc0844ade304e2b5a # v1.1.0 + with: + tag_name: ${{ github.ref_name }} + draft: false + secrets: + publish_token: ${{ secrets.BCR_PUBLISH_TOKEN }} + diff --git a/.github/workflows/python-release.yml b/.github/workflows/python-release.yml new file mode 100644 index 00000000..09ca0222 --- /dev/null +++ b/.github/workflows/python-release.yml @@ -0,0 +1,47 @@ +name: Python Package Release + +on: + push: + tags: + - 'v*' + +jobs: + release: + name: Build and Publish Python Package + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/cncf-xds + permissions: + contents: write + id-token: write + + steps: + - name: Checkout code + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + pip install build + + - name: Build package + working-directory: python + run: python -m build + + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + with: + packages-dir: python/dist/ + + - name: Upload Python artifacts to release + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release upload "${{ github.ref_name }}" python/dist/* + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..6e22587d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,55 @@ +name: Create Release + +on: + push: + tags: + - 'v*' + +jobs: + create-release: + name: Create GitHub Release + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Checkout code + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + + - name: Extract version from tag + id: version + run: | + VERSION=${GITHUB_REF#refs/tags/v} + echo "number=$VERSION" >> $GITHUB_OUTPUT + + - name: Create GitHub Release + env: + GH_TOKEN: ${{ github.token }} + run: | + cat > "$RUNNER_TEMP/release-notes.md" << 'EOF' + # xDS Release ${{ github.ref_name }} + + This release includes updates for all language bindings: + + ## Python (PyPI) + ```bash + pip install cncf-xds==${{ steps.version.outputs.number }} + ``` + + ## Go Module + ```bash + go get github.com/cncf/xds/go@${{ github.ref_name }} + ``` + + ## Bazel (BCR) + ```starlark + bazel_dep(name = "xds", version = "${{ steps.version.outputs.number }}") + ``` + EOF + + gh release create "${{ github.ref_name }}" \ + --title "Release ${{ github.ref_name }}" \ + --notes-file "$RUNNER_TEMP/release-notes.md" \ + --generate-notes + + diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml new file mode 100644 index 00000000..a0708aeb --- /dev/null +++ b/.github/workflows/version-bump.yml @@ -0,0 +1,64 @@ +name: Version Bump + +on: + workflow_dispatch: + inputs: + version: + description: 'New version (e.g., 1.2.3)' + required: true + type: string + create_tag: + description: 'Create and push tag' + required: true + type: boolean + default: false + +jobs: + bump-version: + name: Bump Version + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Checkout code + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + fetch-depth: 0 + + - name: Configure Git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Update Python version + working-directory: python + run: | + sed -i "s/version = \".*\"/version = \"${{ inputs.version }}\"/" pyproject.toml + cat pyproject.toml + + - name: Update Go version (create VERSION file) + working-directory: go + run: | + echo "${{ inputs.version }}" > VERSION + cat VERSION + + - name: Update Bazel version + run: | + sed -i "s/version = \".*\"/version = \"${{ inputs.version }}\"/" MODULE.bazel + cat MODULE.bazel + + - name: Commit version changes + run: | + git add . + git commit -m "chore: bump version to ${{ inputs.version }}" + git push + + - name: Create and push tag + if: inputs.create_tag + run: | + TAG_NAME="v${{ inputs.version }}" + git tag -a "$TAG_NAME" -m "Release version ${{ inputs.version }}" + git push origin "$TAG_NAME" + echo "Created and pushed tag: $TAG_NAME" + diff --git a/.gitignore b/.gitignore index 0d9fbad4..9ad5727e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,14 @@ bazel-* MODULE.bazel.lock -__pycache__/ \ No newline at end of file +__pycache__/ + +# Python build artifacts +python/dist/ +python/build/ +python/*.egg-info/ +*.pyc +*.pyo +*.pyd +.Python +env/ +venv/ \ No newline at end of file diff --git a/DEVELOPER.md b/DEVELOPER.md index 46a10f53..3ed5ef43 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -8,3 +8,17 @@ Run the following command to update the generated files and commit them with you bazel build //... tools/generate_go_protobuf.py ``` + +## Versioning and Releases + +For information about versioning and the release process, see [VERSIONING.md](VERSIONING.md). + +### Quick Release Guide + +To create a new release: + +1. Use the GitHub Actions **Version Bump** workflow to update the version +2. Or manually create a tag: `git tag python/v1.2.3` or `git tag go/v1.2.3` +3. Push the tag: `git push origin ` +4. The release workflow will automatically build and publish the package + diff --git a/README.md b/README.md index 06f66a59..32b8e4d0 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,21 @@ https://github.com/envoyproxy/envoy/tree/main/api. Our long-term goal is to move the entire API to this repository, this will be done opportunistically over time as we generalize parts of the API to be less client-specific. +## Language Bindings + +This repository provides xDS protocol buffer bindings for multiple languages with unified versioning: + +- **Python**: Available on [PyPI](https://pypi.org/project/cncf-xds/) - `pip install cncf-xds` +- **Go**: Available as a Go module - `go get github.com/cncf/xds/go` +- **Bazel**: Available on [Bazel Central Registry](https://registry.bazel.build/) - Add to `MODULE.bazel`: + ```starlark + bazel_dep(name = "xds", version = "X.Y.Z") + ``` + +All language bindings share the same version number and are released together. + +For versioning and release information, see [VERSIONING.md](VERSIONING.md). + # Mailing list and meetings We have an open mailing list [xds-wg@lists.cncf.io](https://lists.cncf.io/g/xds-wg/) for communication and announcements. We also meet diff --git a/VERSIONING.md b/VERSIONING.md new file mode 100644 index 00000000..ec639ac8 --- /dev/null +++ b/VERSIONING.md @@ -0,0 +1,145 @@ +# Versioning Guide + +This document describes the versioning and release process for the xDS project. + +## Overview + +The xDS project uses a unified version across all language ecosystems: + +- **Python**: Published to PyPI as the `xds` package +- **Go**: Published as Go modules at `github.com/cncf/xds/go` +- **Bazel**: Published to Bazel Central Registry (BCR) as `xds` module + +All ecosystems share the same version number and are released together. + +## Version Format + +All versions follow [Semantic Versioning 2.0.0](https://semver.org/): + +- **MAJOR** version for incompatible API changes +- **MINOR** version for backwards-compatible functionality additions +- **PATCH** version for backwards-compatible bug fixes + +## Tag Format + +A single tag format is used for all ecosystems: + +- Releases: `v1.2.3` + +Pushing a `v*` tag triggers releases for Python (PyPI), Go (GitHub release), and Bazel (BCR) simultaneously. + +## Release Process + +### Manual Version Bump + +Use the Version Bump workflow to update version numbers across all ecosystems: + +1. Go to **Actions** → **Version Bump** +2. Click **Run workflow** +3. Enter the new version (e.g., `1.2.3`) +4. Choose whether to create a tag immediately +5. Click **Run workflow** + +This will: +- Update the version in Python's `pyproject.toml` +- Update the version in Go's `VERSION` file +- Update the version in Bazel's `MODULE.bazel` +- Commit the changes +- Optionally create and push a version tag + +### Automated Release + +When a `v*` tag is pushed, all release workflows are triggered simultaneously: + +#### Release Creation +1. A unified GitHub release is created with release notes +2. Release includes installation instructions for all ecosystems + +#### Python +1. Builds the Python package +2. Publishes to PyPI +3. Uploads Python distribution artifacts to the release + +#### Go +1. Verifies the Go module +2. Runs tests + +#### Bazel +1. Automatically publishes to Bazel Central Registry using the `publish-to-bcr` reusable workflow +2. Generates BCR entry files (MODULE.bazel, source.json, presubmit.yml, metadata.json) +3. Creates attestations for security verification +4. Opens a pull request to bazelbuild/bazel-central-registry + + +### Creating a Release Manually + +To create a unified release for all ecosystems: + +```bash +# Update version in all ecosystem files +cd python +sed -i 's/version = ".*"/version = "X.Y.Z"/' pyproject.toml +cd ../go +echo "X.Y.Z" > VERSION +cd .. +sed -i 's/version = ".*"/version = "X.Y.Z"/' MODULE.bazel + +# Commit changes +git add python/pyproject.toml go/VERSION MODULE.bazel +git commit -m "chore: bump version to X.Y.Z" +git push + +# Create and push tag (this will trigger all release workflows) +git tag vX.Y.Z +git push origin vX.Y.Z + +# The following happens automatically: +# - Python package is built and published to PyPI +# - Go module release is created on GitHub +# - publish-to-bcr workflow generates BCR entry and opens PR to bazel-central-registry +``` + +## Publishing Credentials + +### Python (PyPI) + +The Python release workflow uses OIDC trusted publishing. To configure: + +1. Go to PyPI → Account Settings → Publishing +2. Add a new publisher: + - PyPI Project Name: `xds` + - Owner: `cncf` + - Repository: `xds` + - Workflow: `python-release.yml` + - Environment: (leave empty) + +No API tokens are needed with OIDC. + +### Go Modules + +Go modules are automatically published when tags are pushed. No additional setup required. + +### Bazel (BCR) + +Bazel modules are automatically published to the Bazel Central Registry using the `publish-to-bcr` reusable workflow: + +#### Setup (One-time) + +1. **Fork the BCR**: Fork [bazel-central-registry](https://github.com/bazelbuild/bazel-central-registry) to the CNCF organization or appropriate account +2. **Create a Personal Access Token (PAT)**: + - Go to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic) + - Create a new token with `repo` and `workflow` scopes + - Save it as a repository secret named `BCR_PUBLISH_TOKEN` +3. **Update the workflow**: Set `registry_fork` in `.github/workflows/publish-to-bcr.yml` to the CNCF fork (currently set to `cncf/bazel-central-registry`) + +#### How It Works + +When you push a `v*` tag: +1. The workflow automatically generates BCR entry files from `.bcr` templates +2. Creates security attestations +3. Opens a pull request to the BCR repository +4. BCR maintainers review and merge the PR + +No manual file copying or PR creation needed! + +See [publish-to-bcr documentation](https://github.com/bazel-contrib/publish-to-bcr) for more details. diff --git a/python/dist/xds-0.1.0-py3-none-any.whl b/python/dist/xds-0.1.0-py3-none-any.whl deleted file mode 100644 index 604b11bbfa86a44c31a354049690a7ef4a212aba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45988 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 P0{m?QUbWyv#DD(>dk5RF diff --git a/python/dist/xds-0.1.0.tar.gz b/python/dist/xds-0.1.0.tar.gz deleted file mode 100644 index 608d815a8ab4f7a2ea790196d4905025584498c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16921 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 W9`OJB;g