Skip to content

feat(quickget): add ARM64 (aarch64) download support#1820

Merged
flexiondotorg merged 11 commits intomasterfrom
get-arm64
Jan 25, 2026
Merged

feat(quickget): add ARM64 (aarch64) download support#1820
flexiondotorg merged 11 commits intomasterfrom
get-arm64

Conversation

@flexiondotorg
Copy link
Member

@flexiondotorg flexiondotorg commented Jan 24, 2026

Summary

Implements ARM64 (aarch64) download support to quickget and several related quickemu runtime improvements.

Changes

  • Add --arch flag and host architecture auto-detection
  • Write arch="aarch64" for ARM64 guest configs
  • Add per-distro arch_*() functions declaring supported architectures
    (Alpine, AlmaLinux, Ubuntu Server, Fedora Server, Debian (netinst))
  • Add --check-all-arch flag for CI to test amd64 and arm64
  • Early validation and clear error messages for unsupported architecture
    combinations; unsupported combinations are SKIPPED (not FAIL)
  • CI workflows updated to test both architectures
  • quickemu improvements: ARM64 guest support, CPU flag management,
    qemu share path fixes, and other small fixes for macOS/CPU handling
  • Update TODO.md to reflect completed Phase 2 and Phase 3 items

Testing

  • Run ./quickget --check <distro> for supported distros on both arches
  • Use ./quickget --check-all-arch in CI to verify amd64 and arm64 paths
  • Manual quickemu VM launches for new ARM64 guests (use arch="aarch64")

Notes

  • Debian ARM64 is netinst-only (no live images available)
  • Rocky Linux deferred: upstream releases function currently broken
  • Arch Linux ARM excluded: handled by a different project (no ISOs)

Fixes #916

- Add HOST_ARCH detection and set ARCH default (arm64 → arm64, others →
amd64)
- Add parse_arch_flag() and support --arch/-arch before or after
operation args
- Inject arch="aarch64" into generated VM configs when ARCH=arm64
- Use QEMU_ARCH in distro helpers (AlmaLinux, Alpine, etc.) to build
correct ISO names/URLs
- Update help text to document --arch and reorder flags display
- Tidy Alpine release parsing (use first match) and simplify Rocky URL
assignment
Note: quickget now defaults ARCH from the host; pass --arch to override
if you
need a different target architecture.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Add FEDORA_ARCH and set to aarch64 when ARCH == arm64
- Use FEDORA_ARCH in jq filter to pick the correct Fedora ISO/sha256
- Add UBUNTU_ARCH and switch Ubuntu daily/releases URL for arm64
- Use UBUNTU_ARCH when parsing SHA256SUMS/MD5SUMS instead of hardcoded
amd64
Fixes incorrect ISO selection on ARM64 hosts and enables arm64
downloads.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Use ARCH as DEBIAN_ARCH when constructing ISO filename and cdimage URL
- Update DEBCURRENT handling to select arch-specific iso-hybrid path
- Add explicit error and exit if arm64 is requested with a non-netinst
edition
  (Debian provides netinst images only for ARM64)

Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Add arch_*() functions declaring supported architectures for several
distros
- Add is_arch_supported() helper; default to amd64 when no arch_* exists
- Validate architecture before generating URLs or running tests
(web_get, zsync_get, test_all)
- Update test_result() to accept and display an optional reason when
skipping
- Prevent false failures by skipping tests for unsupported architectures
IMPACT: quickget now respects requested architectures and reports clear
SKIP reasons for distros that do not support the selected arch.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Add CLI flag --check-all-arch with help text and CHECK_ALL_ARCH var
- Implement loop to run checks for both amd64 and arm64, setting ARCH
per run
- Validate architecture and release/edition before generating URLs; skip
Windows
- Generate and check URLs per-arch, reporting PASS / FAIL / SKIP per
entry
- Update CI workflow to call ./quickget --check-all-arch for distro
matrix tests

Signed-off-by: Martin Wimpress <martin@wimpress.org>
Signed-off-by: Martin Wimpress <martin@wimpress.org>
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 2 files

