{"id":15570774,"url":"https://github.com/keith/rules_multirun","last_synced_at":"2026-01-27T02:05:25.406Z","repository":{"id":50025969,"uuid":"490853044","full_name":"keith/rules_multirun","owner":"keith","description":"Bazel rules for running multiple commands in parallel in a single bazel invocation","archived":false,"fork":false,"pushed_at":"2025-08-26T21:07:35.000Z","size":84,"stargazers_count":109,"open_issues_count":6,"forks_count":23,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-01-10T20:20:35.884Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Starlark","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/keith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-10T20:36:49.000Z","updated_at":"2025-12-19T17:06:34.000Z","dependencies_parsed_at":"2024-02-08T19:27:07.967Z","dependency_job_id":"b9716d30-472f-4d86-8f57-debaa5a4db7b","html_url":"https://github.com/keith/rules_multirun","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/keith/rules_multirun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith%2Frules_multirun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith%2Frules_multirun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith%2Frules_multirun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith%2Frules_multirun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keith","download_url":"https://codeload.github.com/keith/rules_multirun/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith%2Frules_multirun/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28796962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T01:07:07.743Z","status":"online","status_checked_at":"2026-01-27T02:00:07.755Z","response_time":168,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T17:44:14.411Z","updated_at":"2026-01-27T02:05:25.385Z","avatar_url":"https://github.com/keith.png","language":"Starlark","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rules_multirun\n\nThese rules provide a simple interface for running multiple commands in\nparallel with a single `bazel run` invocation. This is especially useful\nfor running multiple linters or formatters with a single command.\n\n## Usage\n\nSetup the tools you want to run:\n\n```bzl\nload(\"@rules_multirun//:defs.bzl\", \"command\", \"multirun\")\nload(\"@rules_python//python:defs.bzl\", \"py_binary\")\n\nsh_binary(\n    name = \"some_linter\",\n    ...\n)\n\npy_binary(\n    name = \"some_other_linter\",\n    ...\n)\n\ncommand(\n    name = \"lint-something\",\n    command = \":some_linter\",\n    arguments = [\"check\"], # Optional arguments passed directly to the tool\n)\n\ncommand(\n    name = \"lint-something-else\",\n    command = \":some_other_linter\",\n    environment = {\"CHECK\": \"true\"}, # Optional environment variables set when invoking the command\n    data = [\"...\"] # Optional runtime data dependencies\n)\n\nmultirun(\n    name = \"lint\",\n    commands = [\n        \"lint-something\",\n        \"lint-something-else\",\n    ],\n    jobs = 0, # Set to 0 to run in parallel, defaults to sequential\n)\n```\n\nRun the `multirun` target with bazel:\n\n```sh\n$ bazel run //:lint\n```\n\nSee [the full API docs](doc) for more info.\n\n## Usage with platform transitions\n\nIn case if the `multirun` rule requires a transition to other configuration than `target` then\na new `multirun`-like rule can be defined as in the following example\n```bzl\nload(\"@rules_multirun//:defs.bzl\", \"multirun_with_transition\")\n\ndef _aws_deploy_platforms_impl(settings, attr):\n    return {\"//command_line_option:platforms\": [\":aws_lambda\"]}\n\naws_deploy_transition = transition(\n    implementation = _aws_deploy_platforms_impl,\n    inputs = [],\n    outputs = [\"//command_line_option:platforms\"],\n)\n\naws_deploy = multirun_with_transition(\n    aws_deploy_transition,\n    \"@bazel_tools//tools/allowlists/function_transition_allowlist\"\n)\n```\nand used in a `BUILD` file\n```bzl\naws_deploy(\n    name = \"staging\",\n    commands = [\n       ...\n    ]\n)\n```\n\n\n## Installation\n\nGo to the [releases\npage](https://github.com/keith/rules_multirun/releases) to grab the\nWORKSPACE snippet for the latest release.\n\n## Acknowledgements\n\nThis is a fork of the [original multirun\nrules](https://github.com/ash2k/bazel-tools). Those rules have a\ndependency on golang to run, which may not be desired, these rules use a\n[python script](internal/multirun.py) instead.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeith%2Frules_multirun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeith%2Frules_multirun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeith%2Frules_multirun/lists"}