Skip to content

Release hygiene: one or more deploy gates are failing #481

Description

@github-actions

main and development have diverged

main is not an ancestor of development: 1 commit(s) on main are
missing from development.

10c4d24 Merge pull request #480 from views-platform/development

Fix with the back-merge, as a merge commit — never a squash, which creates yet another
commit that is not main, so this would reopen:

gh pr create --base development --head main --title "chore: sync main back into development"

Every release promotion leaves one merge commit on main that development has not
seen. Expected immediately after a release; a problem if it persists.
See docs/guides/publishing_to_pypi.md §C.5 and #402.

A deploy gate failed

            "See publishing_to_pypi.md §C.5. Detection also runs daily "
            "via .github/workflows/release-topology.yml."
        )
E       AssertionError: main is not an ancestor of development. Normal right after a release, and healed by the back-merge: gh pr create --base development --head main, merged as a MERGE COMMIT (a squash recreates the divergence). See publishing_to_pypi.md §C.5. Detection also runs daily via .github/workflows/release-topology.yml.
E       assert 1 == 0
E        +  where 1 = CompletedProcess(args=['git', 'merge-base', '--is-ancestor', 'main', 'development'], returncode=1, stdout=b'', stderr=b'').returncode

tests/test_falsification_deploy_v160.py:159: AssertionError
____________ TestDF1MergeTopology.test_main_ancestor_of_development ____________

self = <test_falsification_deploy_v160_r2.TestDF1MergeTopology object at 0x7f181c7de9d0>

    def test_main_ancestor_of_development(self) -> None:
        result = subprocess.run(
            ["git", "merge-base", "--is-ancestor", "main", "development"],
            capture_output=True,
        )
        # 0 = ancestor, 1 = not; other codes mean refs/history missing
        # (CI shallow checkout) — local pre-deploy gate, skip there (C-320).
        if result.returncode not in (0, 1):
            pytest.skip(
                "main/development refs unavailable (shallow CI "
                "checkout) — deploy gate runs locally"
            )
>       assert result.returncode == 0, (
            "main is not an ancestor of development. Expected right "
            "after a release: promotion leaves a merge commit on main "
            "that development has not seen. Fix with the back-merge — "
            "gh pr create --base development --head main — merged as a "
            "MERGE COMMIT, never a squash (a squash creates yet another "
            "commit that is not main). See publishing_to_pypi.md §C.5."
        )
E       AssertionError: main is not an ancestor of development. Expected right after a release: promotion leaves a merge commit on main that development has not seen. Fix with the back-merge — gh pr create --base development --head main — merged as a MERGE COMMIT, never a squash (a squash creates yet another commit that is not main). See publishing_to_pypi.md §C.5.
E       assert 1 == 0
E        +  where 1 = CompletedProcess(args=['git', 'merge-base', '--is-ancestor', 'main', 'development'], returncode=1, stdout=b'', stderr=b'').returncode

tests/test_falsification_deploy_v160_r2.py:50: AssertionError
=========================== short test summary info ============================
SKIPPED [1] tests/test_falsification_deploy_v160.py:275: local-clone hygiene is not answerable on a fresh CI runner — actions/checkout leaves one local branch, so this would pass without inspecting anything. The remote half of this class DOES run in CI.
2 failed, 3 passed, 1 skipped in 1.97s

These gates used to run only where someone typed pytest (C-341). Reproduce locally with:

uv run pytest tests/test_falsification_deploy_v160.py tests/test_falsification_deploy_v160_r2.py

Note the local run checks more than this one: the local-clone branch hygiene gate skips
on CI by design, because a fresh runner has one local branch and would pass without
inspecting anything.

Detected by release-hygiene. This issue is reused rather than duplicated,
and closes itself once every check passes again.

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

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions