Merge branch 'master' into bcr
diff --git a/.bcr/README.md b/.bcr/README.md
new file mode 100644
index 0000000..2b25d48
--- /dev/null
+++ b/.bcr/README.md
@@ -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)
diff --git a/.bcr/config.yml b/.bcr/config.yml
new file mode 100644
index 0000000..f395e5a
--- /dev/null
+++ b/.bcr/config.yml
@@ -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"
diff --git a/.bcr/go/metadata.template.json b/.bcr/go/metadata.template.json
new file mode 100644
index 0000000..df42141
--- /dev/null
+++ b/.bcr/go/metadata.template.json
@@ -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": {}
+}
diff --git a/.bcr/go/presubmit.yml b/.bcr/go/presubmit.yml
new file mode 100644
index 0000000..3e3aa53
--- /dev/null
+++ b/.bcr/go/presubmit.yml
@@ -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"
\ No newline at end of file
diff --git a/.bcr/go/source.template.json b/.bcr/go/source.template.json
new file mode 100644
index 0000000..362d6df
--- /dev/null
+++ b/.bcr/go/source.template.json
@@ -0,0 +1,5 @@
+{
+ "integrity": "",
+ "strip_prefix": "{REPO}-{VERSION}/go",
+ "url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz"
+}
diff --git a/.bcr/metadata.template.json b/.bcr/metadata.template.json
new file mode 100644
index 0000000..df42141
--- /dev/null
+++ b/.bcr/metadata.template.json
@@ -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": {}
+}
diff --git a/.bcr/presubmit.yml b/.bcr/presubmit.yml
new file mode 100644
index 0000000..9e53079
--- /dev/null
+++ b/.bcr/presubmit.yml
@@ -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'
\ No newline at end of file
diff --git a/.bcr/source.template.json b/.bcr/source.template.json
new file mode 100644
index 0000000..4f14819
--- /dev/null
+++ b/.bcr/source.template.json
@@ -0,0 +1,5 @@
+{
+ "integrity": "",
+ "strip_prefix": "{REPO}-{VERSION}",
+ "url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz"
+}
diff --git a/.github/workflows/publish_to_bcr.yaml b/.github/workflows/publish_to_bcr.yaml
new file mode 100644
index 0000000..a0d9ef5
--- /dev/null
+++ b/.github/workflows/publish_to_bcr.yaml
@@ -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 }}