Repository navigation
start-proxy selects an AMD64 binary on Linux ARM64 #4173
Description
Activity
Hi @debanjanbasu,
Thanks for reporting this. I can confirm that this isn't supported yet, but this isn't only a limitation in
start-proxy's download logic. There are currently noarm64binaries being built for the proxy, and none are bundled with CodeQL releases, so just changingstart-proxywon't resolve this. We will look into getting this resolved.Reacted by Debanjan BasuTo follow-up on this, we have made all the necessary changes to allow
start-proxyto work onlinux-arm64. Because of how the binaries are distributed, this will require the next CodeQL CLI release and associated CodeQL Action release to take place before these changes will be available. Both are currently expected for next week.Thanks @mbg — great to see #4181 merged. One additional detail for GitHub Enterprise Cloud with data residency (GHE.com) that may stop
linux-arm64working there even after the next CLI/Action release:What happens on GHE.com today (observed 2026-10-06 with
codeql-action@v4.38.2, CLI 2.27.1, x64 runner, default setup with a private registry):Setup proxy for registries: ##[warning]Failed to retrieve information about the linked release: Not Found - https://github.com/proxy/docs.github.com/rest/releases/releases#get-a-release-by-tag-name Did not find 'update-job-proxy-linux64.tar.gz' in the linked release, falling back to hard-coded version. Initialize CodeQL: Looked for CodeQL bundle codeql-bundle-linux64.tar.zst in github/codeql-action on https://<tenant>.ghe.com but got error HttpError: Not Found …getReleaseByVersion()callsgetApiClient().rest.repos.getReleaseByTag({owner: "github", repo: "codeql-action", …})against the tenant API.github/codeql-actiondoes not exist on a GHE.com tenant, so this always 404s there.getDownloadUrl()then usesgetFallbackUrl(), which onmain(after Supportlinux-arm64assets instart-proxy#4181) still points atUPDATEJOB_PROXY_URL_PREFIX = …/releases/download/codeql-bundle-v2.22.0/. That release has noupdate-job-proxy-linux-arm64.tar.gz, so on GHE.com an ARM64 runner would still be handed a missing (or AMD64) asset regardless of the new release.- The CLI bundle path behaves differently: after the same tenant 404,
initcontinues and obtains the bundle from github.com. The proxy path has no equivalent github.com lookup — only the hard-coded fallback.
Possible fixes (either would do):
- When the tenant lookup 404s on GHE.com/GHES, look up the linked release on github.com (as the bundle download effectively does), or
- Move the hard-coded fallback to a bundle release that ships
update-job-proxy-linux-arm64.tar.gzonce one exists (and keep it current).
Happy to re-test on GHE.com with ARM64 runners as soon as the release is out.
Problem
The CodeQL CLI now has native Linux ARM64 support in beta, but the managed private-registry proxy still selects and downloads an AMD64 executable on Linux ARM64. This prevents the proxy from running natively even when CodeQL analysis itself can run.
This report concerns the proxy artifact and architecture selection, not generic CodeQL CLI ARM64 support, registry credentials, custom CA certificates, or outbound network access.
Source and public release evidence
Source inspected on September 25, 2026:
fa8392b7e54a5d74a53270a4aa7defa307aa415c.getProxyPackage()selects byprocess.platformonly. Every Linux host receivesupdate-job-proxy-linux64.tar.gz;process.archis not checked.getDownloadUrl()looks for that filename in the CodeQL bundle release, then falls back to the hard-coded v2.22.0 release.codeql-bundle-linux-arm64CLI bundle, but the proxy assets are onlylinux64,osx64, andwin64.e_machine=62(EM_X86_64), not183(EM_AARCH64). Downloaded archive hashes match the digests returned by the GitHub Releases API.e_machine=6277197411d8fe7c6d157f694e2e4edd6b94bf7d9d10c667864cd6a113c31f97b2e_machine=62caed6d4ad41849570f6c62f784f20f9414a82738b120f464d7fcad1640f7900bPublic-only reproduction
This inspects public artifacts without executing them, extracting them to disk, accessing a private registry, or requiring credentials. It can run on any host with curl and Python 3; the affected execution platform is native Linux ARM64 without x86 emulation.
Actual output:
Native-run observation and impact
A September 21, 2026 managed CodeQL run on native Linux ARM64, Ubuntu 26.04.1, with CLI 2.27.0 uploaded analyses successfully, but its local registry-proxy connection tests failed with
ECONNREFUSED; proxy cleanup reportedESRCH. This earlier runtime observation is separate from the fresh public-artifact inspection above; no new managed scan was triggered for this report.Successful analysis upload therefore did not establish successful private-dependency resolution. The architecture mismatch can be verified independently of that runner OS version and of any particular private registry. An x64 runner remains the workaround for this proxy path.
Expected behavior
Select a native Linux ARM64 proxy artifact when
process.arch === "arm64", including an architecture-compatible fallback. Until such an artifact is available, fail early with an explicit unsupported-architecture diagnostic rather than attempting to start the AMD64 executable. Tests should cover Linuxx64andarm64selection and fallback behavior.Could the maintainers confirm whether private-registry proxy support is intended to be part of Linux ARM64 CodeQL support, or whether this remains an unsupported combination that should be documented explicitly?
Related, but distinct
#3530 and #3531 address proxy startup retries and false-success/readiness reporting. They may explain why a dead proxy is not surfaced clearly, but they do not add an ARM64 proxy artifact or change architecture selection. This report tracks that architecture gap separately.