Skip to content

Remove formplayer branch infrastructure#1529

Merged
dannyroberts merged 11 commits intomasterfrom
dmr/eliminate-formplayer-branch
Mar 20, 2026
Merged

Remove formplayer branch infrastructure#1529
dannyroberts merged 11 commits intomasterfrom
dmr/eliminate-formplayer-branch

Conversation

@dannyroberts
Copy link
Member

@dannyroberts dannyroberts commented Mar 19, 2026

https://dimagi.atlassian.net/browse/SAAS-19426

Product Description

No user-facing changes. This is infrastructure cleanup removing references to the now-deleted formplayer branch.

Technical Summary

The formplayer branch has been deleted and cross-repo CI (PR #1525) now tests both downstream repos automatically. This PR removes the remaining formplayer branch infrastructure:

  • Delete duplicate_pr workflow and duplicate_pr.py script (no longer needed since PRs no longer need to be cherry-picked between branches)
  • Remove formplayer from branch triggers, env vars, and conditional step in build.yml
  • Remove formplayer target-branch block from dependabot.yml
  • Remove "Duplicate PR" section from PR template
  • Rewrite contributing.md to describe the new single-branch workflow with cross-repo CI

The trigger-downstream job in build.yml is intentionally left unchanged.

Safety Assurance

Safety story

All changes are to CI configuration and documentation files. No application code is modified. The formplayer branch no longer exists, so removing references to it cannot break anything.

Automated test coverage

The CI build job verifies that build.yml changes are syntactically correct and the build still passes.

QA Plan

  • CI passes on this PR
  • No remaining references to the formplayer branch in CI config

Special deploy instructions

  • This PR can be deployed after merge with no further considerations.

Rollback instructions

  • This PR can be reverted after deploy with no further considerations.

Review

  • The set of people pinged as reviewers is appropriate for the level of risk of the change.

@coderabbitai
Copy link

coderabbitai bot commented Mar 19, 2026

Walkthrough

This change consolidates the commcare-core workflow from a dual-branch (formplayer/master) model with duplicate PR automation to a single-branch (master-only) approach. CI automatically runs cross-repo integration tests against commcare-android and formplayer. The change removes branch-specific triggers, environment variables, duplicate PR workflow and script, and updates documentation to reflect the new process.

Changes

Cohort / File(s) Summary
CI/Workflow Configuration Cleanup
.github/workflows/build.yml, .github/workflows/duplicate_pr.yml, .github/dependabot.yml, .github/PULL_REQUEST_TEMPLATE.md
Removes formplayer branch triggers, Formplayer-specific environment variables, conditional build steps, and duplicate PR automation. Eliminates redundant Dependabot configuration for formplayer. Removes "Duplicate PR" instruction section from PR template.
Automation Script Removal
scripts/duplicate_pr.py
Deletes the entire branch duplication script that previously cherry-picked commits across formplayer and master branches and created duplicate PRs.
Process Documentation Updates
.github/contributing.md
Rewrites PR workflow section header and guidance. Consolidates to single master branch targeting with cross-repo CI automation. Removes branch duplication instructions and replaces extensive local testing guidance with short "Running tests locally" section.
Planning & Design Documentation
docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md, docs/superpowers/specs/2026-03-19-formplayer-branch-elimination-design.md
Adds comprehensive plan and design specification documents outlining the phased removal of formplayer branch references across multiple repositories (commcare-core, formplayer, commcare-hq, commcare-android, staging-branches) with task checklists and sequencing requirements.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 The formplayer branch hops away,
All PRs now dance on master's way,
Cross-repo CI runs smooth and bright,
Duplicate automation takes flight!
One branch to rule, one path so light! 🌟

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main objective of the PR, which is to remove formplayer branch infrastructure across CI configuration, templates, and documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dmr/eliminate-formplayer-branch
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md (2)

13-13: Fix heading level hierarchy.

The document jumps from h1 (# Formplayer Branch...) directly to h3 (### Task 1), skipping h2. Markdown best practices require incrementing heading levels by one at a time.

📋 Suggested fix for heading structure

Change all task headings from ### to ##:

-### Task 1: Update formplayer submodule to track master
+## Task 1: Update formplayer submodule to track master

Apply the same change to Tasks 2-10.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md` at line
13, The document uses h3 headings for tasks which breaks the heading hierarchy
after the top-level title; update "### Task 1: Update formplayer submodule to
track master" and all other task headings (Tasks 2-10) to h2 (i.e., change each
leading "###" to "##") so headings increment one level at a time and the
structure is consistent.

32-38: Add language identifiers to code fences.

Several fenced code blocks (lines 32-38, 36-38, and 339) lack language identifiers, which reduces syntax highlighting and readability. These blocks contain plain text output and could use text or diff as appropriate.

🎨 Suggested additions

For the blocks showing what to change:

-```
+```text
 branch = formplayer

```diff
-```
+```text
 branch = master

And for line 339:

```diff
-```
+```text
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md around
lines 32 - 38, Multiple fenced code blocks around the change from "branch =
formplayer" to "branch = master" (notably the blocks at 32-38, 36-38, and the
block at 339) lack language identifiers; update each opening triple-backtick to
include an appropriate language (use "text" for plain output and "diff" if
showing a change) so the blocks around the "branch = formplayer" / "branch =
master" examples and the block at line 339 get syntax highlighting.


</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🤖 Prompt for all review comments with AI agents</summary>

Verify each finding against the current code and only fix it if needed.

Inline comments:
In @docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md:

  • Line 230: The documentation references the trigger-downstream job as being
    at "lines 40-122" in build.yml which is incorrect; update the plan text to
    either the actual range "lines 31-112" or remove the hard-coded line numbers to
    avoid drift. Locate the mention of the trigger-downstream job in this doc
    (search for "trigger-downstream" and the quoted line range) and replace the
    erroneous range with the corrected range or a note like "unchanged in build.yml"
    to keep the trigger-downstream reference accurate and robust.

In @docs/superpowers/specs/2026-03-19-formplayer-branch-elimination-design.md:

  • Line 38: The spec's bullet that reads ".github/dependabot.yml — remove
    the second gradle config block targeting the formplayer branch (lines 10-17)"
    references non-existent line numbers; update that sentence to accurately
    describe the change by either (A) removing the "(lines 10-17)" fragment and
    stating "remove the duplicate Gradle config block targeting the formplayer
    branch" or (B) replace the line range with the correct current line numbers/byte
    offsets as observed in the actual .github/dependabot.yml file; ensure the
    edited text still clearly identifies the target as the second/duplicate Gradle
    config block for the formplayer branch.

Nitpick comments:
In @docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md:

  • Line 13: The document uses h3 headings for tasks which breaks the heading
    hierarchy after the top-level title; update "### Task 1: Update formplayer
    submodule to track master" and all other task headings (Tasks 2-10) to h2 (i.e.,
    change each leading "###" to "##") so headings increment one level at a time and
    the structure is consistent.
  • Around line 32-38: Multiple fenced code blocks around the change from "branch
    = formplayer" to "branch = master" (notably the blocks at 32-38, 36-38, and the
    block at 339) lack language identifiers; update each opening triple-backtick to
    include an appropriate language (use "text" for plain output and "diff" if
    showing a change) so the blocks around the "branch = formplayer" / "branch =
    master" examples and the block at line 339 get syntax highlighting.

</details>

<details>
<summary>🪄 Autofix (Beta)</summary>

Fix all unresolved CodeRabbit comments on this PR:

- [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended)
- [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes

</details>

---

<details>
<summary>ℹ️ Review info</summary>

<details>
<summary>⚙️ Run configuration</summary>

**Configuration used**: Repository UI

**Review profile**: CHILL

**Plan**: Pro

**Run ID**: `edde0573-f8ba-4be5-98c7-b372185b4b20`

</details>

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3b9c3eaace9e7dc9166ff32bffb2f30d1505d392 and 9a1e8de847140c31892c2bb9b9443826440a1737.

</details>

<details>
<summary>📒 Files selected for processing (8)</summary>

* `.github/PULL_REQUEST_TEMPLATE.md`
* `.github/contributing.md`
* `.github/dependabot.yml`
* `.github/workflows/build.yml`
* `.github/workflows/duplicate_pr.yml`
* `docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md`
* `docs/superpowers/specs/2026-03-19-formplayer-branch-elimination-design.md`
* `scripts/duplicate_pr.py`

</details>

<details>
<summary>💤 Files with no reviewable changes (5)</summary>

* .github/PULL_REQUEST_TEMPLATE.md
* .github/workflows/build.yml
* .github/dependabot.yml
* .github/workflows/duplicate_pr.yml
* scripts/duplicate_pr.py

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

run: gradle build
```

The `trigger-downstream` job (lines 40-122) should be **unchanged**.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Minor line number discrepancy for trigger-downstream job.

The plan states the trigger-downstream job is at "lines 40-122" in build.yml, but the context shows it's actually at lines 31-112. This is a minor documentation inconsistency that could cause confusion when verifying the changes.

📝 Suggested correction
-The `trigger-downstream` job (lines 40-122) should be **unchanged**.
+The `trigger-downstream` job (lines 31-112) should be **unchanged**.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
The `trigger-downstream` job (lines 40-122) should be **unchanged**.
The `trigger-downstream` job (lines 31-112) should be **unchanged**.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/superpowers/plans/2026-03-19-formplayer-branch-elimination.md` at line
230, The documentation references the `trigger-downstream` job as being at
"lines 40-122" in build.yml which is incorrect; update the plan text to either
the actual range "lines 31-112" or remove the hard-coded line numbers to avoid
drift. Locate the mention of the `trigger-downstream` job in this doc (search
for "trigger-downstream" and the quoted line range) and replace the erroneous
range with the corrected range or a note like "unchanged in build.yml" to keep
the `trigger-downstream` reference accurate and robust.

- Remove `FORMPLAYER_GRADLE_VERSION` and `FORMPLAYER_JAVA_VERSION` env vars (lines 19-20)
- Remove the "Set environment for Formplayer" conditional step (lines 23-27)

- **`.github/dependabot.yml`** — remove the second gradle config block targeting the `formplayer` branch (lines 10-17)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check current state of dependabot.yml
cat .github/dependabot.yml
echo "---"
echo "Line count: $(wc -l < .github/dependabot.yml)"

Repository: dimagi/commcare-core

Length of output: 219


Correct the dependabot.yml line number reference in the design spec.

The spec references removing "lines 10-17" from .github/dependabot.yml, but the file currently contains only 8 lines with a single gradle config block. Lines 10-17 do not exist. Either the line numbers are incorrect, or the spec must clarify what state of the file it assumes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/superpowers/specs/2026-03-19-formplayer-branch-elimination-design.md` at
line 38, The spec's bullet that reads "**`.github/dependabot.yml`** — remove the
second gradle config block targeting the `formplayer` branch (lines 10-17)"
references non-existent line numbers; update that sentence to accurately
describe the change by either (A) removing the "(lines 10-17)" fragment and
stating "remove the duplicate Gradle config block targeting the formplayer
branch" or (B) replace the line range with the correct current line numbers/byte
offsets as observed in the actual `.github/dependabot.yml` file; ensure the
edited text still clearly identifies the target as the second/duplicate Gradle
config block for the formplayer branch.

dannyroberts and others added 10 commits March 19, 2026 16:06
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Documents the two-phase approach to remove formplayer branch
infrastructure from commcare-core and update formplayer's submodule
to track master.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Clarifies that the cross-repo CI dispatch job is unaffected by
formplayer branch removal since it gates on PR events, not branches.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add phases for formplayer README, staging-branches config,
commcare-hq docs, and closing the legacy Android test PR.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
10 tasks across 4 repos: formplayer submodule/README, commcare-core
workflow/config/docs cleanup, staging-branches config, commcare-hq
docs, and closing the legacy Android test PR.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The duplicate_pr workflow automated cherry-picking PRs between the
master and formplayer branches. With the formplayer branch eliminated
and cross-repo CI in place, this is no longer needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove formplayer from branch triggers, remove formplayer-specific
Gradle/Java version env vars and the conditional step that applied them.
The trigger-downstream job is unchanged.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the dual-branch PR duplication process with a description of the
new single-branch workflow backed by cross-repo CI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@dannyroberts dannyroberts force-pushed the dmr/eliminate-formplayer-branch branch from de05245 to 8284c26 Compare March 19, 2026 21:06
@dannyroberts dannyroberts marked this pull request as ready for review March 19, 2026 21:44
These docs served their purpose during implementation and remain in
the commit history, but don't need to persist in the codebase.
@dannyroberts dannyroberts merged commit df4e1ef into master Mar 20, 2026
6 of 7 checks passed
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.

2 participants