Remove the armhf binary from the release - #1027
Conversation
The 32-bit Arm binary is the least used artifact in every release, at roughly 0.4% of downloads, and it is the only target that cannot fail anywhere except during a release, because the cross-compile lives in Dockerfile.redist which only the publish workflow builds. A compile error specific to it took out 0.18.12 and forced a retraction. Nothing else in the project ships armhf any more. The faas-cli container images are already limited to linux/amd64 and linux/arm64, and the language templates dropped armhf when they moved to buildx. The gateway does not support it, so an armhf user could only ever run the CLI against a remote cluster. Drop the build stage, the release asset, the Make targets and the integration test branch. The npm installer now reports an unsupported platform for armv6l and armv7l rather than fetching a binary that is no longer published. Anyone who still needs it can pin to 0.18.11 or earlier. Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
The Windows, macOS and Arm binaries are cross-compiled inside Dockerfile.redist, which until now was only built by the publish workflow. A compile error affecting one of those targets and not linux/amd64 was therefore invisible until a tag was pushed, and the first sign of it was a failed release. Build the same target in the build workflow so those errors surface on the commit that introduces them. The image is not loaded or pushed, it is compiled and discarded. Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
AI Pull Request OverviewDisclaimer: This review was generated by automated AI and may contain errors. Do not trust its outputs without human verification. Summary
Approval rating (1-10)9/10. The change is focused, consistent across release paths, and adds useful CI coverage for the remaining redistributable targets. Summary per fileSummary per file
Overall AssessmentThe PR consistently removes the ARMHF CLI release artifact from the redistributable build, extraction, local ignore list, contributor docs, and npm install suffix handling. Adding Detailed ReviewDetailed ReviewNo blocking findings. The release path remains internally consistent: The npm behavior now fails before attempting to download a removed 32-bit Arm artifact. That matches the stated user impact better than leaving installers to fail with a release-asset 404. The build workflow addition targets the The documentation update in AI agent details. |
Motivation
faas-cli-armhfis the least-used artifact we publish, and it is the only build target that cannot fail anywhere except during a release. Both of those came to a head this week: a compile error affecting only the 32-bit Arm target broke the0.18.12publish and the release had to be retracted.Why it doesn't make sense to keep building it
Nobody is downloading it. Asset download counts for the last five releases:
That is ~55 downloads against ~12,600 for
linux/amd64— around 0.4%, and roughly a fifth ofarm64. It is the least-downloaded binary in every single release. These counts include bots and mirrors, so treat them as an upper bound.Nothing else in the project ships armhf. The
faas-clicontainer images are already limited tolinux/amd64,linux/arm64. The language templates dropped armhf when they moved to multi-arch buildx. OpenFaaS itself does not support armhf, so an armhf user could only ever run the CLI against a remote cluster — they could not run a gateway or build a function for that architecture.It is the only target that can fail at release time and nowhere else. The armhf cross-compile lives in
Dockerfile.redist, which only thepublishworkflow builds.build.yamlcoverslinux/amd64and alinux/amd64,linux/arm64multi-arch check, and never touches the redistributable binaries. So a compile error specific to a 32-bit target is undetectable until a tag is pushed. That is exactly what happened with0.18.12:An untyped constant passed to a variadic
interface{}takes its default type ofint, which is 32 bits on armhf.go build,go test, and the wholebuildworkflow all passed.What changes
Dockerfile.redist— drop thearmbuild stage and itsCOPYinto the release stageextract_binaries.sh— stop copyingfaas-cli-armhfout of the imageMakefile— remove theci-armhf-build/ci-armhf-pushtargetsbuild_integration_test.sh— remove the armv6l/armv7l binary selectionnpm/lib.js—armv6l/armv7lnow reportUnsupported platforminstead of fetching a binary that will not exist. This is a clearer failure than a 404 partway through an install..gitignore,CONTRIBUTING.md— housekeepingThe second commit adds
Dockerfile.redistto thebuildworkflow, so the remaining cross-compiled targets — Windows, macOS x86_64, macOS arm64, Linux arm64 — are compiled on every push rather than only at release. The image is built and discarded, not loaded or pushed. This is what would have caught the0.18.12failure in the PR that introduced it.Impact on users
Anyone still on 32-bit Arm can stay on
0.18.11or earlier. Those binaries remain published and downloadable indefinitely; nothing is being deleted from existing releases. They simply will not receive new versions.In practice this is a very small group. 32-bit Arm means ARMv6 hardware — Pi 1, Pi Zero, Pi Zero W — or a 32-bit Pi OS image on a 64-bit board. Raspberry Pi OS has defaulted to 64-bit since 2022, and the Pi Zero 2 W is ARMv8. Anyone on 64-bit Arm continues to use
faas-cli-arm64, which is unaffected.No change for users on amd64, arm64, macOS or Windows.
Testing
Dockerfile.redistbuilds clean and produces exactly the expected set, with no armhf:faas-cli,faas-cli-arm64,faas-cli-darwin,faas-cli-darwin-arm64,faas-cli.exego build ./...,go test ./...andgofmt -lcleannpmsuffix resolution verified:x64→"",aarch64→-arm64,Darwin→-darwin,Windows_NT→.exe, andarmv61/armv71now throwUnsupported platformbuild.yamlvalidated as parseable YAMLRaised as a PR rather than pushed to master so it is visible and open to comment.