π― Objective
Enable full remote execution and remote caching support for rules_wasm_component to achieve 3-10x faster builds with distributed build infrastructure.
π Current State Analysis
β Remote Execution Blockers
- TinyGo:
"local": "1" execution requirement (go/defs.bzl:282)
- NPM:
"local": "1" execution requirement (js/defs.bzl:316)
- WKG Rules:
use_default_shell_env = True for registry authentication
- ctx.actions.run_shell: 7 files still use non-hermetic shell execution
β
Already Remote-Ready
- Rust compilation: Fully hermetic with wasm transitions
- WASM validation/transformation: Pure tool execution
- WIT processing: Hermetic wit-bindgen usage
- Component composition: WAC operations are tool-only
π Implementation Plan
Phase 1: Remove Remote Execution Blockers (Critical)
1.1 Fix TinyGo Remote Execution
File: go/defs.bzl:282
# Current (blocks remote execution):
execution_requirements = {
"local": "1", # TinyGo requires local execution
}
# Fixed (enable remote execution):
execution_requirements = {
"no-network": "1", # Hermetic build, no network needed
"supports-path-mapping": "1", # Support for path virtualization
}
Additional Changes:
- Remove hardcoded tool paths (
/Users/r/.cargo/bin, etc.) in go/defs.bzl:186
- Use
ctx.configuration.host_path_separator for cross-platform paths
- Replace wrapper script with direct toolchain binary execution
1.2 Fix NPM Remote Execution
File: js/defs.bzl:316
# Current (blocks remote execution):
execution_requirements = {
"local": "1", # NPM install requires network access
}
# Option A: Pre-download dependencies (recommended)
execution_requirements = {
"no-network": "1", # Pre-downloaded deps, no network needed
}
1.3 Fix WKG Registry Authentication
Files: wkg/defs.bzl (multiple locations)
# Current (breaks remote execution):
use_default_shell_env = True # Needed for registry authentication
# Fixed: Use explicit credential passing
env = {
"WKG_REGISTRY_TOKEN": ctx.var.get("WKG_REGISTRY_TOKEN", ""),
"REGISTRY_CONFIG": ctx.file.registry_config.path if ctx.file.registry_config else "",
}
use_default_shell_env = False
Phase 2: Eliminate ctx.actions.run_shell
Files to modernize:
Replace shell commands with direct tool execution using ctx.actions.run().
Phase 3: Remote Caching Optimization
3.1 Add Cache Keys for WASM Artifacts
def _rust_wasm_component_impl(ctx):
# Add cache-friendly metadata
cache_key_inputs = [
ctx.attr.optimization,
ctx.attr.wit[WitInfo].package_name if ctx.attr.wit else "",
str(sorted(ctx.attr.features)),
ctx.toolchains["@rules_rust//rust:toolchain_type"].rustc_version,
]
ctx.actions.write(
output = ctx.actions.declare_file(ctx.attr.name + ".cache_key"),
content = "\n".join(cache_key_inputs),
)
3.2 Optimize Large File Handling
execution_requirements = {
"supports-workers": "1", # Enable persistent workers
"cpu": "2", # Specify resource requirements
"memory": "4G", # Large WASM files need memory
}
3.3 Add Action Mnemonics
mnemonic = "WasmComponentBuild", # Instead of generic names
progress_message = "Building WASM component %{label}",
Phase 4: Remote Execution Configuration
4.1 .bazelrc Configuration
# Remote execution settings
build:remote --remote_executor=grpcs://your-rbe-instance
build:remote --remote_cache=grpcs://your-cache-instance
build:remote --incompatible_strict_action_env=true
build:remote --spawn_strategy=remote
build:remote --strategy=WasmComponentBuild=remote
build:remote --strategy=TinyGoCompile=remote
# Remote caching only
build:cache --remote_cache=grpcs://your-cache-instance
build:cache --incompatible_strict_action_env=true
# Platform configuration
build:remote --extra_execution_platforms=@rbe_default//config:platform
build:remote --host_platform=@rbe_default//config:platform
build:remote --platforms=@rbe_default//config:platform
π Expected Benefits
π Performance Improvements
- Build Speed: 3-10x faster builds with remote execution clusters
- Cache Hit Rate: 80-95% cache hits with proper action keys
- Parallelization: Unlimited parallel execution vs local CPU limits
π° Cost Efficiency
- Local Resources: Free up developer machines
- CI/CD Speed: Faster deployments and testing
- Scalability: Handle large-scale WASM component builds
π Reliability
- Hermetic Builds: Guaranteed reproducibility across environments
- Platform Independence: Build anywhere, run anywhere
- Disaster Recovery: Distributed build infrastructure
π― Success Criteria
π Implementation Timeline
| Phase |
Effort |
Timeline |
Risk |
| Phase 1: Remove Blockers |
3-5 days |
Week 1 |
Medium |
| Phase 2: Eliminate Shell |
2-3 days |
Week 2 |
Low |
| Phase 3: Cache Optimization |
2-3 days |
Week 2-3 |
Low |
| Phase 4: RBE Configuration |
1-2 days |
Week 3 |
Medium |
Total: ~2-3 weeks for complete remote execution + remote caching support
π Related Issues
- Builds on existing hermetic toolchain foundation
- Complements shell script elimination efforts
- Enables enterprise-scale WASM component development
π References
π― Objective
Enable full remote execution and remote caching support for rules_wasm_component to achieve 3-10x faster builds with distributed build infrastructure.
π Current State Analysis
β Remote Execution Blockers
"local": "1"execution requirement (go/defs.bzl:282)"local": "1"execution requirement (js/defs.bzl:316)use_default_shell_env = Truefor registry authenticationβ Already Remote-Ready
π Implementation Plan
Phase 1: Remove Remote Execution Blockers (Critical)
1.1 Fix TinyGo Remote Execution
File:
go/defs.bzl:282Additional Changes:
/Users/r/.cargo/bin, etc.) in go/defs.bzl:186ctx.configuration.host_path_separatorfor cross-platform paths1.2 Fix NPM Remote Execution
File:
js/defs.bzl:3161.3 Fix WKG Registry Authentication
Files:
wkg/defs.bzl(multiple locations)Phase 2: Eliminate ctx.actions.run_shell
Files to modernize:
wit/wit_bindgen.bzlrust/rust_wasm_component_bindgen.bzlwasm/wasm_signing.bzlwasm/multi_language_wasm_component.bzlwit/wit_markdown.bzlReplace shell commands with direct tool execution using
ctx.actions.run().Phase 3: Remote Caching Optimization
3.1 Add Cache Keys for WASM Artifacts
3.2 Optimize Large File Handling
3.3 Add Action Mnemonics
Phase 4: Remote Execution Configuration
4.1 .bazelrc Configuration
π Expected Benefits
π Performance Improvements
π° Cost Efficiency
π Reliability
π― Success Criteria
"local": "1"execution requirements remainctx.actions.run_shell()calls in core rulesπ Implementation Timeline
Total: ~2-3 weeks for complete remote execution + remote caching support
π Related Issues
π References