Skip to content

Add runtime architecture testing for x86_64 and ARM#4428

Draft
vcjana wants to merge 23 commits intomainfrom
crc-fast
Draft

Add runtime architecture testing for x86_64 and ARM#4428
vcjana wants to merge 23 commits intomainfrom
crc-fast

Conversation

@vcjana
Copy link
Copy Markdown
Contributor

@vcjana vcjana commented Dec 1, 2025

Summary

Adds multi-architecture testing to smithy-rs CI to catch architecture-specific issues like crc-fast 1.4 SIGILL on ARM before merge.

Changes

  • Added test-runtime-architectures job to CI workflow
  • Tests runtime crates on 4 architectures:
    • x86_64-unknown-linux-gnu
    • x86_64-unknown-linux-musl
    • aarch64-unknown-linux-gnu (ARM)
    • aarch64-unknown-linux-musl (ARM)
  • Uses cross for cross-compilation and testing
  • Runs on every PR

Why its needed?

The crc-fast 1.4 SIGILL bug was only caught after release because smithy-rs only tested on x86_64. This change would have caught it before merge by testing on ARM.

Testing

  • Code compiles
  • YAML syntax is valid
  • CI passes on all architectures

@vcjana vcjana force-pushed the crc-fast branch 2 times, most recently from bcc2ced to 24b01eb Compare December 1, 2025 23:06
@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@vcjana vcjana marked this pull request as ready for review December 3, 2025 22:24
@vcjana vcjana requested review from a team as code owners December 3, 2025 22:24
@github-actions

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor

@landonxjames landonxjames left a comment

Choose a reason for hiding this comment

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

This generally looks good. Couple of questions in the comments.

The last thing that I would like to see is a test run with the new workflow with crc-fast pinned to the problematic version (1.4 I think?) that fails. It would be nice to have some proof that these new tests would have caught the issue we saw that caused us to pin the dependency in the first place.

Comment thread aws/rust-runtime/aws-types/src/sdk_config.rs
Comment thread .github/workflows/ci.yml Outdated
@github-actions

This comment was marked as resolved.

@vcjana vcjana mentioned this pull request Dec 9, 2025
@vcjana
Copy link
Copy Markdown
Contributor Author

vcjana commented Dec 9, 2025

Created test PR #4446 with crc-fast pinned to 1.4. Once CI runs, it should demonstrate the ARM tests failing with SIGILL, proving these architecture tests would have caught the issue before merge.

As suggested in review, aws-smithy-http-client should be tested across
architectures since its dependencies (rustls, aws-lc) have arch-specific
implementations.
@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@vcjana vcjana marked this pull request as draft January 27, 2026 18:25
@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

@github-actions
Copy link
Copy Markdown

A new generated diff is ready to view.

A new doc preview is ready to view.

vcjana added a commit that referenced this pull request Apr 15, 2026
Expand the smithy-rs canary to deploy and run ARM64 (aarch64) Lambda
functions in addition to x86_64, catching architecture-specific runtime
bugs like the crc-fast 1.4 SIGILL incident before merge.

Changes:
- Add --architecture flag to canary runner (run.rs), wire through to
  Lambda creation with .architectures() and arch-aware runtime selection
  (provided.al2 for x86_64, provided.al2023 for aarch64)
- Add architecture-suffixed Lambda function names to prevent collisions
  when both canaries run in parallel
- Accept architecture as 5th arg in run-canary script
- Skip cross-compilation tool when building natively on ARM
- Reduce hash truncation in bundle names (24->16 chars) to leave
  headroom for architecture suffix within Lambda 64-char name limit
- Add canary-arm CI job that runs directly on ubuntu-24.04-arm without
  Docker (the existing Docker build image is x86_64-only in ECR)
- Existing x86_64 canary is unchanged

Supersedes #4428. Addresses #4380.
vcjana added a commit that referenced this pull request Apr 17, 2026
Expand the smithy-rs canary to deploy and run ARM64 (aarch64) Lambda
functions in addition to x86_64, catching architecture-specific runtime
bugs like the crc-fast 1.4 SIGILL incident before merge.

Changes:
- Add --architecture flag to canary runner (run.rs), wire through to
  Lambda creation with .architectures() and arch-aware runtime selection
  (provided.al2 for x86_64, provided.al2023 for aarch64)
- Add architecture-suffixed Lambda function names to prevent collisions
  when both canaries run in parallel
- Accept architecture as 5th arg in run-canary script
- Skip cross-compilation tool when building natively on ARM
- Reduce hash truncation in bundle names (24->16 chars) to leave
  headroom for architecture suffix within Lambda 64-char name limit
- Add canary-arm CI job that runs directly on ubuntu-24.04-arm without
  Docker (the existing Docker build image is x86_64-only in ECR)
- Existing x86_64 canary is unchanged

Supersedes #4428. Addresses #4380.
vcjana added a commit that referenced this pull request Apr 20, 2026
## Motivation

Addresses #4380. Supersedes #4428.

The smithy-rs canary only deploys x86_64 Lambda functions. This meant
the [crc-fast 1.4 SIGILL
incident](#4264) was not
caught by smithy-rs CI it was discovered later in the aws-sdk-rust
canary, after release.

This PR expands the canary to also deploy **ARM64 (aarch64) Lambda
functions** on AWS Graviton, catching architecture-specific runtime bugs
before merge.

## Approach

The existing x86_64 canary runs inside a Docker container via the
`docker-build` action. The Docker image is x86_64-only in ECR, so
instead of fixing Docker for ARM, this PR adds a **separate `canary-arm`
job** that runs directly on `ubuntu-24.04-arm` without Docker.

The ARM runner compiles the canary natively, deploys an ARM64 Lambda on
Graviton, and exercises real S3/checksum code paths — the same paths
where crc-fast SIGILL would manifest.

## Changes

**Canary runner (`run.rs`):**
- Add `--architecture` CLI flag to `RunArgs`/`Options`
- Wire architecture through to `build_bundle()` (replaces hardcoded
x86_64)
- Set `.architectures(lambda_arch)` on Lambda creation (ARM64 → `Arm64`)
- Use `provided.al2023` runtime for ARM64 (al2 is deprecated)
- Architecture-suffixed Lambda function names to prevent parallel
collisions

**Build bundle (`build_bundle.rs`):**
- Skip `cross` tool when building natively on ARM
(`std::env::consts::ARCH` check)
- Reduce hash truncation from 24→16 chars to leave headroom for arch
suffix in 64-char Lambda name limit

**Run script (`run-canary`):**
- Accept optional 5th argument for architecture (defaults to `x86_64`)
- Pass `--architecture` to canary runner

**CI workflows (`ci.yml`, `manual-canary.yml`):**
- Add new `canary-arm` job on `ubuntu-24.04-arm` (no Docker)
- Existing x86_64 canary is completely unchanged

## Testing

- Canary runner: `cargo check` ✓, `cargo clippy` ✓, `cargo test` 11/11 ✓
- YAML validation: both workflow files pass syntax check
- Full CI verification pending (this PR)

## What is NOT changed

- Existing x86_64 canary behavior (zero risk)
- Docker infrastructure (`Dockerfile`, `acquire-build-image`,
`docker-build` action)
- Any runtime crates, codegen, or Smithy models
- `arch.rs` (already supports `Aarch64`)
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.

2 participants