End-to-end tests #1
This file contains hidden or 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
| name: End-to-end tests | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| cardano-node-versions: | |
| description: "Cardano node version used in e2e (comma separated list of versions)" | |
| required: true | |
| type: string | |
| default: "11.0.1" | |
| full-scenario-signed-entity-types: | |
| description: "Signed entity types parameters for full scenarios (discriminants names in an ordered comma separated list)" | |
| required: true | |
| type: string | |
| default: "CardanoTransactions,CardanoStakeDistribution,CardanoDatabase" | |
| minimal-scenario-signed-entity-types: | |
| description: "Signed entity type parameters for minimal scenarios (one discriminants name)" | |
| required: true | |
| type: string | |
| default: "CardanoDatabase" | |
| ref-to-build-nodes: | |
| description: "Git tag or commit hash of the Mithril nodes to test" | |
| required: true | |
| type: string | |
| default: "unstable" | |
| ref-to-build-e2e: | |
| description: "Git tag or commit hash to build the end-to-end binary" | |
| required: true | |
| type: string | |
| default: "unstable" | |
| additional-nodes-build-args: | |
| description: "Additional arguments to pass to the Mithril nodes build command" | |
| required: false | |
| type: string | |
| default: "--features future_snark" | |
| workflow_call: | |
| inputs: | |
| cardano-node-versions: | |
| type: string | |
| default: "11.0.1" | |
| full-scenario-signed-entity-types: | |
| type: string | |
| default: "CardanoTransactions,CardanoStakeDistribution,CardanoDatabase" | |
| minimal-scenario-signed-entity-types: | |
| type: string | |
| default: "CardanoDatabase" | |
| ref-to-build-nodes: | |
| type: string | |
| default: "unstable" | |
| ref-to-build-e2e: | |
| type: string | |
| default: "unstable" | |
| additional-nodes-build-args: | |
| description: "Additional arguments to pass to the Mithril nodes build command" | |
| required: false | |
| type: string | |
| default: "--features future_snark" | |
| jobs: | |
| prepare-env-variables: | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| cardano_node_versions: ${{ steps.set-env.outputs.cardano_node_versions }} | |
| steps: | |
| - name: Prepare env variables | |
| id: set-env | |
| shell: bash | |
| run: | | |
| versions=$(echo '${{ inputs.cardano-node-versions }}' | jq -R -c 'def trim: gsub("^\\s+|\\s+$"; ""); split(",") | map(trim)') | |
| echo "cardano_node_versions=$versions" >> "$GITHUB_OUTPUT" | |
| prepare-binaries: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ inputs.ref-to-build-nodes }} | |
| - name: Install stable toolchain | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| target: x86_64-unknown-linux-musl | |
| - name: Install musl toolchain prerequisites | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y musl-tools build-essential pkg-config | |
| - name: Build Mithril nodes | |
| shell: bash | |
| run: | | |
| cargo build --release --bins --target=x86_64-unknown-linux-musl ${{ inputs.additional-nodes-build-args }} \ | |
| --package mithril-aggregator --package mithril-signer \ | |
| --package mithril-client-cli --package mithril-relay | |
| - name: Upload Mithril binaries | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: mithril-binaries | |
| path: | | |
| target/x86_64-unknown-linux-musl/release/mithril-aggregator | |
| target/x86_64-unknown-linux-musl/release/mithril-client | |
| target/x86_64-unknown-linux-musl/release/mithril-relay | |
| target/x86_64-unknown-linux-musl/release/mithril-signer | |
| prepare-e2e-runner: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ inputs.ref-to-build-e2e }} | |
| - name: Install stable toolchain | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| - name: Build E2E runner | |
| shell: bash | |
| run: | | |
| cargo build --release --bin mithril-end-to-end | |
| - name: Upload E2E runner | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: e2e-runner | |
| path: target/release/mithril-end-to-end | |
| minimal-e2e: | |
| runs-on: ubuntu-24.04 | |
| needs: [prepare-env-variables, prepare-binaries, prepare-e2e-runner] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| cardano_node_version: ${{ fromJSON(needs.prepare-env-variables.outputs.cardano_node_versions) }} | |
| aggregate_signature_type: ["Concatenation"] # Todo: add "Snark" once the snark certificate chain is ready | |
| extra_args: ["--cardano-slot-length 1.0 --cardano-epoch-length 60"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Download binaries | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: mithril-binaries | |
| path: ./mithril-binaries | |
| - name: Download e2e runner | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: e2e-runner | |
| path: ./mithril-binaries | |
| - name: Prepare binaries | |
| shell: bash | |
| run: | | |
| chmod +x ./mithril-binaries/mithril-aggregator | |
| chmod +x ./mithril-binaries/mithril-client | |
| chmod +x ./mithril-binaries/mithril-signer | |
| chmod +x ./mithril-binaries/mithril-relay | |
| chmod +x ./mithril-binaries/mithril-end-to-end | |
| mkdir -p artifacts | |
| - name: Run E2E tests | |
| uses: nick-fields/retry@v4 | |
| with: | |
| shell: bash | |
| max_attempts: 3 | |
| retry_on_exit_code: 2 | |
| timeout_minutes: 10 | |
| warning_on_retry: true | |
| command: | | |
| ./mithril-binaries/mithril-end-to-end -vvv \ | |
| --bin-directory ./mithril-binaries/ \ | |
| --work-directory=./artifacts \ | |
| --devnet-scripts-directory=./mithril-test-lab/cardano-devnet \ | |
| --cardano-node-version ${{ matrix.cardano_node_version }} \ | |
| --aggregate-signature-type ${{ matrix.aggregate_signature_type }} \ | |
| ${{ matrix.extra_args }} minimal --signed-entity-type ${{ inputs.minimal-scenario-signed-entity-types }} | |
| EXIT_CODE=$? | |
| if [ $EXIT_CODE -eq 0 ]; then | |
| echo "RESULT=success" >> $GITHUB_ENV | |
| elif [ $EXIT_CODE -eq 3 ]; then | |
| echo "RESULT=incompatible" >> $GITHUB_ENV | |
| exit 0 | |
| else | |
| echo "RESULT=failure" >> $GITHUB_ENV | |
| fi | |
| exit $EXIT_CODE | |
| - name: Upload E2E Tests Artifacts | |
| if: ${{ failure() }} | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: mithril-e2e-tests-artifacts-run_${{ github.run_number }}-attempt_${{ github.run_attempt }}-sig_type_${{ matrix.aggregate_signature_type }}--scenario_minimal--cardano-${{ matrix.cardano_node_version }} | |
| path: | | |
| ./artifacts/* | |
| # including node.sock makes the upload fails so exclude them: | |
| !./artifacts/**/node.sock | |
| # exclude cardano tools, saving ~500mb of data: | |
| !./artifacts/devnet/bin/ | |
| if-no-files-found: error | |
| full-e2e: | |
| runs-on: ubuntu-24.04 | |
| needs: [prepare-env-variables, prepare-binaries, prepare-e2e-runner] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| cardano_node_version: ${{ fromJSON(needs.prepare-env-variables.outputs.cardano_node_versions) }} | |
| aggregate_signature_type: ["Concatenation"] | |
| extra_args: ["--cardano-slot-length 1.0 --cardano-epoch-length 60"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Download binaries | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: mithril-binaries | |
| path: ./mithril-binaries | |
| - name: Download e2e runner | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: e2e-runner | |
| path: ./mithril-binaries | |
| - name: Prepare binaries | |
| shell: bash | |
| run: | | |
| chmod +x ./mithril-binaries/mithril-aggregator | |
| chmod +x ./mithril-binaries/mithril-client | |
| chmod +x ./mithril-binaries/mithril-signer | |
| chmod +x ./mithril-binaries/mithril-relay | |
| chmod +x ./mithril-binaries/mithril-end-to-end | |
| mkdir -p artifacts | |
| - name: Run E2E tests | |
| uses: nick-fields/retry@v4 | |
| with: | |
| shell: bash | |
| max_attempts: 3 | |
| retry_on_exit_code: 2 | |
| timeout_minutes: 10 | |
| warning_on_retry: true | |
| command: | | |
| ./mithril-binaries/mithril-end-to-end -vvv \ | |
| --bin-directory ./mithril-binaries/ \ | |
| --work-directory=./artifacts \ | |
| --devnet-scripts-directory=./mithril-test-lab/cardano-devnet \ | |
| --cardano-node-version ${{ matrix.cardano_node_version }} \ | |
| --aggregate-signature-type ${{ matrix.aggregate_signature_type }} \ | |
| ${{ matrix.extra_args }} full --signed-entity-types ${{ inputs.full-scenario-signed-entity-types }} | |
| EXIT_CODE=$? | |
| if [ $EXIT_CODE -eq 0 ]; then | |
| echo "RESULT=success" >> $GITHUB_ENV | |
| elif [ $EXIT_CODE -eq 3 ]; then | |
| echo "RESULT=incompatible" >> $GITHUB_ENV | |
| exit 0 | |
| else | |
| echo "RESULT=failure" >> $GITHUB_ENV | |
| fi | |
| exit $EXIT_CODE | |
| - name: Upload E2E Tests Artifacts | |
| if: ${{ failure() }} | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: mithril-e2e-tests-artifacts-run_${{ github.run_number }}-attempt_${{ github.run_attempt }}-sig_type_${{ matrix.aggregate_signature_type }}--scenario_full--cardano-${{ matrix.cardano_node_version }} | |
| path: | | |
| ./artifacts/* | |
| # including node.sock makes the upload fails so exclude them: | |
| !./artifacts/**/node.sock | |
| # exclude cardano tools, saving ~500mb of data: | |
| !./artifacts/devnet/bin/ | |
| if-no-files-found: error |