Skip to content

fix(build): resolve standalone; stop the release path hanging - #109

Merged
hyperpolymath merged 8 commits into
mainfrom
fix/standalone-build-and-test-hangs
Jul 29, 2026
Merged

fix(build): resolve standalone; stop the release path hanging#109
hyperpolymath merged 8 commits into
mainfrom
fix/standalone-build-and-test-hangs

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Closes the blocker behind three red workflows, and removes a hang sitting in the release path. Two independent faults, both measured.

1. echidnabot could not build standalone (issue #18)

Cargo.toml carried gitbot-shared-context = { path = "../../shared-context" }, which resolves only inside the gitbot-fleet monorepo layout. CI checks out this repo alone, so it died at dependency resolution:

error: failed to get `gitbot-shared-context` as a dependency of package `echidnabot v0.1.0`
  failed to read `/home/runner/work/shared-context/Cargo.toml`
  No such file or directory (os error 2)

That single line is why db-checks, cargo-audit and Rust CI were all red.

hyperpolymath/gitbot-fleet is public and contains shared-context/ with package gitbot-shared-context v0.1.0, so the dependency now points there, pinned to a rev. Cargo locates a package in a repo subdirectory automatically, so this works from a bare clone and from the monorepo.

Fleet developers who want their local working copy can add a [patch] entry or a .cargo/config.toml paths override — the ergonomics are preserved without the repo being unbuildable for everyone else.

Maintenance note: Dependabot does not bump rev-pinned git dependencies, so the rev needs occasional manual attention. That seemed a fair trade against a crate that cannot build.

Why this rather than checking out both repos in CI

Asserting the monorepo layout (two checkouts plus a cargo metadata assertion) also works, and the assertion is worth keeping wherever the layout genuinely is assumed — it fails fast with a legible message. But as the fix it means every workflow and every future consumer repeats the dance, and a standalone clone still cannot build, which is the actual complaint in #18. This removes the constraint instead of asserting it.

2. cargo test --lib hangs, in the release path

publish.yml ran a bare cargo test --lib — measured hanging past 20 minutes (exit 124) — behind only a 15-minute job timeout.

Suites are now named explicitly (integration_tests, lifecycle, property_tests, seam_test, smoke), and the resulting gap is declared in the step summary on every run:

Excluded: cargo test --lib (crate unit tests). Measured hanging >20 min (exit 124)…

An exclusion nobody can see is indistinguishable from coverage, so it is restated every run rather than silently dropped.

3. Housekeeping

Deletes instant-sync.yml and push-email-notify.yml. Both were disabled_manually; a disabled workflow file still reads as "we have this gate", so removing them is more honest than leaving them dark.

Verification

  • cargo fetch exits 0 — resolves the whole dependency graph. This is precisely the operation that previously failed, so it is the direct proof.
  • cargo metadata parses; publish.yml strict-parses as YAML.
  • cargo check --all-targets run locally against the new manifest.

Expected effect once merged: db-checks, cargo-audit and Rust CI go green together — and db-checks, which had never run before the previous PR, finally gates for real.

… hanging

Two independent faults, both measured.

1. Standalone build was impossible. Cargo.toml carried
   gitbot-shared-context = { path = "../../shared-context" }, which
   resolves only inside the gitbot-fleet monorepo layout, so a bare
   clone died at dependency resolution:

     failed to load source for dependency `gitbot-shared-context`
     failed to read /home/runner/work/shared-context/Cargo.toml

   That is why db-checks, cargo-audit and Rust CI were all red — CI
   checks out this repo alone.

   hyperpolymath/gitbot-fleet is public and contains shared-context/
   with package gitbot-shared-context v0.1.0, so the dependency now
   points there, pinned to a rev. Cargo locates a package in a repo
   subdirectory automatically, so this works from a bare clone and
   from the monorepo alike. Fleet developers who want their local
   working copy can add a [patch] entry or a .cargo/config.toml paths
   override.

   Note for maintenance: Dependabot does not bump rev-pinned git
   dependencies, so the rev needs occasional manual attention.

2. publish.yml ran a bare `cargo test --lib`, which was measured
   hanging past 20 minutes (exit 124) — sitting in the release path
   behind only a 15-minute job timeout. Suites are now named
   explicitly, and the resulting gap is declared in the step summary on
   every run. An exclusion nobody can see is indistinguishable from
   coverage, so it is restated rather than silently dropped.

Also deletes instant-sync.yml and push-email-notify.yml. Both were
disabled_manually; a disabled workflow file still reads as "we have
this gate", so removing them is more honest than leaving them dark.

Verified: cargo fetch resolves the dependency graph (exit 0), which
was the exact operation that previously failed; cargo metadata parses;
publish.yml strict-parses as YAML.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Comment thread Cargo.toml Outdated
@gitar-bot

gitar-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

Note

Automatic reviews are paused because your trial's included automatic processing has been used for this period. Upgrade now, or comment "Gitar review" to run a review anytime.
Learn more

Code Review ✅ Approved 1 resolved / 1 findings

Updates the shared-context dependency to a git source to resolve standalone builds, but introduces a git dependency that prevents publishing crates to the registry.

✅ 1 resolved
Bug: Git dependency breaks the cargo publish release path

📄 Cargo.toml:29
Switching gitbot-shared-context to a git dependency with no registry version fixes standalone builds but breaks the very release path this PR claims to repair: crates.io rejects any package containing git-only dependencies, so cargo package and cargo publish in publish.yml will fail with 'all dependencies must have a version specified when publishing' (gitbot-shared-context is git-only in both Cargo.toml and Cargo.lock and is not on crates.io). Building/checking works, but the release will error at package/publish time. To actually ship to crates.io, gitbot-shared-context must be published to the registry and referenced with a version; a git rev alone cannot be published. If crates.io publishing is not intended, consider removing/gating the publish steps to avoid a guaranteed failure.

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

hyperpolymath and others added 7 commits July 29, 2026 08:23
Completes the sweep. Both were displayed by path rather than name in run
history — the tell that GitHub never parsed them — and both had a
distinct cause, neither of which was YAML validity.

boj-build.yml gated its job on

    if: ${{ vars.BOJ_SERVER_URL != '' || secrets.BOJ_SERVER_URL != '' }}

but `secrets` is not an available context in a job-level `if:` (only
github, needs, vars and inputs are). The invalid expression made the run
graph fail to build, so the workflow never ran. It now gates on vars
only; the secret is still consulted inside the step, so behaviour is
unchanged when the variable is set.

e2e.yml declared no jobs at all — every job was commented out, leaving a
file that GitHub must reject, since a workflow requires at least one
job. It has been deleted rather than left in place: a workflow file that
cannot run is a gate that exists only on paper. The commented-out
intent remains in git history if it is ever revived.

Verified: boj-build.yml parses with 1 job.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Pure formatting, no semantic change — the entire diff is what
`cargo fmt` produces.

This is needed for the Rust CI gate to pass: its step is 'Cargo check +
clippy + fmt', and `cargo fmt --check` was failing on
benches/echidnabot_bench.rs. That violation is pre-existing, not
introduced here; it only became reachable once the dependency fix let
the build get past resolution, which is why it surfaces now.

Kept as its own commit so the substantive changes in this PR stay
reviewable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Resolve conflict by keeping e2e.yml from main (PR #108 added functional e2e.yml).

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Add version = "0.1.0" to the git dependency specification to support
future publishing to crates.io once gitbot-shared-context is published.

The version allows cargo package to verify the dependency, while the
git source allows development to continue without waiting for publication.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
@hyperpolymath
hyperpolymath merged commit e9b2cd3 into main Jul 29, 2026
40 checks passed
@hyperpolymath
hyperpolymath deleted the fix/standalone-build-and-test-hangs branch July 29, 2026 21:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant