Skip to content

Migrate Linux ARM64 builds from Circle CI to GitHub Actions#808

Merged
laurynas-biveinis merged 1 commit into
masterfrom
gh-arm
Nov 24, 2025
Merged

Migrate Linux ARM64 builds from Circle CI to GitHub Actions#808
laurynas-biveinis merged 1 commit into
masterfrom
gh-arm

Conversation

@laurynas-biveinis
Copy link
Copy Markdown
Collaborator

@laurynas-biveinis laurynas-biveinis commented Nov 22, 2025

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

Co-Authored-By: Claude noreply@anthropic.com

Summary by CodeRabbit

  • Chores
    • Removed legacy CircleCI pipeline and related verification; migrated CI to GitHub Actions and expanded coverage to include Linux ARM64 alongside Intel builds (Debug/Release and sanitizer variants). Adjusted CI dependency/setup and conditional logic accordingly.
  • Documentation
    • Removed the CircleCI badge from the README.

✏️ Tip: You can customize this high-level summary in your review settings.

@laurynas-biveinis laurynas-biveinis self-assigned this Nov 22, 2025
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Nov 22, 2025

Walkthrough

Removed 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

Cohort / File(s) Summary
CircleCI removal
\.circleci/config\.yml
Deleted entire CircleCI pipeline including jobs, global parameters, dependency installs, CMake/build/test steps, sanitizer conditionals, and workflow matrix.
GitHub Actions expansion
\.github/workflows/build\.yml
Renamed matrix entries to include OS/arch labels; added Linux ARM64 (ubuntu-24.04-arm) matrix for GCC 14 and Clang 20 (Release/Debug, ASan/TSan/UBSan, static analysis variants); moved multilib install into a gated x86-only step and adjusted dependency installs.
Documentation and tooling
README\.md, check\.sh
Removed CircleCI badge from README.md; removed CircleCI config verification block from check.sh (no longer runs Checkov against .circleci/config.yml).

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
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Inspect \.github/workflows/build\.yml for parity of variants between Intel and ARM64 and correct matrix labels.
  • Verify multilib and x86-only conditional steps are correct and won't run on ARM.
  • Confirm all references to .circleci/config.yml (badges, checks) were removed and check.sh error handling remains consistent.

Possibly related PRs

Suggested reviewers

  • thompsonbry

Poem

CircleCI departed, lights grown dim,
GitHub Actions rose and filled the rim.
ARM64 joined the testing song,
Builds run wider, checks move on —
CI hums anew; the pipeline sings along. 🎉

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main objective of the pull request: migrating Linux ARM64 builds from CircleCI to GitHub Actions, which is exactly what the changeset accomplishes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch gh-arm

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b8c7ffa and f5f60d7.

📒 Files selected for processing (4)
  • .circleci/config.yml (0 hunks)
  • .github/workflows/build.yml (4 hunks)
  • README.md (0 hunks)
  • check.sh (0 hunks)
💤 Files with no reviewable changes (3)
  • check.sh
  • README.md
  • .circleci/config.yml
⏰ 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 (2)
.github/workflows/build.yml (2)

362-385: Dependency management refactoring is sound.

The separation of x86-specific dependencies into conditional steps (lines 368–371 for libc6-dev-i386; lines 382–385 for g++-14-multilib) correctly isolates architecture-specific packages using !contains(matrix.os, 'arm') guards. This approach is clean and maintainable.


514-528: ARM64 correctly excluded from fuzzing steps.

The DeepState fuzzing conditions (lines 517–520 and 525–528) now exclude ARM64 with !contains(matrix.os, 'arm'), which is appropriate if fuzzing tools or their dependencies are unavailable on ARM64. Verify that DeepState, libfuzzer, and related dependencies are indeed unsupported or untested on ARM64, or consider adding ARM64-compatible fuzzing variants.


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.

@codecov
Copy link
Copy Markdown

codecov Bot commented Nov 22, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.29%. Comparing base (595363f) to head (f5f60d7).
⚠️ Report is 2 commits behind head on master.

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     
Flag Coverage Δ
Debug 98.22% <ø> (-0.13%) ⬇️
Release 97.38% <ø> (-0.12%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown
Contributor

@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

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d61b61f and b8c7ffa.

📒 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.

Comment on lines +270 to +355
- 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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

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: gcc

Apply 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.

Suggested change
- 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.

⚠️ Potential issue | 🟠 Major

🧩 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 -600

Length 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>
@sonarqubecloud
Copy link
Copy Markdown

@laurynas-biveinis laurynas-biveinis merged commit 5eb438e into master Nov 24, 2025
229 of 232 checks passed
@laurynas-biveinis laurynas-biveinis deleted the gh-arm branch November 24, 2025 03:54
@coderabbitai coderabbitai Bot mentioned this pull request Dec 1, 2025
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