{"id":25916236,"url":"https://github.com/cpg314/cargo-harbormaster","last_synced_at":"2026-02-12T14:02:56.592Z","repository":{"id":279695547,"uuid":"695865143","full_name":"cpg314/cargo-harbormaster","owner":"cpg314","description":"Export diagnostics from cargo check, cargo clippy and cargo nextest into the JSON message format expected by Phabricator's Harbormaster.","archived":false,"fork":false,"pushed_at":"2025-02-26T22:04:39.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-25T03:41:41.083Z","etag":null,"topics":["cargo","cargo-subcommand","harbormaster","phabricator","rust"],"latest_commit_sha":null,"homepage":"https://c.pgdm.ch/code","language":"Rust","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/cpg314.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-MIT","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}},"created_at":"2023-09-24T13:21:34.000Z","updated_at":"2025-02-26T22:04:44.000Z","dependencies_parsed_at":"2025-02-26T23:29:50.849Z","dependency_job_id":null,"html_url":"https://github.com/cpg314/cargo-harbormaster","commit_stats":null,"previous_names":["cpg314/cargo-harbormaster"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/cpg314/cargo-harbormaster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpg314%2Fcargo-harbormaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpg314%2Fcargo-harbormaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpg314%2Fcargo-harbormaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpg314%2Fcargo-harbormaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cpg314","download_url":"https://codeload.github.com/cpg314/cargo-harbormaster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpg314%2Fcargo-harbormaster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29367841,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cargo","cargo-subcommand","harbormaster","phabricator","rust"],"created_at":"2025-03-03T12:19:55.569Z","updated_at":"2026-02-12T14:02:56.566Z","avatar_url":"https://github.com/cpg314.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cargo-harbormaster\n\nExport diagnostics from `cargo check`, `cargo clippy` and [`cargo nextest`](https://nexte.st/) into the JSON message format expected by [Phabricator's Harbormaster](https://secure.phabricator.com/book/phabricator/article/harbormaster/).\n\nThis allows reporting errors and test results directly in Phabricator differentials.\n\nSee the [Harbormaster API documentation](https://secure.phabricator.com/conduit/method/harbormaster.sendmessage/). Note that the message generated by `cargo-harbormaster` uses the parameters format used by `arc` (see the example below; the parameters and API tokens are encoded in a single JSON message).\n\nFor `cargo nextest`, we rely on a regular expression to parse the output, as machine-readable output is [not supported yet](https://nexte.st/book/machine-readable.html#running-tests).\n\n## Usage\n\n```console\n$ cargo clippy --message-format=json \u003e clippy.json\n$ cargo nextest 2 \u003e nextest.log\n\n$ export PHAB_TOKEN=...\n$ params=$(cargo-harbormaster {PHID-...} --status pass --clippy-json clippy.json --nextest-stderr nextest.log)\n\n$ curl -X POST https://{...}/api/harbormaster.sendmessage -d params=\"$params\n```\n\n## Command line arguments\n\n```\nUsage: cargo-harbormaster [OPTIONS] --token \u003cTOKEN\u003e --status \u003cSTATUS\u003e \u003cBUILD_PHID\u003e\n\nArguments:\n  \u003cBUILD_PHID\u003e  Build PHID (PHID-...)\n\nOptions:\n      --workspace \u003cWORKSPACE\u003e\n          Path to the rust workspace relative to the repository root\n      --token \u003cTOKEN\u003e\n          Phabricator API token [env: PHAB_TOKEN=]\n      --status \u003cSTATUS\u003e\n          Build status [possible values: abort, fail, pass, pause, restart, resume, work]\n      --clippy-json \u003cCLIPPY_JSON\u003e\n          Path to 'cargo clippy --message-format=json' output\n      --check-json \u003cCHECK_JSON\u003e\n          Path to 'cargo check --message-format=json' output\n      --nextest-stderr \u003cNEXTEST_STDERR\u003e\n          Path to 'cargo nextest' stderr output\n  -h, --help\n          Print help\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpg314%2Fcargo-harbormaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcpg314%2Fcargo-harbormaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpg314%2Fcargo-harbormaster/lists"}