Add BCR publishing configuration for brotli and brotli_go modules

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
This commit is contained in:
Matthieu MOREL
2025-11-23 08:41:07 +01:00
parent 5fa73e23be
commit 5251c3cd79
9 changed files with 184 additions and 0 deletions

69
.bcr/README.md Normal file
View File

@@ -0,0 +1,69 @@
# Bazel Central Registry Publishing Configuration
This directory contains the configuration files for publishing brotli modules to the Bazel Central Registry (BCR).
## Modules
This repository publishes two modules to BCR:
1. **brotli** (root) - The main Brotli C library
2. **brotli_go** (go/) - Go bindings for Brotli
Each module has its own set of template files under `.bcr` and `.bcr/go` respectively.
## Files
### Root module (brotli)
- **metadata.template.json**: Metadata about the brotli module including homepage, maintainers, and repository location
- **source.template.json**: Template for generating source archive URLs for releases
- **presubmit.yml**: BCR CI configuration that defines build and test tasks to validate the module
### Go module (brotli_go)
- **go/metadata.template.json**: Metadata for the brotli_go module
- **go/source.template.json**: Source configuration with path to the go subdirectory
- **go/presubmit.yml**: BCR CI configuration for the Go module
### Shared
- **config.yml**: Configuration specifying both modules via moduleRoots
- **README.md**: This file
## Setup (One-time)
Before you can publish to BCR, you need to set up the following:
1. **Fork the Bazel Central Registry**
- Fork https://github.com/bazelbuild/bazel-central-registry to your GitHub account
2. **Create a Personal Access Token**
- Go to GitHub Settings > Developer settings > Personal access tokens > Tokens (classic)
- Click "Generate new token (classic)"
- Select scopes: `repo` and `workflow`
- Generate the token and copy it
3. **Add the token to repository secrets**
- Go to the brotli repository Settings > Secrets and variables > Actions
- Click "New repository secret"
- Name: `BCR_PUBLISH_TOKEN`
- Value: Paste the token from step 2
- Click "Add secret"
## Publishing Process
To publish new versions of both modules to BCR:
1. Create a GitHub release with a tag (e.g., `v1.2.1`)
2. Go to the Actions tab in GitHub
3. Select the "Publish to BCR" workflow
4. Click "Run workflow"
5. Enter the release tag name (e.g., `v1.2.1`)
6. Enter your BCR fork (e.g., `yourusername/bazel-central-registry`)
7. Click "Run workflow"
The workflow will automatically create pull requests to the Bazel Central Registry for both modules.
## References
- [Bazel Central Registry](https://github.com/bazelbuild/bazel-central-registry)
- [publish-to-bcr Documentation](https://github.com/bazel-contrib/publish-to-bcr)
- [Bzlmod User Guide](https://bazel.build/external/module)
- [Multi-module Publishing](https://github.com/bazel-contrib/publish-to-bcr/tree/main/templates#optional-configyml)

8
.bcr/config.yml Normal file
View File

@@ -0,0 +1,8 @@
# BCR configuration file for publish-to-bcr
fixedReleaser:
login: eustas
email: eustas@google.com
# Publish both the main brotli module and the Go bindings module
moduleRoots:
- "."
- "go"

View File

@@ -0,0 +1,14 @@
{
"homepage": "https://github.com/google/brotli",
"maintainers": [
{
"email": "eustas@google.com",
"github": "eustas",
"name": "Evgenii Kliuchnikov",
"github_user_id": 203457
}
],
"repository": ["github:google/brotli"],
"versions": [],
"yanked_versions": {}
}

19
.bcr/go/presubmit.yml Normal file
View File

@@ -0,0 +1,19 @@
matrix:
platform:
- debian10
- ubuntu2004
- macos
- macos_arm64
bazel:
- 8.x
- 7.x
- 6.x
tasks:
verify_targets:
name: Verify build targets
platform: ${{ platform }}
bazel: ${{ bazel }}
build_targets:
- '@brotli_go//cbrotli'
test_targets:
- '@brotli_go//cbrotli:cbrotli_test'

View File

@@ -0,0 +1,5 @@
{
"integrity": "",
"strip_prefix": "{REPO}-{VERSION}/go",
"url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz"
}

View File

@@ -0,0 +1,14 @@
{
"homepage": "https://github.com/google/brotli",
"maintainers": [
{
"email": "eustas@google.com",
"github": "eustas",
"name": "Evgenii Kliuchnikov",
"github_user_id": 203457
}
],
"repository": ["github:google/brotli"],
"versions": [],
"yanked_versions": {}
}

21
.bcr/presubmit.yml Normal file
View File

@@ -0,0 +1,21 @@
matrix:
platform:
- debian10
- ubuntu2004
- macos
- macos_arm64
- windows
bazel:
- 8.x
- 7.x
- 6.x
tasks:
verify_targets:
name: Verify build targets
platform: ${{ platform }}
bazel: ${{ bazel }}
build_targets:
- '@brotli//:brotli'
- '@brotli//:brotlicommon'
- '@brotli//:brotlidec'
- '@brotli//:brotlienc'

View File

@@ -0,0 +1,5 @@
{
"integrity": "",
"strip_prefix": "{REPO}-{VERSION}",
"url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz"
}

29
.github/workflows/publish_to_bcr.yaml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Publish to BCR
on:
# Manually trigger the publish workflow
workflow_dispatch:
inputs:
tag_name:
description: Release tag to publish to the Bazel Central Registry
required: true
type: string
registry_fork:
description: Registry fork to push to (e.g., username/bazel-central-registry)
required: true
type: string
jobs:
publish:
permissions:
contents: write
id-token: write
attestations: write
uses: bazel-contrib/publish-to-bcr/.github/workflows/publish.yaml@v2
with:
tag_name: ${{ inputs.tag_name }}
registry_fork: ${{ inputs.registry_fork }}
# Set to false since not using the release_ruleset workflow
attest: false
secrets:
publish_token: ${{ secrets.BCR_PUBLISH_TOKEN }}