Skip to content

[MBL-19484][All] Migrate release pipeline from Bitrise to GitHub Actions#3554

Open
hermannakos wants to merge 1 commit intomasterfrom
MBL-19484-release-pipeline
Open

[MBL-19484][All] Migrate release pipeline from Bitrise to GitHub Actions#3554
hermannakos wants to merge 1 commit intomasterfrom
MBL-19484-release-pipeline

Conversation

@hermannakos
Copy link
Collaborator

Summary

Migrates the full release lifecycle from Bitrise to GitHub Actions for all 3 apps (Student, Teacher, Parent). Adds 9 workflow files:

Reusable release pipeline (reusable-release-pipeline.yml):

  • Build QA debug APKs → unit tests (parallel) + Flank matrix tests (portrait, landscape, tablet, e2e) → build release candidate → Slack notification
  • Conditional e2e-offline job for Student only
  • build-release-candidate gates on all tests passing (handles skipped jobs correctly)

Per-app thin wrappers (trigger on PR → release/{app}):

  • release-student.yml, release-teacher.yml, release-parent.yml

Tag creation (create-tag.yml):

  • Triggered on push to release/* branches (i.e., PR merge)
  • Extracts version from build.gradle, creates git tag + draft GitHub Release
  • Updates JIRA fix versions (guarded — skips if JIRA secrets not configured)
  • Idempotent — skips if tag already exists

Release notes (release-notes.yml):

  • Manual workflow_dispatch trigger, generates notes from git log and posts to Slack
  • Extracts only the "Release Notes:" section from script output (strips debug preamble)

Play Store deploy (deploy-student.yml, deploy-teacher.yml, deploy-parent.yml):

  • Triggered on tag push (student-*, teacher-*, parent-*)
  • Builds prod release AAB and uploads to Google Play internal track
  • Concurrency groups serialize deploys per app (queue, not cancel)

Key design decisions

  • Uses gradle/actions/setup-gradle@v4 (handles JDK 17 + Gradle caching automatically)
  • Flank tests use 4-entry matrix with fail-fast: false
  • Unit tests run in parallel with build (no unnecessary dependency)
  • All sensitive files cleaned up in if: always() blocks
  • Reuses existing Bitrise secret names (ANDROID_KEYSTORE_PASSWORD, ANDROID_KEYSTORE_ALIAS, ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD, SLACK_URL, etc.)

New secrets required

  • GPLAY_SERVICE_ACCOUNT_KEY — Google Play service account JSON
  • JIRA_USERNAME / JIRA_API_TOKEN — JIRA API credentials (optional, workflow skips JIRA step if not set)

No changes needed

  • pr-pipeline.yml already excludes release/* branches (lines 7-9)

Test plan:

  1. YAML-lint all 9 workflow files (validated locally with pyyaml)
  2. Push branch and create test PR targeting release/student → verify pipeline triggers
  3. Verify matrix Flank tests all run in parallel with correct flank configs
  4. Verify build-release-candidate gates correctly (including skipped e2e-offline)
  5. Merge test PR → verify create-tag.yml fires, creates tag + draft GitHub Release
  6. Verify tag push triggers deploy-student.yml
  7. Run release-notes.yml manually via workflow_dispatch
  8. Repeat for teacher and parent

refs: MBL-19484
affects: Student, Teacher, Parent
release note: none

Migrate the full release lifecycle from Bitrise to GitHub Actions for
Student, Teacher, and Parent apps. Adds 9 workflow files covering:
release pipeline (build/test/RC/Slack), tag creation, release notes,
and Play Store deployment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
Copy link

📊 Code Coverage Report

✅ Student

  • PR Coverage: 42.98%
  • Master Coverage: 42.98%
  • Delta: +0.00%

✅ Teacher

  • PR Coverage: 25.35%
  • Master Coverage: 25.35%
  • Delta: +0.00%

✅ Pandautils

  • PR Coverage: 23.68%
  • Master Coverage: 23.68%
  • Delta: +0.00%

📈 Overall Average

  • PR Coverage: 30.67%
  • Master Coverage: 30.67%
  • Delta: +0.00%

@github-actions
Copy link

Parent Install Page

@github-actions
Copy link

🧪 Unit Test Results

✅ 📱 Parent App

  • Tests: 309 total, 0 failed, 0 skipped
  • Duration: 32.709s
  • Success Rate: 100%

✅ 📱 Student App

  • Tests: 1251 total, 0 failed, 0 skipped
  • Duration: 0.000s
  • Success Rate: 100%

✅ 📱 Teacher App

  • Tests: 373 total, 0 failed, 0 skipped
  • Duration: 32.613s
  • Success Rate: 100%

✅ 🌅 Horizon

  • Tests: 623 total, 0 failed, 0 skipped
  • Duration: 35.325s
  • Success Rate: 100%

✅ 📦 Submodules

  • Tests: 3135 total, 0 failed, 0 skipped
  • Duration: 51.738s
  • Success Rate: 100%

📊 Summary

  • Total Tests: 5691
  • Failed: 0
  • Skipped: 0
  • Status: ✅ All tests passed!

Last updated: Wed, 25 Feb 2026 13:53:30 GMT

@github-actions
Copy link

Student Install Page

@github-actions
Copy link

Teacher Install Page

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