Skip to content

Conversation

@tankerkiller125
Copy link
Contributor

@tankerkiller125 tankerkiller125 commented Sep 9, 2025

What type of PR is this?

  • builds

What this PR does / why we need it:

This PR drops 32 bit builds entirely (docker, binary, etc.) for all CPU architectures (ARM, x86, etc.)

Context

For some context as to why we would do this, there's quite a bit of background.

CPUs Manufacturers

  • Intel - Dropping 32 bit CPUs (industrial use only currently) and they've proposed dropping the 32 bit API entirely from their future CPUs
  • ARM - ARM itself dropped 32 bit around 4 years ago
  • Qualcomm - Dropped it around 3 years ago
  • AMD - Hasn't made a 32 bit CPU in 20 years

OSes

  • Windows - dropped 32 bit in Windows 11 (and Windows 10 didn't truly support it properly)
  • Linux - There has been talks about dropping active development of 32 bit for the kernel in the next few years
    • Ubuntu - Dropped 32 bit some time ago
    • Fedora - Dropped 32 bit in version 44
    • Debian - Version 13 is set to drop 32 bit entirely
    • Arch - Dropped 32 bit nearly a decade ago
    • openSuse - Dropped 32 bit quite some time ago
    • Gentoo - Dropped 32 bit in main branches
  • Mac - We don't build 32 bit mac to begin with, and the last 32bit Mac was probably 2 decades ago or something.

Applications

  • Most browsers either never had 32 bit support, or have already dropped it
  • Firefox is dropping 32 bit in 2026

Our Own Things

We've regularly encountered some issues with building for 32 bit architectures, especially just builds taking a very long time to complete, resulting in slower than planned release build times. We also don't test on any 32 bit architectures, so any bugs caused by 32 bit we don't know about, and we really don't have a way to test short of spinning up a 32 bit VM (with who knows what OS)

Additionally, of those with HBOX_OPTIONS_ALLOW_ANALYTICS=true there is maybe one user of a 32bit architecture system. (As a reminder, our analytics are always open to view https://homebox.software/en/analytics/ )

Some Final Thoughts on Our End

32 bit doesn't really take extra effort on a day to day for us, Golang cross-compiles to 32 bit pretty well and Javascript just doesn't care. However, it does eat up time during releases (time we could be using to help people upgrade, or work on bug fixes), and it does eat up time during PR tests and builds.

We also have zero way to validate and test against 32 bit CPUs, Github doesn't have 32 bit Action Runners, and emulating inside Github Actions is a royal PITA (and very slow). Which means that there could be some major bugs in 32 bit builds we've never seen, and never will see in our regular development efforts.

Dropping 32 bit seems like a good way forward to speed up release times a bit, and prevent bug reports for things we'll never be able to replicate. You will of course always be able to download the sources of Homebox and build it for 32 bit if you so choosed.

Summary by CodeRabbit

  • Chores
    • Updated Docker publish workflows (including hardened and rootless) to build images only for linux/amd64 and linux/arm64, removing linux/arm/v7 from supported platforms.
    • Streamlined release configuration by dropping 32-bit (386) and ARMv7 binaries, simplifying tags and archive naming for remaining targets.
    • No functional changes to application behavior; changes affect build and release outputs and supported platforms only.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 9, 2025

Walkthrough

The workflows remove linux/arm/v7 from Docker publish matrices across hardened, rootless, and standard pipelines. The GoReleaser config drops 386 and arm builds, removes related ignore rules and dynamic tags, and simplifies archive naming. No application code changes; only CI/release configuration adjustments.

Changes

Cohort / File(s) Summary
GitHub Actions: Docker publish matrices
.github/workflows/docker-publish.yaml, .github/workflows/docker-publish-rootless.yaml, .github/workflows/docker-publish-hardened.yaml
Removed linux/arm/v7 from build matrices; resulting platforms are linux/amd64 and linux/arm64. Control flow excludes armv7 from all matrix-driven steps.
Release build configuration
backend/.goreleaser.yaml
Dropped 386 and arm from goarch; removed corresponding ignore combinations; simplified dynamic tag rules (removed arm/386 branches); simplified archive naming by removing i386 branch logic.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Dev as Maintainer
  participant GH as GitHub Actions
  participant MX as Matrix (platforms)
  participant BJ as Build Job(s)
  participant REG as Docker Registry

  Dev->>GH: Push tag / workflow dispatch
  GH->>MX: Generate platform matrix
  Note over MX: Platforms: linux/amd64, linux/arm64<br/>[linux/arm/v7 removed]
  MX-->>BJ: Spawn jobs per platform
  rect rgb(235, 245, 255)
    BJ->>REG: Build & push images per platform
  end
  GH-->>Dev: Report digests/artifacts
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested labels

⬆️ enhancement

Security recommendations

  • Verify that removing armv7, 386, and arm does not leave orphaned images or tags; ensure CI prevents publishing stale manifests.
  • Confirm multi-arch manifests exclude removed platforms to avoid broken pulls on those architectures.
  • Validate provenance/signing steps (if any) still pass with the reduced matrix.
  • Update documentation to reflect supported architectures to prevent user confusion and potential supply-chain spoofing by third parties filling the gap.

Poem

Two arches sail, one bows out to sea,
v7, 386—retired gracefully.
Matrices slim, the pipelines run light,
tags align clean in the late‑build night.
GoReleaser hums a simpler refrain—
fewer wheels turning, still steady the train. 🚢✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description Check ⚠️ Warning The description omits the required “Which issue(s) this PR fixes:” section and uses an invalid PR type of “builds” instead of one of the template’s allowed types, so it does not fully adhere to the repository’s PR description template. Please update the description to use one of the allowed PR types (bug, cleanup, documentation, feature) and add the required “Which issue(s) this PR fixes:” section, then remove or fill any other template sections as appropriate to fully comply with the template.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed The pull request title “Remove 32bit builds” concisely and accurately summarizes the main change of dropping all 32-bit build targets across workflows and releases, making the primary change clear to any reviewer.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch mk/kill-32-bit

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 825e72b and c70005a.

📒 Files selected for processing (4)
  • .github/workflows/docker-publish-hardened.yaml (0 hunks)
  • .github/workflows/docker-publish-rootless.yaml (0 hunks)
  • .github/workflows/docker-publish.yaml (0 hunks)
  • backend/.goreleaser.yaml (0 hunks)
💤 Files with no reviewable changes (4)
  • .github/workflows/docker-publish-hardened.yaml
  • backend/.goreleaser.yaml
  • .github/workflows/docker-publish-rootless.yaml
  • .github/workflows/docker-publish.yaml
⏰ 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). (8)
  • GitHub Check: End-to-End Playwright Tests / E2E Playwright Testing 2/4
  • GitHub Check: End-to-End Playwright Tests / E2E Playwright Testing 4/4
  • GitHub Check: End-to-End Playwright Tests / E2E Playwright Testing 1/4
  • GitHub Check: End-to-End Playwright Tests / E2E Playwright Testing 3/4
  • GitHub Check: Backend Server Tests / Go
  • GitHub Check: build (linux/arm64)
  • GitHub Check: build (linux/arm64)
  • GitHub Check: build (linux/arm64)

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.

@cloudflare-workers-and-pages
Copy link

Deploying homebox-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: c70005a
Status: ✅  Deploy successful!
Preview URL: https://3fab7600.homebox-docs.pages.dev
Branch Preview URL: https://mk-kill-32-bit.homebox-docs.pages.dev

View logs

@tankerkiller125
Copy link
Contributor Author

@coderabbitai review full

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 25, 2025

@tankerkiller125, I'll conduct a full review of this PR that removes 32-bit builds across all architectures.

Based on the comprehensive context you've provided, this appears to be a well-reasoned decision given the industry-wide trend away from 32-bit architectures. The rationale covers CPU manufacturers, operating systems, and practical considerations like build times and testing capabilities.

For security considerations: Dropping 32-bit support actually improves the security posture by:

  • Reducing the attack surface by eliminating less-tested build targets
  • Focusing security efforts on actively maintained and tested 64-bit platforms
  • Aligning with modern security practices where 32-bit systems often lack modern security features

I'll review all the changes to ensure the 32-bit removal is comprehensive and doesn't introduce any issues.

✅ Actions performed

Full review triggered.

@coderabbitai coderabbitai bot added the ⬆️ enhancement New feature or request label Sep 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⬆️ enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants