{"id":27201144,"url":"https://github.com/gregl83/bazel-paq","last_synced_at":"2026-06-13T14:06:16.742Z","repository":{"id":171495661,"uuid":"648016563","full_name":"gregl83/bazel-paq","owner":"gregl83","description":"🟩△ Bazel aspect for computing output hashes to enable build delta tracking.","archived":false,"fork":false,"pushed_at":"2025-12-30T20:18:24.000Z","size":462,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-04T00:18:43.192Z","etag":null,"topics":["bazel","bazel-hash","bazel-rules","caching","continuous-deployment","monorepo","paq","release-automation"],"latest_commit_sha":null,"homepage":"","language":"Starlark","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gregl83.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-06-01T03:00:16.000Z","updated_at":"2026-02-22T06:46:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"9dcb59c9-5cce-4b42-a6b7-67ab4d9fa120","html_url":"https://github.com/gregl83/bazel-paq","commit_stats":null,"previous_names":["gregl83/bazel-paq"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/gregl83/bazel-paq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregl83%2Fbazel-paq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregl83%2Fbazel-paq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregl83%2Fbazel-paq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregl83%2Fbazel-paq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gregl83","download_url":"https://codeload.github.com/gregl83/bazel-paq/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregl83%2Fbazel-paq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34287058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"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":["bazel","bazel-hash","bazel-rules","caching","continuous-deployment","monorepo","paq","release-automation"],"created_at":"2025-04-09T21:55:14.845Z","updated_at":"2026-06-13T14:06:16.737Z","avatar_url":"https://github.com/gregl83.png","language":"Starlark","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Release](https://img.shields.io/github/v/release/gregl83/bazel-paq)\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/gregl83/bazel-paq/blob/master/LICENSE)\n\n# bazel-paq\n\n[Bazel aspect](https://bazel.build/extending/aspects) for computing target output hashes.\n\nEasily track build deltas by comparing output hashes with deployed artifacts or previous builds.\n\n## Usage\n\n### Workspace Configuration\n\n#### 1. Add Module Dependency\n\nAdd the following to the dependency section the workspace `MODULE.bazel`:\n\n```text\nbazel_dep(name = \"bazel_paq\", version = \"1.4.1\")\n```\n\n#### 2. Add Load Definition\n\nAdd the following to the workspace `defs.bzl`:\n\n```text\nload(\"@bazel_paq//:defs.bzl\", \"paq_aspect\")\n```\n\n### Executing Builds\n\n#### Short Command\n\nAdd the following to the workspace `.bazelrc` configuration file:\n\n```text\nbuild:paq --aspects=@bazel_paq//:defs.bzl%paq_aspect\nbuild:paq --output_groups=+paq_files\n```\n\nExecute build:\n\n```bash\nbazel build --config=paq //...\n```\n\n#### Long Command\n\n```bash\nbazel build //... --aspects=@bazel_paq//:defs.bzl%paq_aspect --output_groups=+paq_files\n```\n\n### Executing Tests\n\n```bash\nbazel test tests:all --test_output=all\n```\n\n## Aspect Output\n\nExecuting `bazel build` with the `bazel-paq` aspect configured will compute unique hashes for every build target output.\n\nOutput hash filenames are `target_output_filename.ext.paq` for files and `.paq` for directories.\n\nFiles are valid JSON and contain a single `blake3` hash in double quotes.\n\n## Hashing Algorithm\n\nThe [paq](https://github.com/gregl83/paq) executable used in `bazel-paq` is powered by the `blake3` hashing algorithm.\n\n#### Output Hash Validation\n\n1. **Install:** Make the [paq](https://github.com/gregl83/paq) executable available on validation system.\n2. **Compute:** Hash a build target output using `paq`.\n3. **Compare:** Open respective `.paq` build output and validate it equals computed hash from Step 2.\n\n## Example Workspace\n\nThe [example](example) directory contains a complete Bazel module workspace demonstrating `bazel-paq` usage.\n\n### Output Structure\n\nTarget output hash files use `.paq` extension.\n\n```text\nbazel-bin\n|-- configuration\n|   |-- config.out.json\n|   `-- config.out.json.paq\n|-- infrastructure\n|   |-- templates.manifest\n|   |-- templates.tar\n|   `-- templates.tar.paq\n|-- python-service\n|   |-- app\n|   |-- app.paq\n|   |-- app.repo_mapping\n|   `-- app.runfiles_manifest\n`-- rust-command\n    |-- command\n    |-- command.paq\n    |-- command.repo_mapping\n    `-- command.runfiles_manifest\n```\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgregl83%2Fbazel-paq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgregl83%2Fbazel-paq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgregl83%2Fbazel-paq/lists"}