Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .bcr/README.md
Original file line number Diff line number Diff line change
@@ -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 changes: 8 additions & 0 deletions .bcr/config.yml
Original file line number Diff line number Diff line change
@@ -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"
14 changes: 14 additions & 0 deletions .bcr/go/metadata.template.json
Original file line number Diff line number Diff line change
@@ -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": {}
}
32 changes: 32 additions & 0 deletions .bcr/go/presubmit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
matrix:
platform:
- debian10
- ubuntu2004
- macos
- macos_arm64
bazel:
- 8.x
- 7.x
tasks:
verify_targets:
name: Verify build targets
platform: ${{ platform }}
bazel: ${{ bazel }}
build_targets:
- '@brotli_go//cbrotli'
build_flags:
- "--conlyopt=-Wno-error=conversion"
- "--conlyopt=-Wno-error=sign-conversion"
- "--copt=-Wno-error=conversion"
- "--copt=-Wno-error=sign-conversion"
- "--host_conlyopt=-Wno-error=conversion"
- "--host_copt=-Wno-error=conversion"
test_targets:
- '@brotli_go//cbrotli:cbrotli_test'
test_flags:
- "--conlyopt=-Wno-error=conversion"
- "--conlyopt=-Wno-error=sign-conversion"
- "--copt=-Wno-error=conversion"
- "--copt=-Wno-error=sign-conversion"
- "--host_conlyopt=-Wno-error=conversion"
- "--host_copt=-Wno-error=conversion"
5 changes: 5 additions & 0 deletions .bcr/go/source.template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"integrity": "",
"strip_prefix": "{REPO}-{VERSION}/go",
"url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz"
}
14 changes: 14 additions & 0 deletions .bcr/metadata.template.json
Original file line number Diff line number Diff line change
@@ -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": {}
}
41 changes: 41 additions & 0 deletions .bcr/presubmit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
matrix:
platform:
- debian10
- ubuntu2004
- macos
- macos_arm64
bazel:
- 7.x
- 8.x
tasks:
verify_targets:
name: Verify build targets
platform: ${{ platform }}
bazel: ${{ bazel }}
build_targets:
- '@brotli//:brotli'
- '@brotli//:brotlicommon'
- '@brotli//:brotlidec'
- '@brotli//:brotlienc'
build_flags:
- "--cxxopt=-std=c++17"
- "--conlyopt=-Wno-error=conversion"
- "--conlyopt=-Wno-error=sign-conversion"
- "--copt=-Wno-error=conversion"
- "--copt=-Wno-error=sign-conversion"
- "--host_conlyopt=-Wno-error=conversion"
- "--host_copt=-Wno-error=conversion"
verify_targets_windows:
name: Verify build targets
platform: windows
bazel: ${{ bazel }}
build_flags:
- "--cxxopt=/std:c++17"
- "--cxxopt=/D_WIN32_WINNT=0x0602"
- "--cxxopt=/DWINVER=0x0602"
- "--host_cxxopt=/std:c++17"
build_targets:
- '@brotli//:brotli'
- '@brotli//:brotlicommon'
- '@brotli//:brotlidec'
- '@brotli//:brotlienc'
5 changes: 5 additions & 0 deletions .bcr/source.template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"integrity": "",
"strip_prefix": "{REPO}-{VERSION}",
"url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz"
}
29 changes: 29 additions & 0 deletions .github/workflows/publish_to_bcr.yaml
Original file line number Diff line number Diff line change
@@ -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 }}