Skip to content

docs(ci): database-migration concurrency comment claims an evicted migration leaves the run green, which is false #201

Description

@cristim

Tracking a known-false comment merged with LeanerCloud/cloud-commitments-cli#1816, so it is not forgotten. Comment-only; no behavioural defect.

What is wrong

.github/workflows/database-migration.yml:252-255 currently reads:

#   - GitHub keeps one pending entry per group, so a queued migration can be
#     evicted by a later dispatch. Unlike rollback.yml, the `summary` job
#     below does not exit 1 on a non-success result, so an evicted migration
#     leaves the run green; read the per-cloud results it prints.

The "leaves the run green" clause is false. This is job-level concurrency, so an evicted queued job's result is cancelled, and a workflow run containing a cancelled job reports a run conclusion of cancelled, not success.

Established empirically during the review of LeanerCloud/cloud-commitments-cli#1816, not from intuition: across roughly 700 GitHub Actions runs in five repositories, a cancelled job never once coexisted with a success run conclusion. In 109 runs matching this exact shape (at least one success job, at least one cancelled job, and an if: always() job that still ran), the run conclusion was cancelled 109 times and success zero times.

The rest of the sentence is accurate: summary genuinely is if: always() and never exits non-zero, and eviction of a queued dispatch is real.

Why it matters

The claim is wrong in the conservative direction, which is why it did not block the merge: it teaches an operator to distrust a green run that is actually trustworthy. But it is a stated justification that is false, sitting next to a guard whose correctness a future reader will judge from exactly this paragraph.

Second, smaller issue in the same block

The comment block runs to roughly 40 lines for 9 lines of config and largely duplicates the LeanerCloud/cloud-commitments-cli#1816 PR description. Rationale belongs in the PR, not the source. Worth trimming to what a reader cannot deduce from the code:

  • why the group is keyed on cloud plus environment and deliberately not the *-tfstate-* groups (these jobs take no state lock; the resource protected is the database)
  • why cancel-in-progress: false (cancelling mid-migrate leaves schema_migrations dirty)
  • why the || 'unset' sentinel exists (workflow_call passes environment as an unenforced type: string)

Fix

A corrected and trimmed version is already written and verified (comment-only diff, no group value changed). It was deliberately not pushed to LeanerCloud/cloud-commitments-cli#1816: CodeRabbit's review quota on this repo is roughly one review per hour shared across all open PRs, and at the time the queue held a privilege-escalation boundary fix (LeanerCloud/cloud-commitments-cli#1818) that needed the slot more than a comment edit did.

Good candidate to fold into the #114 fix, which touches this same workflow file, rather than spending a separate review cycle on a comment.

Verification bar

git diff must show comment lines only. Re-enumerate every job and its resolved concurrency group before and after and confirm no group value changed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions