[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EXTSM8JC1NFZVJF7R9T7QZ":3,"skill-same:01M6EXTSM8JC1NFZVJF7R9T7QZ":65},{"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":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M6EXTSM8JC1NFZVJF7R9T7QZ","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.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fbazel-build-optimization\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"bazel","Optimization","build","bazel build optimization","performance","remote execution","Enterprise","execution","use","optimize","scale","remote","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.\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,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fbazel-build-optimization",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill bazel-build-optimization",{"tool":51,"command":52},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill bazel-build-optimization",{"tool":54,"command":55},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill bazel-build-optimization","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fbazel-build-optimization\u002FSKILL.md",true,[59],{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"skill-report.json","REFERENCE","参考文档",8783,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fbazel-build-optimization\u002Fskill-report.json",[66,80,90,99,105,112],{"skillNo":67,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":31},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[77,78,79],"model","model hierarchy","model hierarchy skill",{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":86,"publishedAt":31},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[85],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},[87,88,89],"MCP","zoom","zoom mcp",{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":31},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[96,97,98,88],"sdk","zoom apps sdk","apps",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":31},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[101],{"skillNo":106,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":31},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[110],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},[107],{"skillNo":113,"name":114,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":31},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[114]]