Skip to main content

On This Page

Implementing 32-bit CI Pipelines in 64-bit GitHub Actions Environments

2 min read
Share

These articles are AI-generated summaries. Please check the original sources for full details.

Automatic cross-platform testing: part 7: 32 bit, again

David Cantrell has developed a workflow to restore 32-bit testing capabilities after GitHub Actions transitioned to 64-bit only infrastructure for core components. The system utilizes the GitHub API to fetch artifacts on 32-bit OS images where standard actions are no longer compatible.

Why This Matters

While cloud providers prioritize 64-bit modernization, many technical environments still rely on 32-bit addressing for compatibility and memory efficiency. The technical reality is that ‘64-bit only’ environments break critical validation paths for software like Perl, which must be tested specifically against 32-bit integer constraints that do not exist on 64-bit hardware. This forced migration requires engineers to build custom API-driven retrieval mechanisms to maintain platform inclusivity without relying on obsolete or insecure action versions.

Key Insights

  • GitHub’s native actions for repository checkout and artifact retrieval are now strictly 64-bit only (Cantrell, 2026).
  • Perl integers on 32-bit platforms can be compiled as either 32-bit or 64-bit, whereas they are always 64-bit on 64-bit machines.
  • Automated artifact retrieval can be replicated by querying the GitHub API for the most recent unexpired artifact using curl and jq.
  • Building Perl from source (e.g., version 5.42.0) is necessary to ensure the compiler toolchain uses 32-bit integers by omitting the -Duse64bitint flag.

Working Examples

A shell command to programmatically fetch the latest non-expired build artifact via the GitHub API.

curl -L -H "X-GitHub-Api-Version: 2022-11-28" -H "Authorization: Bearer ${GH_TOKEN}" -o dist-for-install.zip $(curl -L -s -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${GH_TOKEN}" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/${GH_REPOSITORY}/actions/artifacts -o - | jq -r '[.artifacts.[]|select(.expired == false)] | max_by(.created_at).archive_download_url')

Building a 32-bit compatible Perl environment from source to avoid default 64-bit integer packaging.

curl -o perl-5.42.0-src.tar.gz https://cpan.metacpan.org/authors/id/B/BO/BOOK/perl-5.42.0.tar.gz && tar xzf perl-5.42.0-src.tar.gz && cd perl-5.42.0 && sh Configure -de -Dprefix=$HOME/perl-5.42.0-installed && make -j $(nproc) && make install

Practical Applications

  • Use case: Validating Perl modules on 32-bit Linux and Unix-like OS images (NetBSD, OpenBSD) to catch overflow errors. Pitfall: Relying on system-provided Perl packages which often default to 64-bit integers even on 32-bit OSs.
  • Use case: Maintaining CI/CD for legacy x86 architectures using modern GitHub runners. Pitfall: Using outdated 32-bit action versions which may eventually fail due to API deprecation or security policy updates.

References:

Continue reading

Next article

Custom Software Engineering: QllmSoft's Approach to High-Performance Applications

Related Content