Pull Requests ​
Code Owners ​
Pull requests require approval from code owners before merging. There are two types of reviewers:
- Developers - Review code changes for functionality, architecture, and code quality
- E2E Testers - Review changes that affect end-to-end test coverage or test infrastructure
The CODEOWNERS file determines which reviewers are automatically requested based on the files changed.
CI Checks ​
CircleCI runs on every pull request, executing:
- Linting - TypeScript and ESLint checks
- Tests - Unit test suite
These checks must pass before a PR can be merged.
E2E Tests ​
For PRs targeting develop, GitHub Actions runs E2E tests automatically. The workflow:
- Checks if a compatible native build exists (fingerprint check)
- Triggers a new build if native code changed, otherwise uses existing build
- Publishes an OTA update to a branch-specific channel
- Runs E2E tests on a self-hosted runner with Android emulator
- Reports results back to the PR
Skipping E2E Tests ​
E2E tests only run on Jira ticket branches (e.g. APY-1234-description). Non-ticket branches automatically get the builds_disabled label and builds are skipped.
See GitHub Actions for full details.
Merge Strategy ​
We use squash and merge for all pull requests except when merging into main. For releases into main, we use a regular merge commit to preserve the full commit history.
Merge Queue (Aviator) ​
For pull requests targeting the develop branch, we use Aviator to manage the merge queue. Aviator ensures PRs are tested against the latest develop before merging, preventing broken builds.
The Aviator Chrome Extension adds a "Queue pull request" button directly in GitHub. Without the extension, you'll need to manually add the mergequeue label to queue your PR.
For PRs into any other branch (e.g., release branches, feature branches), you need to manually merge using the GitHub merge button:

Click "Show the original GitHub merge button" checkbox, then use "Squash and merge".
Labels ​
Build Labels ​
| Label | Description |
|---|---|
builds_disabled | Auto-added on non-ticket branches; skips E2E tests |
native-changes | Auto-added when PR contains native changes |
Status Labels ​
| Label | Description |
|---|---|
blocked | PR is blocked and cannot proceed |
mergequeue | PR is in the merge queue |
NOT_READY_TO_MERGE | Auto flag for bot PRs when still processing |
no_ticket_found | PR has no linked Jira ticket |
Dependency Labels (bots only) ​
| Label | Description |
|---|---|
dependencies | Pull requests that update a dependency file |
javascript | Pull requests that update Javascript code |
ruby | Pull requests that update Ruby code |
github_actions | Pull requests that update GitHub Actions code |
security | Pull requests that address a security vulnerability |