From 201e38506d42cf07824f76902a72eecbafcef14b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Test=C3=A9?= Date: Mon, 27 May 2024 18:25:15 +0200 Subject: [PATCH] chore(ci): run aws cpu tests based on file changes This is done to imporve iteration time and feedback for devs. There is no point to run the full test suite each time. A given development could impact only tfhe-zk-pok for example. In this case only tfhe-zk-pok test would run and thus cutting workflow duration from around 3 hours down to a few minutes. --- .github/workflows/aws_tfhe_tests.yml | 119 ++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 3 deletions(-) diff --git a/.github/workflows/aws_tfhe_tests.yml b/.github/workflows/aws_tfhe_tests.yml index bd8a99b6f4..5e381fdc71 100644 --- a/.github/workflows/aws_tfhe_tests.yml +++ b/.github/workflows/aws_tfhe_tests.yml @@ -10,17 +10,117 @@ env: SLACK_ICON: https://pbs.twimg.com/profile_images/1274014582265298945/OjBKP9kn_400x400.png SLACK_USERNAME: ${{ secrets.BOT_USERNAME }} SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + IS_PULL_REQUEST: ${{ github.event_name == 'pull_request' }} on: # Allows you to run this workflow manually from the Actions tab as an alternative. workflow_dispatch: pull_request: types: [ labeled ] + schedule: + # Nightly tests @ 1AM after each work day + - cron: "0 1 * * MON-FRI" jobs: + should-run: + runs-on: ubuntu-latest + permissions: + pull-requests: write + outputs: + csprng_test: ${{ env.IS_PULL_REQUEST == 'false' || steps.changed-files.outputs.csprng_any_changed }} + zk_pok_test: ${{ env.IS_PULL_REQUEST == 'false' || steps.changed-files.outputs.zk_pok_any_changed }} + core_crypto_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.core_crypto_any_changed || + steps.changed-files.outputs.dependencies_any_changed }} + boolean_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.boolean_any_changed || + steps.changed-files.outputs.dependencies_any_changed }} + shortint_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.shortint_any_changed || + steps.changed-files.outputs.dependencies_any_changed }} + high_level_api_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.high_level_api_any_changed || + steps.changed-files.outputs.dependencies_any_changed }} + c_api_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.c_api_any_changed || + steps.changed-files.outputs.dependencies_any_changed }} + examples_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.examples_any_changed || + steps.changed-files.outputs.dependencies_any_changed }} + apps_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.apps_any_changed || steps.changed-files.outputs.dependencies_any_changed }} + user_docs_test: ${{ env.IS_PULL_REQUEST == 'false' || + steps.changed-files.outputs.user_docs_any_changed || + steps.changed-files.outputs.dependencies_any_changed }} + any_file_changed: ${{ env.IS_PULL_REQUEST == 'false' || steps.aggregated-changes.outputs.any_changed }} + steps: + - name: Checkout tfhe-rs + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b + with: + fetch-depth: 0 + + - name: Check for file changes + id: changed-files + uses: tj-actions/changed-files@5e85e31a0187e8df23b438284aa04f21b55f1510 + with: + since_last_remote_commit: true + files_yaml: | + dependencies: + - tfhe/Cargo.toml + - concrete-csprng/** + - tfhe-zk-pok/** + csprng: + - concrete-csprng/** + zk_pok: + - tfhe-zk-pok/** + core_crypto: + - tfhe/src/core_crypto/** + boolean: + - tfhe/src/core_crypto/** + - tfhe/src/boolean/** + shortint: + - tfhe/src/core_crypto/** + - tfhe/src/shortint/** + high_level_api: + - tfhe/src/** + - '!tfhe/src/c_api/**' + c_api: + - tfhe/src/** + examples: + - tfhe/src/** + - '!tfhe/src/c_api/**' + - tfhe/examples/** + apps: + - tfhe/src/** + - '!tfhe/src/c_api/**' + - apps/trivium/src/** + user_docs: + - tfhe/src/** + - '!tfhe/src/c_api/**' + - 'tfhe/docs/**.md' + - README.md + + - name: Aggregate file changes + id: aggregated-changes + if: ( steps.changed-files.outputs.dependencies_any_changed == 'true' || + steps.changed-files.outputs.csprng_any_changed == 'true' || + steps.changed-files.outputs.zk_pok_any_changed == 'true' || + steps.changed-files.outputs.core_crypto_any_changed == 'true' || + steps.changed-files.outputs.boolean_any_changed == 'true' || + steps.changed-files.outputs.shortint_any_changed == 'true' || + steps.changed-files.outputs.high_level_api_any_changed == 'true' || + steps.changed-files.outputs.c_api_any_changed == 'true' || + steps.changed-files.outputs.examples_any_changed == 'true' || + steps.changed-files.outputs.apps_any_changed == 'true' || + steps.changed-files.outputs.user_docs_any_changed == 'true') + run: | + echo "any_changed=true" >> "$GITHUB_OUTPUT" + setup-instance: name: Setup instance (cpu-tests) - if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.label.name, 'approved') }} + if: github.event_name != 'pull_request' || + (github.event_name == 'pull_request' && needs.should-run.outputs.any_file_changed == 'true') + needs: should-run runs-on: ubuntu-latest outputs: runner-name: ${{ steps.start-instance.outputs.label }} @@ -38,9 +138,11 @@ jobs: cpu-tests: name: CPU tests - needs: setup-instance + if: github.event_name != 'pull_request' || + (github.event_name == 'pull_request' && needs.setup-instance.result != 'skipped') + needs: [ should-run, setup-instance ] concurrency: - group: ${{ github.workflow }}_${{ github.ref }} + group: ${{ github.workflow }}_${{github.event_name}}_${{ github.ref }} cancel-in-progress: true runs-on: ${{ needs.setup-instance.outputs.runner-name }} steps: @@ -57,47 +159,58 @@ jobs: toolchain: stable - name: Run concrete-csprng tests + if: needs.should-run.outputs.csprng_test == 'true' run: | make test_concrete_csprng - name: Run tfhe-zk-pok tests + if: needs.should-run.outputs.zk_pok_test == 'true' run: | make test_zk_pok - name: Run core tests + if: needs.should-run.outputs.core_crypto_test == 'true' run: | AVX512_SUPPORT=ON make test_core_crypto - name: Run boolean tests + if: needs.should-run.outputs.boolean_test == 'true' run: | make test_boolean - name: Run C API tests + if: needs.should-run.outputs.c_api_test == 'true' run: | make test_c_api - name: Run user docs tests + if: needs.should-run.outputs.user_docs_test == 'true' run: | make test_user_doc - name: Gen Keys if required + if: needs.should-run.outputs.shortint_test == 'true' run: | make gen_key_cache - name: Run shortint tests + if: needs.should-run.outputs.shortint_test == 'true' run: | BIG_TESTS_INSTANCE=TRUE make test_shortint_ci - name: Run high-level API tests + if: needs.should-run.outputs.high_level_api_test == 'true' run: | BIG_TESTS_INSTANCE=TRUE make test_high_level_api - name: Run example tests + if: needs.should-run.outputs.examples_test == 'true' run: | make test_examples make dark_market - name: Run apps tests + if: needs.should-run.outputs.apps_test == 'true' run: | make test_trivium make test_kreyvium