Migrate Linux ARM64 builds from Circle CI to GitHub Actions#808
Conversation
WalkthroughRemoved CircleCI configuration and its checks; expanded GitHub Actions build matrix to add Linux ARM64 targets and adjusted dependency/multilib setup; removed CircleCI badge from README and related check from check.sh. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Dev as Developer (PR)
participant GH as GitHub Actions
participant CI_Intel as Linux (Intel) Matrix
participant CI_ARM as Linux (ARM64) Matrix
participant CircleCI as CircleCI (removed)
Dev->>GH: Push PR / update workflows
GH->>CI_Intel: Run matrix (GCC/Clang, Release/Debug, sanitizers)
GH->>CI_ARM: Run matrix (GCC/Clang on ubuntu-24.04-arm, same variants)
Note right of GH: Multilib step gated to non-ARM + GCC jobs
Dev--xCircleCI: (no trigger)
Note over CircleCI: `.circleci/config.yml` removed — pipeline deleted
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro 📒 Files selected for processing (4)
💤 Files with no reviewable changes (3)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
🔇 Additional comments (2)
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. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #808 +/- ##
==========================================
- Coverage 98.36% 98.29% -0.08%
==========================================
Files 35 35
Lines 6493 6493
==========================================
- Hits 6387 6382 -5
- Misses 106 111 +5
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
d61b61f to
b8c7ffa
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (4)
.circleci/config.yml(0 hunks).github/workflows/build.yml(3 hunks)README.md(0 hunks)check.sh(0 hunks)
💤 Files with no reviewable changes (3)
- .circleci/config.yml
- README.md
- check.sh
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (1)
.github/workflows/build.yml (1)
362-385: Dependency setup refactoring looks solid.The separation of x86-only packages (libc6-dev-i386, g++-14-multilib) from common dependencies is appropriate. The condition
!contains(matrix.os, 'arm')correctly gates these steps away from ARM64 runners.
| - name: GCC 14 Release (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Release | ||
| COMPILER: gcc | ||
|
|
||
| - name: GCC 14 Release with ASan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Release | ||
| COMPILER: gcc | ||
| SANITIZE_ADDRESS: ON | ||
|
|
||
| - name: GCC 14 Release with TSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Release | ||
| COMPILER: gcc | ||
| SANITIZE_THREAD: ON | ||
|
|
||
| - name: GCC 14 Release with UBSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Release | ||
| COMPILER: gcc | ||
| SANITIZE_UB: ON | ||
|
|
||
| - name: GCC 14 Debug (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: gcc | ||
|
|
||
| - name: GCC 14 Debug with ASan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: gcc | ||
| SANITIZE_ADDRESS: ON | ||
|
|
||
| - name: GCC 14 Debug with TSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: gcc | ||
| SANITIZE_THREAD: ON | ||
|
|
||
| - name: GCC 14 Debug with UBSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: gcc | ||
| SANITIZE_UB: ON | ||
|
|
||
| - name: clang 20 Release (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Release | ||
| COMPILER: clang | ||
|
|
||
| - name: clang 20 Release with TSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Release | ||
| COMPILER: clang | ||
| SANITIZE_THREAD: ON | ||
|
|
||
| - name: clang 20 Release with UBSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Release | ||
| COMPILER: clang | ||
| SANITIZE_UB: ON | ||
|
|
||
| - name: clang 20 Debug (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: clang | ||
|
|
||
| - name: clang 20 Debug with ASan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: clang | ||
| SANITIZE_ADDRESS: ON | ||
|
|
||
| - name: clang 20 Debug with TSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: clang | ||
| SANITIZE_THREAD: ON | ||
|
|
||
| - name: clang 20 Debug with UBSan (Linux ARM64) | ||
| os: ubuntu-24.04-arm | ||
| BUILD_TYPE: Debug | ||
| COMPILER: clang | ||
| SANITIZE_UB: ON | ||
|
|
There was a problem hiding this comment.
AVX2 must be disabled for all ARM64 builds—they lack x86 AVX2 support.
The 15 new ARM64 matrix entries inherit the default AVX2: ON (line 16) but do not explicitly set AVX2: OFF. ARM64 processors do not support AVX2 instructions; builds will fail or produce incorrect code.
Add AVX2: OFF to every ARM64 matrix entry:
- - name: GCC 14 Release (Linux ARM64)
+ - name: GCC 14 Release (Linux ARM64)
os: ubuntu-24.04-arm
BUILD_TYPE: Release
+ AVX2: OFF
COMPILER: gccApply this to all 15 ARM64 entries (lines 270–355).
📝 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.
| - name: GCC 14 Release (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| COMPILER: gcc | |
| - name: GCC 14 Release with ASan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| COMPILER: gcc | |
| SANITIZE_ADDRESS: ON | |
| - name: GCC 14 Release with TSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| COMPILER: gcc | |
| SANITIZE_THREAD: ON | |
| - name: GCC 14 Release with UBSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| COMPILER: gcc | |
| SANITIZE_UB: ON | |
| - name: GCC 14 Debug (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: gcc | |
| - name: GCC 14 Debug with ASan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: gcc | |
| SANITIZE_ADDRESS: ON | |
| - name: GCC 14 Debug with TSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: gcc | |
| SANITIZE_THREAD: ON | |
| - name: GCC 14 Debug with UBSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: gcc | |
| SANITIZE_UB: ON | |
| - name: clang 20 Release (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| COMPILER: clang | |
| - name: clang 20 Release with TSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| COMPILER: clang | |
| SANITIZE_THREAD: ON | |
| - name: clang 20 Release with UBSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| COMPILER: clang | |
| SANITIZE_UB: ON | |
| - name: clang 20 Debug (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: clang | |
| - name: clang 20 Debug with ASan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: clang | |
| SANITIZE_ADDRESS: ON | |
| - name: clang 20 Debug with TSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: clang | |
| SANITIZE_THREAD: ON | |
| - name: clang 20 Debug with UBSan (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Debug | |
| COMPILER: clang | |
| SANITIZE_UB: ON | |
| - name: GCC 14 Release (Linux ARM64) | |
| os: ubuntu-24.04-arm | |
| BUILD_TYPE: Release | |
| AVX2: OFF | |
| COMPILER: gcc |
🤖 Prompt for AI Agents
.github/workflows/build.yml lines 270-355: the 15 newly added Linux ARM64 matrix
entries inherit the default AVX2: ON (declared at line 16) which is invalid for
ARM64; update each of these ARM64 job entries to explicitly set AVX2: OFF by
adding the key/value AVX2: OFF to every ARM64 matrix block so they no longer
rely on the x86 default.
🧩 Analysis chain
Incomplete ARM64 coverage compared to Intel matrix.
The ARM64 matrix omits several variants that exist for Intel:
- GCC 14: missing "Debug without AVX2", "Release static analysis & cpplint", and "default CMake configuration" variants
- clang 20: missing "Release with ASan" (present for TSan/UBSan), "Release static analysis", and "Debug static analysis" variants
Either add these missing ARM64 variants or document why they are intentionally excluded.
I need to examine the full workflow file to verify the claim. Let me investigate.
🏁 Script executed:
#!/bin/bash
# Extract the matrix section from build.yml to see both Intel and ARM64 variants
cat .github/workflows/build.yml | grep -n "strategy:" -A 500 | head -600Length of output: 17782
Add missing ARM64 test variants to match Intel coverage.
The ARM64 matrix omits 6 variants that exist for Intel Linux:
GCC 14:
- Debug without AVX2 (line 85 for Intel)
- Release static analysis & cpplint (line 91 for Intel)
- default CMake configuration (line 98 for Intel)
clang 20:
- Release with ASan (line 107 for Intel)
- Release static analysis (line 148 for Intel)
- Debug static analysis (line 154 for Intel)
Either add these to ARM64 or document the architectural constraints preventing them.
🤖 Prompt for AI Agents
.github/workflows/build.yml lines 270-355: the ARM64 job matrix is missing six
test variants present for Intel Linux; add matching entries or document
constraints. Specifically add for GCC 14: Debug without AVX2, Release static
analysis & cpplint, and the default CMake configuration; and for clang 20:
Release with ASan, Release static analysis, and Debug static analysis—either
mirror the Intel job definitions (same keys: name, os: ubuntu-24.04-arm,
BUILD_TYPE, COMPILER, plus SANITIZE_ADDRESS / static-analysis flags and any
cpplint steps) or add a clear comment in the matrix explaining why each variant
cannot run on ARM64 and remove the review complaint.
Remove Circle CI configuration entirely and migrate all Linux ARM64 builds to GitHub Actions. Add 15 new Linux ARM64 build configurations to the GitHub Actions build matrix using ubuntu-24.04-arm runners, covering: - GCC 14 and clang 20 compilers - Debug and Release builds - Various sanitizers (ASan, TSan, UBSan) Also add "(Linux Intel)" and "(Linux ARM64)" labels to all Linux builds for clearer architecture distinction in the build matrix. - Delete .circleci/config.yml and remove Circle CI integration - Add Linux ARM64 configurations to .github/workflows/build.yml - Remove Circle CI badge from README.md - Remove Circle CI validation from check.sh 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
b8c7ffa to
f5f60d7
Compare
|



Remove Circle CI configuration entirely and migrate all Linux ARM64 builds
to GitHub Actions. Add 15 new Linux ARM64 build configurations to the
GitHub Actions build matrix using ubuntu-24.04-arm runners, covering:
Also add "(Linux Intel)" and "(Linux ARM64)" labels to all Linux builds
for clearer architecture distinction in the build matrix.
🤖 Generated with Claude Code
Co-Authored-By: Claude noreply@anthropic.com
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.