Confidence score: 3/5

  • There is some risk: arch_fedora() does not filter by edition, so ARM64 could be offered for non-Server editions contrary to the PR’s intended behavior and arch_debian() consistency.
  • This is a user-facing selection issue rather than a crash, but it can lead to incorrect architecture choices, which justifies a moderate caution score.
  • Pay close attention to quickget - align arch_fedora() with edition-specific ARM64 filtering to match the PR description.
Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="quickget">

<violation number="1" location="quickget:1376">
P2: `arch_fedora()` should filter by edition to only allow ARM64 for Server, consistent with the PR description and how `arch_debian()` handles edition-specific architecture support.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

- Remove the OPERATION == "test" guard so is_arch_supported() is
evaluated
  unconditionally
- Apply the unconditional arch check in test_all() for editions loop,
  ubuntu-server, ubuntu desktop (ubuntu*), and the default case
- Skip generating URLs / running further logic when an OS is not
available
  for the requested ARCH
IMPACT: quickget will no longer attempt to generate or test downloads
for
architectures that the distro does not support, preventing incorrect URL
generation and false-positive test attempts.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
@flexiondotorg
Copy link
Member Author

@cubic-dev-ai

@cubic-dev-ai
Copy link
Contributor

cubic-dev-ai bot commented Jan 25, 2026

@cubic-dev-ai

@flexiondotorg I have started the AI code review. It will take a few minutes to complete.

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 2 files

Confidence score: 3/5

  • There is a concrete user-facing risk: early architecture validation fails for edition-dependent distros because EDITION isn't parsed yet, so commands like quickget --arch arm64 debian 12.5 netinst can break.
  • Given the severity (7/10) and high confidence, this introduces some regression risk and makes the merge less safe without adjustment.
  • Pay close attention to quickget - ensure EDITION is parsed before architecture validation for edition-dependent distros.
Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="quickget">

<violation number="1" location="quickget:576">
P1: Early architecture validation fails for edition-dependent distros (Debian, Fedora) because `EDITION` hasn't been parsed yet from command line args. Commands like `quickget --arch arm64 debian 12.5 netinst` will incorrectly fail even though Debian netinst supports ARM64.

The fix should skip early validation for OSes that have an `editions_*` function, deferring to the later edition-aware checks.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

- Skip early architecture check for OSes with editions_<os> to avoid
  rejecting valid edition-specific combinations
- Perform architecture validation after EDITION is known and show a
  descriptive error when the chosen edition isn't available on ARCH
- Preserve test/show behaviour (report SKIP) and keep previous flow for
  OSes without editions_<os>

Signed-off-by: Martin Wimpress <martin@wimpress.org>
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="quickget">

<violation number="1" location="quickget:4074">
P2: Missing test/show operation handling causes inconsistent behavior for OSes with editions. When `--check` or `--url` is used on an OS with editions that doesn't support the target architecture, this will exit with an error instead of outputting a SKIP result like non-edition OSes do.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

- If architecture is unsupported and OPERATION is "test" or "show",
  call test_result with SKIP and exit 0
- Keep existing error and exit 1 for non-test/show operations

Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Add arch_ubuntu() to enumerate supported architectures and gate ARM64
by release
- Validate architecture once RELEASE is known and exit/skip if
unsupported
- Use UBUNTU_ARCH when selecting ISO lines and hashes instead of
hardcoded amd64
- Use cdimage.ubuntu.com releases path for Ubuntu ARM64 desktop ISOs
- Default non-numeric releases (daily, dvd, etc.) to amd64 only

Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Prefer GNU coreutils g* hash commands on macOS when available; fall
back to native shasum/md5 otherwise
- Handle MD5 on macOS using 'md5 -r' and parse its output for comparison
- Warn and skip b2sum verification when GNU b2sum is not installed on
macOS
- Use a selected hash command variable when printing status and
performing checks

Signed-off-by: Martin Wimpress <martin@wimpress.org>
@flexiondotorg flexiondotorg merged commit 1991306 into master Jan 25, 2026
93 of 96 checks passed
@flexiondotorg flexiondotorg deleted the get-arm64 branch January 25, 2026 00:54
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.

feat: quickget should detect or allow specify the host architecture when fetching iso

1 participant