diff --git a/.github/actions/run-integration-tests/action.yaml b/.github/actions/run-integration-tests/action.yaml index 78274f6b..78f46f67 100644 --- a/.github/actions/run-integration-tests/action.yaml +++ b/.github/actions/run-integration-tests/action.yaml @@ -20,15 +20,18 @@ runs: - shell: bash -l -eo pipefail {0} run: nextstrain version --verbose + # Skip Docker on macOS and Windows - if: runner.os != 'macOS' && runner.os != 'Windows' shell: bash -l -eo pipefail {0} run: nextstrain setup docker - - if: runner.os != 'Windows' + # Skip Conda on Windows and Linux ARM64 + - if: runner.os != 'Windows' && !(runner.os == 'Linux' && runner.arch == 'ARM64') shell: bash -l -eo pipefail {0} run: nextstrain setup conda - - if: runner.os != 'macOS' && runner.os != 'Windows' + # Skip Singularity on macOS, Windows, and Linux ARM64 + - if: runner.os != 'macOS' && runner.os != 'Windows' && !(runner.os == 'Linux' && runner.arch == 'ARM64') shell: bash -l -eo pipefail {0} run: nextstrain setup singularity @@ -38,6 +41,7 @@ runs: - shell: bash -l -eo pipefail {0} run: nextstrain version --verbose + # Skip Docker on macOS and Windows - if: runner.os != 'macOS' && runner.os != 'Windows' name: Build zika-tutorial with --docker shell: bash -l -eo pipefail {0} @@ -45,20 +49,23 @@ runs: git -C zika-tutorial clean -dfqx nextstrain build --docker --cpus 2 zika-tutorial - - if: runner.os != 'Windows' + # Skip Conda on Windows and Linux ARM64 + - if: runner.os != 'Windows' && !(runner.os == 'Linux' && runner.arch == 'ARM64') name: Build zika-tutorial with --conda shell: bash -l -eo pipefail {0} run: | git -C zika-tutorial clean -dfqx nextstrain build --conda --cpus 2 zika-tutorial - - if: runner.os != 'macOS' && runner.os != 'Windows' + # Skip Singularity on macOS, Windows, and Linux ARM64 + - if: runner.os != 'macOS' && runner.os != 'Windows' && !(runner.os == 'Linux' && runner.arch == 'ARM64') name: Build zika-tutorial with --singularity shell: bash -l -eo pipefail {0} run: | git -C zika-tutorial clean -dfqx nextstrain build --singularity --cpus 2 zika-tutorial + # Skip ambient on Windows - if: fromJSON(inputs.ambient) && runner.os != 'Windows' name: Build zika-tutorial with --ambient shell: bash -l -eo pipefail {0} diff --git a/.github/actions/setup-integration-tests/action.yaml b/.github/actions/setup-integration-tests/action.yaml index cb690b97..b1047ed5 100644 --- a/.github/actions/setup-integration-tests/action.yaml +++ b/.github/actions/setup-integration-tests/action.yaml @@ -25,6 +25,15 @@ inputs: runs: using: composite steps: + # Our aarch64 (linux/arm64) image still contains some x86_64 (amd64) + # executables and so requires the ability of the host to emulate x86_64. + # On macOS, which is the primary reason we have an aarch64 image, this is + # expected to be provided by Rosetta 2. On Linux, we expect it to be QEMU, + # which we set up here. + - if: runner.os == 'Linux' && runner.arch == 'ARM64' + run: docker run --privileged --rm tonistiigi/binfmt --install amd64 + shell: bash -l -eo pipefail {0} + - uses: conda-incubator/setup-miniconda@v3 with: python-version: ${{ inputs.python-version }} @@ -72,14 +81,14 @@ runs: python3 --version | grep -F 'Python ${{ inputs.python-version }}.' [[ "$(python --version)" == "$(python3 --version)" ]] - # Install Singularity on Linux. + # Install Singularity on Linux x86_64. # # We don't install it with Conda because Conda Forge provides a non-suid # build of Singularity. We're compatible with Singularity's non-suid mode, # but production usages of Singularity are likely to use its suid mode, so # I'd rather test against that. # -trs, 6 Jan 2023 - - if: runner.os == 'Linux' + - if: runner.os == 'Linux' && runner.arch == 'X64' shell: bash -l -eo pipefail {0} env: GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 53f99648..0f7831fa 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -106,6 +106,10 @@ jobs: target: x86_64-unknown-linux-gnu exe: nextstrain + - os: ubuntu-22.04-arm + target: aarch64-unknown-linux-gnu + exe: nextstrain + - os: macos-15-intel target: x86_64-apple-darwin exe: nextstrain @@ -307,15 +311,17 @@ jobs: # fresh CI machines are not readily available, however, since # pre-installation is convenient for builds. include: - - { os: ubuntu-22.04, target: x86_64-unknown-linux-gnu } - - { os: ubuntu-24.04, target: x86_64-unknown-linux-gnu } - - { os: macos-15-intel, target: x86_64-apple-darwin } - - { os: macos-14, target: x86_64-apple-darwin } - - { os: macos-15, target: x86_64-apple-darwin } - - { os: macos-14, target: aarch64-apple-darwin } - - { os: macos-15, target: aarch64-apple-darwin } - - { os: windows-2022, target: x86_64-pc-windows-msvc } - - { os: windows-2025, target: x86_64-pc-windows-msvc } + - { os: ubuntu-22.04, target: x86_64-unknown-linux-gnu } + - { os: ubuntu-24.04, target: x86_64-unknown-linux-gnu } + - { os: ubuntu-22.04-arm, target: aarch64-unknown-linux-gnu } + - { os: ubuntu-24.04-arm, target: aarch64-unknown-linux-gnu } + - { os: macos-15-intel, target: x86_64-apple-darwin } + - { os: macos-14, target: x86_64-apple-darwin } + - { os: macos-15, target: x86_64-apple-darwin } + - { os: macos-14, target: aarch64-apple-darwin } + - { os: macos-15, target: aarch64-apple-darwin } + - { os: windows-2022, target: x86_64-pc-windows-msvc } + - { os: windows-2025, target: x86_64-pc-windows-msvc } runs-on: ${{matrix.os}} defaults: @@ -391,6 +397,10 @@ jobs: with: name: standalone-x86_64-unknown-linux-gnu + - uses: actions/download-artifact@v7 + with: + name: standalone-aarch64-unknown-linux-gnu + - uses: actions/download-artifact@v7 with: name: standalone-x86_64-apple-darwin diff --git a/CHANGES.md b/CHANGES.md index 34f1b2e9..a31867ca 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,6 +13,14 @@ development source code and as such may not be routinely kept up to date. # __NEXT__ +## Improvements + +* We now produce standalone installation archives for Linux running on aarch64 + hardware (aka arm64). The standalone installer will use these archives + starting with this release. + ([#489](https://github.com/nextstrain/cli/pull/489), + [#490](https://github.com/nextstrain/cli/pull/490)) + ## Bug fixes * Updated the s3fs dependency to avoid versions starting with 2025.12.0. This diff --git a/devel/pyoxidizer b/devel/pyoxidizer index 4b4feac1..fcc1d397 100755 --- a/devel/pyoxidizer +++ b/devel/pyoxidizer @@ -27,7 +27,7 @@ main() { --volume "$build/cache/pyoxidizer:/tmp/.cache/pyoxidizer" \ --volume "$build/cache/pip:/tmp/.cache/pip" \ --volume "$build/cache/cargo:/tmp/.cargo" \ - quay.io/pypa/manylinux2014_x86_64 "$pyoxidizer" "$@" + quay.io/pypa/manylinux2014_"$(platform-machine)" "$pyoxidizer" "$@" else exec "$pyoxidizer" "$@" fi diff --git a/doc/changes.md b/doc/changes.md index 41404be3..e6c5a476 100644 --- a/doc/changes.md +++ b/doc/changes.md @@ -16,6 +16,15 @@ development source code and as such may not be routinely kept up to date. (v-next)= ## __NEXT__ +(v-next-improvements)= +### Improvements + +* We now produce standalone installation archives for Linux running on aarch64 + hardware (aka arm64). The standalone installer will use these archives + starting with this release. + ([#489](https://github.com/nextstrain/cli/pull/489), + [#490](https://github.com/nextstrain/cli/pull/490)) + (v-next-bug-fixes)= ### Bug fixes