This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow performs tests in Rust. | ||
name: Library Rust tests | ||
on: | ||
workflow_call: | ||
inputs: | ||
dafny: | ||
description: "The Dafny version to run" | ||
required: true | ||
type: string | ||
regenerate-code: | ||
description: "Regenerate code using smithy-dafny" | ||
required: false | ||
default: false | ||
type: boolean | ||
mpl-head: | ||
description: "Running on MPL HEAD" | ||
required: false | ||
default: false | ||
type: boolean | ||
jobs: | ||
testRust: | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
library: [DynamoDbEncryption, TestVectors] | ||
# removed windows-latest because somehow it can't build aws-lc in CI | ||
os: [ubuntu-latest, macos-13] | ||
runs-on: ${{ matrix.os }} | ||
permissions: | ||
id-token: write | ||
contents: read | ||
env: | ||
RUST_MIN_STACK: 404857600 | ||
steps: | ||
- name: Support longpaths on Git checkout | ||
run: | | ||
git config --global core.longpaths true | ||
- uses: actions/checkout@v3 | ||
- name: Init Submodules | ||
shell: bash | ||
run: | | ||
git submodule update --init --recursive submodules/smithy-dafny | ||
git submodule update --init --recursive submodules/MaterialProviders | ||
- name: Configure AWS Credentials | ||
uses: aws-actions/configure-aws-credentials@v4 | ||
with: | ||
aws-region: us-west-2 | ||
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-DDBEC-Dafny-Role-us-west-2 | ||
role-session-name: DDBEC-Dafny-Rust-Tests | ||
- name: Setup Rust Toolchain for GitHub CI | ||
uses: actions-rust-lang/[email protected] | ||
with: | ||
components: rustfmt | ||
# uncomment this after Rust formatter works | ||
# - name: Rustfmt Check | ||
# uses: actions-rust-lang/rustfmt@v1 | ||
# Use setup-dafny-actions with correct version when Dafny releases 4.8.2 | ||
- name: Setup Dafny | ||
uses: https://github.com/dafny-lang/setup-dafny-action/commit/03b219c5a4f71cfe24cb9e02b69d4a622449adbb | ||
with: | ||
build-from-source: d07403b6d6606257e1b5aada4d0156901f4a17de | ||
- name: Update MPL submodule if using MPL HEAD | ||
if: ${{ inputs.mpl-head == true }} | ||
working-directory: submodules/MaterialProviders | ||
run: | | ||
git checkout main | ||
git pull | ||
git submodule update --init --recursive | ||
git rev-parse HEAD | ||
# Remove this after the formatting in Rust starts working | ||
- name: smithy-dafny Rust hacks | ||
shell: bash | ||
run: | | ||
if [ "$RUNNER_OS" == "macOS" ]; then | ||
sed -i '' 's|rustfmt --edition 2021 runtimes/rust/src/implementation_from_dafny.rs|#&|' submodules/smithy-dafny/SmithyDafnyMakefile.mk | ||
else | ||
sed -i 's|rustfmt --edition 2021 runtimes/rust/src/implementation_from_dafny.rs|#&|' submodules/smithy-dafny/SmithyDafnyMakefile.mk | ||
fi | ||
- name: Setup Java 17 for codegen | ||
uses: actions/setup-java@v3 | ||
with: | ||
distribution: "corretto" | ||
java-version: "17" | ||
- name: Setup NASM for Windows (aws-lc-sys) | ||
if: matrix.os == 'windows-latest' | ||
uses: ilammy/setup-nasm@v1 | ||
- name: Install Smithy-Dafny codegen dependencies | ||
uses: ./.github/actions/install_smithy_dafny_codegen_dependencies | ||
- name: Run make polymorph_rust | ||
shell: bash | ||
working-directory: ./${{ matrix.library }} | ||
run: | | ||
make polymorph_rust | ||
- name: Compile ${{ matrix.library }} implementation | ||
shell: bash | ||
working-directory: ./${{ matrix.library }} | ||
run: | | ||
# This works because `node` is installed by default on GHA runners | ||
CORES=$(node -e 'console.log(os.cpus().length)') | ||
make transpile_rust TRANSPILE_TESTS_IN_RUST=1 CORES=$CORES | ||
- name: Copy ${{ matrix.library }} Vector Files | ||
if: ${{ matrix.library == 'TestVectors' }} | ||
shell: bash | ||
working-directory: ./${{ matrix.library }} | ||
run: | | ||
cp runtimes/java/*.json runtimes/rust/ | ||
- name: Test ${{ matrix.library }} Rust | ||
shell: bash | ||
working-directory: ./${{ matrix.library }} | ||
run: | | ||
make test_rust | ||
- name: Test Examples for Rust in ${{ matrix.library }} | ||
if: ${{ matrix.library == 'DynamoDbEncryption' }} | ||
working-directory: ./${{ matrix.library }}/runtimes/rust/ | ||
shell: bash | ||
run: | | ||
cargo run --release --example main |