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_dispatch:
  push:
    branches:
      - master
      - main
      - develop
  pull_request:

jobs:
  build_application:
    name: Build application using the reusable workflow
    uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1
    with:
      upload_app_binaries_artifact: "ragger_elfs"
      flags: "CAL_TEST_KEY=1 DOMAIN_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"

  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"
