[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7182JBHJW4CPJQJG87FS79Z":3,"skill-same:01M7182JBHJW4CPJQJG87FS79Z":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":14,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M7182JBHJW4CPJQJG87FS79Z","bazel-build-optimization",null,"Optimize Bazel builds for large-scale monorepos. Use when configuring Bazel, implementing remote execution, or optimizing build performance for enterprise codebases.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fbazel-build-optimization\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"bazel","bazel build optimization","build","Optimization","remote execution","scale","2026","optimize","unknown","when","use","remote","execution","implementing","Enterprise","performance","for","community","2026-11-10 10:12:30",false,"---\nname: bazel-build-optimization\ndescription: \"Optimize Bazel builds for large-scale monorepos. Use when configuring Bazel, implementing remote execution, or optimizing build performance for enterprise codebases.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Bazel Build Optimization\n\nProduction patterns for Bazel in large-scale monorepos.\n\n## Do not use this skill when\n\n- The task is unrelated to bazel build optimization\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources\u002Fimplementation-playbook.md`.\n\n## Use this skill when\n\n- Setting up Bazel for monorepos\n- Configuring remote caching\u002Fexecution\n- Optimizing build times\n- Writing custom Bazel rules\n- Debugging build issues\n- Migrating to Bazel\n\n## Core Concepts\n\n### 1. Bazel Architecture\n\n```\nworkspace\u002F\n├── WORKSPACE.bazel       # External dependencies\n├── .bazelrc              # Build configurations\n├── .bazelversion         # Bazel version\n├── BUILD.bazel           # Root build file\n├── apps\u002F\n│   └── web\u002F\n│       └── BUILD.bazel\n├── libs\u002F\n│   └── utils\u002F\n│       └── BUILD.bazel\n└── tools\u002F\n    └── bazel\u002F\n        └── rules\u002F\n```\n\n### 2. Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| **Target** | Buildable unit (library, binary, test) |\n| **Package** | Directory with BUILD file |\n| **Label** | Target identifier `\u002F\u002Fpath\u002Fto:target` |\n| **Rule** | Defines how to build a target |\n| **Aspect** | Cross-cutting build behavior |\n\n## Templates\n\n### Template 1: WORKSPACE Configuration\n\n```python\n# WORKSPACE.bazel\nworkspace(name = \"myproject\")\n\nload(\"@bazel_tools\u002F\u002Ftools\u002Fbuild_defs\u002Frepo:http.bzl\", \"http_archive\")\n\n# Rules for JavaScript\u002FTypeScript\nhttp_archive(\n    name = \"aspect_rules_js\",\n    sha256 = \"...\",\n    strip_prefix = \"rules_js-1.34.0\",\n    url = \"https:\u002F\u002Fgithub.com\u002Faspect-build\u002Frules_js\u002Freleases\u002Fdownload\u002Fv1.34.0\u002Frules_js-v1.34.0.tar.gz\",\n)\n\nload(\"@aspect_rules_js\u002F\u002Fjs:repositories.bzl\", \"rules_js_dependencies\")\nrules_js_dependencies()\n\nload(\"@rules_nodejs\u002F\u002Fnodejs:repositories.bzl\", \"nodejs_register_toolchains\")\nnodejs_register_toolchains(\n    name = \"nodejs\",\n    node_version = \"20.9.0\",\n)\n\nload(\"@aspect_rules_js\u002F\u002Fnpm:repositories.bzl\", \"npm_translate_lock\")\nnpm_translate_lock(\n    name = \"npm\",\n    pnpm_lock = \"\u002F\u002F:pnpm-lock.yaml\",\n    verify_node_modules_ignored = \"\u002F\u002F:.bazelignore\",\n)\n\nload(\"@npm\u002F\u002F:repositories.bzl\", \"npm_repositories\")\nnpm_repositories()\n\n# Rules for Python\nhttp_archive(\n    name = \"rules_python\",\n    sha256 = \"...\",\n    strip_prefix = \"rules_python-0.27.0\",\n    url = \"https:\u002F\u002Fgithub.com\u002Fbazelbuild\u002Frules_python\u002Freleases\u002Fdownload\u002F0.27.0\u002Frules_python-0.27.0.tar.gz\",\n)\n\nload(\"@rules_python\u002F\u002Fpython:repositories.bzl\", \"py_repositories\")\npy_repositories()\n```\n\n### Template 2: .bazelrc Configuration\n\n```bash\n# .bazelrc\n\n# Build settings\nbuild --enable_platform_specific_config\nbuild --incompatible_enable_cc_toolchain_resolution\nbuild --experimental_strict_conflict_checks\n\n# Performance\nbuild --jobs=auto\nbuild --local_cpu_resources=HOST_CPUS*.75\nbuild --local_ram_resources=HOST_RAM*.75\n\n# Caching\nbuild --disk_cache=~\u002F.cache\u002Fbazel-disk\nbuild --repository_cache=~\u002F.cache\u002Fbazel-repo\n\n# Remote caching (optional)\nbuild:remote-cache --remote_cache=grpcs:\u002F\u002Fcache.example.com\nbuild:remote-cache --remote_upload_local_results=true\nbuild:remote-cache --remote_timeout=3600\n\n# Remote execution (optional)\nbuild:remote-exec --remote_executor=grpcs:\u002F\u002Fremote.example.com\nbuild:remote-exec --remote_instance_name=projects\u002Fmyproject\u002Finstances\u002Fdefault\nbuild:remote-exec --jobs=500\n\n# Platform configurations\nbuild:linux --platforms=\u002F\u002Fplatforms:linux_x86_64\nbuild:macos --platforms=\u002F\u002Fplatforms:macos_arm64\n\n# CI configuration\nbuild:ci --config=remote-cache\nbuild:ci --build_metadata=ROLE=CI\nbuild:ci --bes_results_url=https:\u002F\u002Fresults.example.com\u002Finvocation\u002F\nbuild:ci --bes_backend=grpcs:\u002F\u002Fbes.example.com\n\n# Test settings\ntest --test_output=errors\ntest --test_summary=detailed\n\n# Coverage\ncoverage --combined_report=lcov\ncoverage --instrumentation_filter=\"\u002F\u002F...\"\n\n# Convenience aliases\nbuild:opt --compilation_mode=opt\nbuild:dbg --compilation_mode=dbg\n\n# Import user settings\ntry-import %workspace%\u002Fuser.bazelrc\n```\n\n### Template 3: TypeScript Library BUILD\n\n```python\n# libs\u002Futils\u002FBUILD.bazel\nload(\"@aspect_rules_ts\u002F\u002Fts:defs.bzl\", \"ts_project\")\nload(\"@aspect_rules_js\u002F\u002Fjs:defs.bzl\", \"js_library\")\nload(\"@npm\u002F\u002F:defs.bzl\", \"npm_link_all_packages\")\n\nnpm_link_all_packages(name = \"node_modules\")\n\nts_project(\n    name = \"utils_ts\",\n    srcs = glob([\"src\u002F**\u002F*.ts\"]),\n    declaration = True,\n    source_map = True,\n    tsconfig = \"\u002F\u002F:tsconfig.json\",\n    deps = [\n        \":node_modules\u002F@types\u002Fnode\",\n    ],\n)\n\njs_library(\n    name = \"utils\",\n    srcs = [\":utils_ts\"],\n    visibility = [\"\u002F\u002Fvisibility:public\"],\n)\n\n# Tests\nload(\"@aspect_rules_jest\u002F\u002Fjest:defs.bzl\", \"jest_test\")\n\njest_test(\n    name = \"utils_test\",\n    config = \"\u002F\u002F:jest.config.js\",\n    data = [\n        \":utils\",\n        \"\u002F\u002F:node_modules\u002Fjest\",\n    ],\n    node_modules = \"\u002F\u002F:node_modules\",\n)\n```\n\n### Template 4: Python Library BUILD\n\n```python\n# libs\u002Fml\u002FBUILD.bazel\nload(\"@rules_python\u002F\u002Fpython:defs.bzl\", \"py_library\", \"py_test\", \"py_binary\")\nload(\"@pip\u002F\u002F:requirements.bzl\", \"requirement\")\n\npy_library(\n    name = \"ml\",\n    srcs = glob([\"src\u002F**\u002F*.py\"]),\n    deps = [\n        requirement(\"numpy\"),\n        requirement(\"pandas\"),\n        requirement(\"scikit-learn\"),\n        \"\u002F\u002Flibs\u002Futils:utils_py\",\n    ],\n    visibility = [\"\u002F\u002Fvisibility:public\"],\n)\n\npy_test(\n    name = \"ml_test\",\n    srcs = glob([\"tests\u002F**\u002F*.py\"]),\n    deps = [\n        \":ml\",\n        requirement(\"pytest\"),\n    ],\n    size = \"medium\",\n    timeout = \"moderate\",\n)\n\npy_binary(\n    name = \"train\",\n    srcs = [\"train.py\"],\n    deps = [\":ml\"],\n    data = [\"\u002F\u002Fdata:training_data\"],\n)\n```\n\n### Template 5: Custom Rule for Docker\n\n```python\n# tools\u002Fbazel\u002Frules\u002Fdocker.bzl\ndef _docker_image_impl(ctx):\n    dockerfile = ctx.file.dockerfile\n    base_image = ctx.attr.base_image\n    layers = ctx.files.layers\n\n    # Build the image\n    output = ctx.actions.declare_file(ctx.attr.name + \".tar\")\n\n    args = ctx.actions.args()\n    args.add(\"--dockerfile\", dockerfile)\n    args.add(\"--output\", output)\n    args.add(\"--base\", base_image)\n    args.add_all(\"--layer\", layers)\n\n    ctx.actions.run(\n        inputs = [dockerfile] + layers,\n        outputs = [output],\n        executable = ctx.executable._builder,\n        arguments = [args],\n        mnemonic = \"DockerBuild\",\n        progress_message = \"Building Docker image %s\" % ctx.label,\n    )\n\n    return [DefaultInfo(files = depset([output]))]\n\ndocker_image = rule(\n    implementation = _docker_image_impl,\n    attrs = {\n        \"dockerfile\": attr.label(\n            allow_single_file = [\".dockerfile\", \"Dockerfile\"],\n            mandatory = True,\n        ),\n        \"base_image\": attr.string(mandatory = True),\n        \"layers\": attr.label_list(allow_files = True),\n        \"_builder\": attr.label(\n            default = \"\u002F\u002Ftools\u002Fdocker:builder\",\n            executable = True,\n            cfg = \"exec\",\n        ),\n    },\n)\n```\n\n### Template 6: Query and Dependency Analysis\n\n```bash\n# Find all dependencies of a target\nbazel query \"deps(\u002F\u002Fapps\u002Fweb:web)\"\n\n# Find reverse dependencies (what depends on this)\nbazel query \"rdeps(\u002F\u002F..., \u002F\u002Flibs\u002Futils:utils)\"\n\n# Find all targets in a package\nbazel query \"\u002F\u002Flibs\u002F...\"\n\n# Find changed targets since commit\nbazel query \"rdeps(\u002F\u002F..., set($(git diff --name-only HEAD~1 | sed 's\u002F.*\u002F\"&\"\u002F' | tr '\\n' ' ')))\"\n\n# Generate dependency graph\nbazel query \"deps(\u002F\u002Fapps\u002Fweb:web)\" --output=graph | dot -Tpng > deps.png\n\n# Find all test targets\nbazel query \"kind('.*_test', \u002F\u002F...)\"\n\n# Find targets with specific tag\nbazel query \"attr(tags, 'integration', \u002F\u002F...)\"\n\n# Compute build graph size\nbazel query \"deps(\u002F\u002F...)\" --output=package | wc -l\n```\n\n### Template 7: Remote Execution Setup\n\n```python\n# platforms\u002FBUILD.bazel\nplatform(\n    name = \"linux_x86_64\",\n    constraint_values = [\n        \"@platforms\u002F\u002Fos:linux\",\n        \"@platforms\u002F\u002Fcpu:x86_64\",\n    ],\n    exec_properties = {\n        \"container-image\": \"docker:\u002F\u002Fgcr.io\u002Fmyproject\u002Fbazel-worker:latest\",\n        \"OSFamily\": \"Linux\",\n    },\n)\n\nplatform(\n    name = \"remote_linux\",\n    parents = [\":linux_x86_64\"],\n    exec_properties = {\n        \"Pool\": \"default\",\n        \"dockerNetwork\": \"standard\",\n    },\n)\n\n# toolchains\u002FBUILD.bazel\ntoolchain(\n    name = \"cc_toolchain_linux\",\n    exec_compatible_with = [\n        \"@platforms\u002F\u002Fos:linux\",\n        \"@platforms\u002F\u002Fcpu:x86_64\",\n    ],\n    target_compatible_with = [\n        \"@platforms\u002F\u002Fos:linux\",\n        \"@platforms\u002F\u002Fcpu:x86_64\",\n    ],\n    toolchain = \"@remotejdk11_linux\u002F\u002F:jdk\",\n    toolchain_type = \"@bazel_tools\u002F\u002Ftools\u002Fjdk:runtime_toolchain_type\",\n)\n```\n\n## Performance Optimization\n\n```bash\n# Profile build\nbazel build \u002F\u002F... --profile=profile.json\nbazel analyze-profile profile.json\n\n# Identify slow actions\nbazel build \u002F\u002F... --execution_log_json_file=exec_log.json\n\n# Memory profiling\nbazel build \u002F\u002F... --memory_profile=memory.json\n\n# Skip analysis cache\nbazel build \u002F\u002F... --notrack_incremental_state\n```\n\n## Best Practices\n\n### Do's\n- **Use fine-grained targets** - Better caching\n- **Pin dependencies** - Reproducible builds\n- **Enable remote caching** - Share build artifacts\n- **Use visibility wisely** - Enforce architecture\n- **Write BUILD files per directory** - Standard convention\n\n### Don'ts\n- **Don't use glob for deps** - Explicit is better\n- **Don't commit bazel-* dirs** - Add to .gitignore\n- **Don't skip WORKSPACE setup** - Foundation of build\n- **Don't ignore build warnings** - Technical debt\n\n## Resources\n\n- [Bazel Documentation](https:\u002F\u002Fbazel.build\u002Fdocs)\n- [Bazel Remote Execution](https:\u002F\u002Fbazel.build\u002Fdocs\u002Fremote-execution)\n- [rules_js](https:\u002F\u002Fgithub.com\u002Faspect-build\u002Frules_js)\n","# Bazel Build Optimization\n\nProduction patterns for Bazel in large-scale monorepos.\n\n## Do not use this skill when\n\n- The task is unrelated to bazel build optimization\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources\u002Fimplementation-playbook.md`.\n\n## Use this skill when\n\n- Setting up Bazel for monorepos\n- Configuring remote caching\u002Fexecution\n- Optimizing build times\n- Writing custom Bazel rules\n- Debugging build issues\n- Migrating to Bazel\n\n## Core Concepts\n\n### 1. Bazel Architecture\n\n```\nworkspace\u002F\n├── WORKSPACE.bazel       # External dependencies\n├── .bazelrc              # Build configurations\n├── .bazelversion         # Bazel version\n├── BUILD.bazel           # Root build file\n├── apps\u002F\n│   └── web\u002F\n│       └── BUILD.bazel\n├── libs\u002F\n│   └── utils\u002F\n│       └── BUILD.bazel\n└── tools\u002F\n    └── bazel\u002F\n        └── rules\u002F\n```\n\n### 2. Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| **Target** | Buildable unit (library, binary, test) |\n| **Package** | Directory with BUILD file |\n| **Label** | Target identifier `\u002F\u002Fpath\u002Fto:target` |\n| **Rule** | Defines how to build a target |\n| **Aspect** | Cross-cutting build behavior |\n\n## Templates\n\n### Template 1: WORKSPACE Configuration\n\n```python\n# WORKSPACE.bazel\nworkspace(name = \"myproject\")\n\nload(\"@bazel_tools\u002F\u002Ftools\u002Fbuild_defs\u002Frepo:http.bzl\", \"http_archive\")\n\n# Rules for JavaScript\u002FTypeScript\nhttp_archive(\n    name = \"aspect_rules_js\",\n    sha256 = \"...\",\n    strip_prefix = \"rules_js-1.34.0\",\n    url = \"https:\u002F\u002Fgithub.com\u002Faspect-build\u002Frules_js\u002Freleases\u002Fdownload\u002Fv1.34.0\u002Frules_js-v1.34.0.tar.gz\",\n)\n\nload(\"@aspect_rules_js\u002F\u002Fjs:repositories.bzl\", \"rules_js_dependencies\")\nrules_js_dependencies()\n\nload(\"@rules_nodejs\u002F\u002Fnodejs:repositories.bzl\", \"nodejs_register_toolchains\")\nnodejs_register_toolchains(\n    name = \"nodejs\",\n    node_version = \"20.9.0\",\n)\n\nload(\"@aspect_rules_js\u002F\u002Fnpm:repositories.bzl\", \"npm_translate_lock\")\nnpm_translate_lock(\n    name = \"npm\",\n    pnpm_lock = \"\u002F\u002F:pnpm-lock.yaml\",\n    verify_node_modules_ignored = \"\u002F\u002F:.bazelignore\",\n)\n\nload(\"@npm\u002F\u002F:repositories.bzl\", \"npm_repositories\")\nnpm_repositories()\n\n# Rules for Python\nhttp_archive(\n    name = \"rules_python\",\n    sha256 = \"...\",\n    strip_prefix = \"rules_python-0.27.0\",\n    url = \"https:\u002F\u002Fgithub.com\u002Fbazelbuild\u002Frules_python\u002Freleases\u002Fdownload\u002F0.27.0\u002Frules_python-0.27.0.tar.gz\",\n)\n\nload(\"@rules_python\u002F\u002Fpython:repositories.bzl\", \"py_repositories\")\npy_repositories()\n```\n\n### Template 2: .bazelrc Configuration\n\n```bash\n# .bazelrc\n\n# Build settings\nbuild --enable_platform_specific_config\nbuild --incompatible_enable_cc_toolchain_resolution\nbuild --experimental_strict_conflict_checks\n\n# Performance\nbuild --jobs=auto\nbuild --local_cpu_resources=HOST_CPUS*.75\nbuild --local_ram_resources=HOST_RAM*.75\n\n# Caching\nbuild --disk_cache=~\u002F.cache\u002Fbazel-disk\nbuild --repository_cache=~\u002F.cache\u002Fbazel-repo\n\n# Remote caching (optional)\nbuild:remote-cache --remote_cache=grpcs:\u002F\u002Fcache.example.com\nbuild:remote-cache --remote_upload_local_results=true\nbuild:remote-cache --remote_timeout=3600\n\n# Remote execution (optional)\nbuild:remote-exec --remote_executor=grpcs:\u002F\u002Fremote.example.com\nbuild:remote-exec --remote_instance_name=projects\u002Fmyproject\u002Finstances\u002Fdefault\nbuild:remote-exec --jobs=500\n\n# Platform configurations\nbuild:linux --platforms=\u002F\u002Fplatforms:linux_x86_64\nbuild:macos --platforms=\u002F\u002Fplatforms:macos_arm64\n\n# CI configuration\nbuild:ci --config=remote-cache\nbuild:ci --build_metadata=ROLE=CI\nbuild:ci --bes_results_url=https:\u002F\u002Fresults.example.com\u002Finvocation\u002F\nbuild:ci --bes_backend=grpcs:\u002F\u002Fbes.example.com\n\n# Test settings\ntest --test_output=errors\ntest --test_summary=detailed\n\n# Coverage\ncoverage --combined_report=lcov\ncoverage --instrumentation_filter=\"\u002F\u002F...\"\n\n# Convenience aliases\nbuild:opt --compilation_mode=opt\nbuild:dbg --compilation_mode=dbg\n\n# Import user settings\ntry-import %workspace%\u002Fuser.bazelrc\n```\n\n### Template 3: TypeScript Library BUILD\n\n```python\n# libs\u002Futils\u002FBUILD.bazel\nload(\"@aspect_rules_ts\u002F\u002Fts:defs.bzl\", \"ts_project\")\nload(\"@aspect_rules_js\u002F\u002Fjs:defs.bzl\", \"js_library\")\nload(\"@npm\u002F\u002F:defs.bzl\", \"npm_link_all_packages\")\n\nnpm_link_all_packages(name = \"node_modules\")\n\nts_project(\n    name = \"utils_ts\",\n    srcs = glob([\"src\u002F**\u002F*.ts\"]),\n    declaration = True,\n    source_map = True,\n    tsconfig = \"\u002F\u002F:tsconfig.json\",\n    deps = [\n        \":node_modules\u002F@types\u002Fnode\",\n    ],\n)\n\njs_library(\n    name = \"utils\",\n    srcs = [\":utils_ts\"],\n    visibility = [\"\u002F\u002Fvisibility:public\"],\n)\n\n# Tests\nload(\"@aspect_rules_jest\u002F\u002Fjest:defs.bzl\", \"jest_test\")\n\njest_test(\n    name = \"utils_test\",\n    config = \"\u002F\u002F:jest.config.js\",\n    data = [\n        \":utils\",\n        \"\u002F\u002F:node_modules\u002Fjest\",\n    ],\n    node_modules = \"\u002F\u002F:node_modules\",\n)\n```\n\n### Template 4: Python Library BUILD\n\n```python\n# libs\u002Fml\u002FBUILD.bazel\nload(\"@rules_python\u002F\u002Fpython:defs.bzl\", \"py_library\", \"py_test\", \"py_binary\")\nload(\"@pip\u002F\u002F:requirements.bzl\", \"requirement\")\n\npy_library(\n    name = \"ml\",\n    srcs = glob([\"src\u002F**\u002F*.py\"]),\n    deps = [\n        requirement(\"numpy\"),\n        requirement(\"pandas\"),\n        requirement(\"scikit-learn\"),\n        \"\u002F\u002Flibs\u002Futils:utils_py\",\n    ],\n    visibility = [\"\u002F\u002Fvisibility:public\"],\n)\n\npy_test(\n    name = \"ml_test\",\n    srcs = glob([\"tests\u002F**\u002F*.py\"]),\n    deps = [\n        \":ml\",\n        requirement(\"pytest\"),\n    ],\n    size = \"medium\",\n    timeout = \"moderate\",\n)\n\npy_binary(\n    name = \"train\",\n    srcs = [\"train.py\"],\n    deps = [\":ml\"],\n    data = [\"\u002F\u002Fdata:training_data\"],\n)\n```\n\n### Template 5: Custom Rule for Docker\n\n```python\n# tools\u002Fbazel\u002Frules\u002Fdocker.bzl\ndef _docker_image_impl(ctx):\n    dockerfile = ctx.file.dockerfile\n    base_image = ctx.attr.base_image\n    layers = ctx.files.layers\n\n    # Build the image\n    output = ctx.actions.declare_file(ctx.attr.name + \".tar\")\n\n    args = ctx.actions.args()\n    args.add(\"--dockerfile\", dockerfile)\n    args.add(\"--output\", output)\n    args.add(\"--base\", base_image)\n    args.add_all(\"--layer\", layers)\n\n    ctx.actions.run(\n        inputs = [dockerfile] + layers,\n        outputs = [output],\n        executable = ctx.executable._builder,\n        arguments = [args],\n        mnemonic = \"DockerBuild\",\n        progress_message = \"Building Docker image %s\" % ctx.label,\n    )\n\n    return [DefaultInfo(files = depset([output]))]\n\ndocker_image = rule(\n    implementation = _docker_image_impl,\n    attrs = {\n        \"dockerfile\": attr.label(\n            allow_single_file = [\".dockerfile\", \"Dockerfile\"],\n            mandatory = True,\n        ),\n        \"base_image\": attr.string(mandatory = True),\n        \"layers\": attr.label_list(allow_files = True),\n        \"_builder\": attr.label(\n            default = \"\u002F\u002Ftools\u002Fdocker:builder\",\n            executable = True,\n            cfg = \"exec\",\n        ),\n    },\n)\n```\n\n### Template 6: Query and Dependency Analysis\n\n```bash\n# Find all dependencies of a target\nbazel query \"deps(\u002F\u002Fapps\u002Fweb:web)\"\n\n# Find reverse dependencies (what depends on this)\nbazel query \"rdeps(\u002F\u002F..., \u002F\u002Flibs\u002Futils:utils)\"\n\n# Find all targets in a package\nbazel query \"\u002F\u002Flibs\u002F...\"\n\n# Find changed targets since commit\nbazel query \"rdeps(\u002F\u002F..., set($(git diff --name-only HEAD~1 | sed 's\u002F.*\u002F\"&\"\u002F' | tr '\\n' ' ')))\"\n\n# Generate dependency graph\nbazel query \"deps(\u002F\u002Fapps\u002Fweb:web)\" --output=graph | dot -Tpng > deps.png\n\n# Find all test targets\nbazel query \"kind('.*_test', \u002F\u002F...)\"\n\n# Find targets with specific tag\nbazel query \"attr(tags, 'integration', \u002F\u002F...)\"\n\n# Compute build graph size\nbazel query \"deps(\u002F\u002F...)\" --output=package | wc -l\n```\n\n### Template 7: Remote Execution Setup\n\n```python\n# platforms\u002FBUILD.bazel\nplatform(\n    name = \"linux_x86_64\",\n    constraint_values = [\n        \"@platforms\u002F\u002Fos:linux\",\n        \"@platforms\u002F\u002Fcpu:x86_64\",\n    ],\n    exec_properties = {\n        \"container-image\": \"docker:\u002F\u002Fgcr.io\u002Fmyproject\u002Fbazel-worker:latest\",\n        \"OSFamily\": \"Linux\",\n    },\n)\n\nplatform(\n    name = \"remote_linux\",\n    parents = [\":linux_x86_64\"],\n    exec_properties = {\n        \"Pool\": \"default\",\n        \"dockerNetwork\": \"standard\",\n    },\n)\n\n# toolchains\u002FBUILD.bazel\ntoolchain(\n    name = \"cc_toolchain_linux\",\n    exec_compatible_with = [\n        \"@platforms\u002F\u002Fos:linux\",\n        \"@platforms\u002F\u002Fcpu:x86_64\",\n    ],\n    target_compatible_with = [\n        \"@platforms\u002F\u002Fos:linux\",\n        \"@platforms\u002F\u002Fcpu:x86_64\",\n    ],\n    toolchain = \"@remotejdk11_linux\u002F\u002F:jdk\",\n    toolchain_type = \"@bazel_tools\u002F\u002Ftools\u002Fjdk:runtime_toolchain_type\",\n)\n```\n\n## Performance Optimization\n\n```bash\n# Profile build\nbazel build \u002F\u002F... --profile=profile.json\nbazel analyze-profile profile.json\n\n# Identify slow actions\nbazel build \u002F\u002F... --execution_log_json_file=exec_log.json\n\n# Memory profiling\nbazel build \u002F\u002F... --memory_profile=memory.json\n\n# Skip analysis cache\nbazel build \u002F\u002F... --notrack_incremental_state\n```\n\n## Best Practices\n\n### Do's\n- **Use fine-grained targets** - Better caching\n- **Pin dependencies** - Reproducible builds\n- **Enable remote caching** - Share build artifacts\n- **Use visibility wisely** - Enforce architecture\n- **Write BUILD files per directory** - Standard convention\n\n### Don'ts\n- **Don't use glob for deps** - Explicit is better\n- **Don't commit bazel-* dirs** - Add to .gitignore\n- **Don't skip WORKSPACE setup** - Foundation of build\n- **Don't ignore build warnings** - Technical debt\n\n## Resources\n\n- [Bazel Documentation](https:\u002F\u002Fbazel.build\u002Fdocs)\n- [Bazel Remote Execution](https:\u002F\u002Fbazel.build\u002Fdocs\u002Fremote-execution)\n- [rules_js](https:\u002F\u002Fgithub.com\u002Faspect-build\u002Frules_js)\n",{"name":5,"risk":27,"source":36,"date_added":42,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fglobal\u002Fbazel-build-optimization","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill bazel-build-optimization",{"tool":55,"command":56},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill bazel-build-optimization",{"tool":58,"command":59},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill bazel-build-optimization","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fbazel-build-optimization\u002FSKILL.md",true,[],[64,88,113,123,136,155],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":75,"publishedAt":37},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[70],{"categoryNo":71,"categoryName":72,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[76,77,78,79,80,81,82,83,84,85,86,87],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":37},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[95,96,97,98,99,100,78,101,102,103,104,28,105,106,107,108,109,110,111,112],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","brew","live","data","google","install","read","across","api",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":37},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[120,121,95,105,106,107,108,99,78,110,122,111,112,28,103,102,101,109,100,98],"trend radar","radar","pulse",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":37},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[130,131,132,133,134,135],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":147,"publishedAt":37},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[142],{"categoryNo":143,"categoryName":144,"taxonomyType":145,"taxonomyTypeDesc":146},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[138,84,148,149,150,87,105,151,152,153,97,154,109],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":37},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[157,162,163,164,109,165,152,166,167,168,169,170],"status","play","go","latest","github","discover","control","cmd","volume"]