From e6ee1da0f4fd830ecf18a167585a46e6a680bc25 Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Thu, 2 Jan 2025 08:23:40 +0100 Subject: [PATCH] Split build and test CI entry point from workflow to provide a reusable interface --- .../workflows/build_and_functional_tests.yml | 35 +--------- .../reusable_build_and_functional_tests.yml | 70 +++++++++++++++++++ 2 files changed, 73 insertions(+), 32 deletions(-) create mode 100644 .github/workflows/reusable_build_and_functional_tests.yml diff --git a/.github/workflows/build_and_functional_tests.yml b/.github/workflows/build_and_functional_tests.yml index 65ebfa0cd..dde662e8d 100644 --- a/.github/workflows/build_and_functional_tests.yml +++ b/.github/workflows/build_and_functional_tests.yml @@ -27,37 +27,8 @@ on: pull_request: jobs: - build_application: - name: Build application using the reusable workflow - uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1 + name: Build and test + uses: ./.github/workflows/reusable_swap_functional_tests.yml with: - upload_app_binaries_artifact: "ragger_elfs" - flags: "CAL_TEST_KEY=1 TRUSTED_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" - - ragger_tests: - name: Run ragger tests using the reusable workflow - needs: build_application - uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_ragger_tests.yml@v1 - with: - download_app_binaries_artifact: "ragger_elfs" - regenerate_snapshots: ${{ inputs.golden_run == 'Open a PR' }} - - build_clone_app: - name: Build Clone app using the reusable workflow - uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1 - with: - flags: "CHAIN=thundercore" - upload_app_binaries_artifact: "clone_elfs" - - ragger_clone_tests: - name: Run ragger Clone tests using the reusable workflow - needs: - - build_application - - build_clone_app - uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_ragger_tests.yml@v1 - with: - download_app_binaries_artifact: "ragger_elfs" - additional_app_binaries_artifact: "clone_elfs" - additional_app_binaries_artifact_dir: ./tests/ragger/.test_dependencies/clone/build/ - test_options: "--with_lib_mode" + branch_for_ethereum: ${{ github.ref }} regenerate_snapshots: ${{ inputs.golden_run == 'Open a PR' }} diff --git a/.github/workflows/reusable_build_and_functional_tests.yml b/.github/workflows/reusable_build_and_functional_tests.yml new file mode 100644 index 000000000..ebeabed15 --- /dev/null +++ b/.github/workflows/reusable_build_and_functional_tests.yml @@ -0,0 +1,70 @@ +name: Build and run functional tests using ragger through reusable workflow + +# This workflow will build the app and then run functional tests using the Ragger framework upon Speculos emulation. +# It calls a reusable workflow developed by Ledger's internal developer team to build the application and upload the +# resulting binaries. +# It then calls another reusable workflow to run the Ragger tests on the compiled application binary. +# +# While this workflow is optional, having functional testing on your application is mandatory and this workflow and +# tooling environment is meant to be easy to use and adapt after forking your application + +on: + workflow_call: + inputs: + branch_for_ethereum: + required: false + default: 'develop' + type: string + + test_filter: + required: false + default: '""' + type: string + + regenerate_snapshots: + description: 'Clean snapshots, regenerate them, commit the changes in a branch, and open a PR' + required: false + default: false + type: boolean + +jobs: + build_application: + name: Build application using the reusable workflow + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1 + with: + app_branch_name: ${{ inputs.branch_for_ethereum }} + upload_app_binaries_artifact: "ragger_elfs" + flags: "CAL_TEST_KEY=1 TRUSTED_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" + + ragger_tests: + name: Run ragger tests using the reusable workflow + needs: build_application + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_ragger_tests.yml@v1 + with: + app_branch_name: ${{ inputs.branch_for_ethereum }} + download_app_binaries_artifact: "ragger_elfs" + test_filter: ${{ inputs.test_filter }} + regenerate_snapshots: ${{ inputs.regenerate_snapshots }} + + build_clone_app: + name: Build Clone app using the reusable workflow + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1 + with: + app_branch_name: ${{ inputs.branch_for_ethereum }} + flags: "CHAIN=thundercore" + upload_app_binaries_artifact: "clone_elfs" + + ragger_clone_tests: + name: Run ragger Clone tests using the reusable workflow + needs: + - build_application + - build_clone_app + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_ragger_tests.yml@v1 + with: + app_branch_name: ${{ inputs.branch_for_ethereum }} + download_app_binaries_artifact: "ragger_elfs" + additional_app_binaries_artifact: "clone_elfs" + additional_app_binaries_artifact_dir: ./tests/ragger/.test_dependencies/clone/build/ + test_options: "--with_lib_mode" + test_filter: ${{ inputs.test_filter }} + regenerate_snapshots: ${{ inputs.regenerate_snapshots }}