name: Reusable test on: workflow_call: inputs: runs_on: description: Runner to run the job on required: true type: string container: description: "The container object as a JSON string (leave empty to run natively)" required: true type: string conan_profile: description: Conan profile to use required: true type: string build_type: description: Build type required: true type: string run_unit_tests: description: Whether to run unit tests required: true type: boolean run_integration_tests: description: Whether to run integration tests required: true type: boolean defaults: run: shell: bash jobs: unit_tests: name: Unit testing runs-on: ${{ inputs.runs_on }} container: ${{ inputs.container != '' && fromJson(inputs.container) || null }} if: ${{ inputs.run_unit_tests }} steps: - name: Cleanup workspace if: ${{ runner.os == 'macOS' }} uses: XRPLF/actions/cleanup-workspace@c7d9ce5ebb03c752a354889ecd870cadfc2b1cd4 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: clio_tests_${{ runner.os }}_${{ inputs.build_type }}_${{ inputs.conan_profile }} - name: Make clio_tests executable run: chmod +x ./clio_tests - name: Run clio_tests continue-on-error: true id: run_clio_tests run: ./clio_tests - name: Create an issue if: ${{ steps.run_clio_tests.outcome == 'failure' && endsWith(inputs.conan_profile, 'san') }} uses: XRPLF/actions/create-issue@2b8bc36af85b88bca0dd7bfac2e2dc05f94ad712 with: title: "[${{ inputs.conan_profile }}] reported issues" body: "Clio tests failed one or more sanitizer checks when built with `${{ inputs.conan_profile }}`." labels: "bug" assignees: "godexsoft,kuznetsss,mathbunnyru" - name: Fail the job if clio_tests failed if: ${{ steps.run_clio_tests.outcome == 'failure' }} run: exit 1 integration_tests: name: Integration testing runs-on: ${{ inputs.runs_on }} container: ${{ inputs.container != '' && fromJson(inputs.container) || null }} if: ${{ inputs.run_integration_tests }} services: scylladb: image: ${{ inputs.container != '' && 'scylladb/scylla' || '' }} options: >- --health-cmd "cqlsh -e 'describe cluster'" --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: Cleanup workspace if: ${{ runner.os == 'macOS' }} uses: XRPLF/actions/cleanup-workspace@c7d9ce5ebb03c752a354889ecd870cadfc2b1cd4 - name: Delete and start colima (macOS) # This is a temporary workaround for colima issues on macOS runners if: ${{ runner.os == 'macOS' }} run: | colima delete --force colima start - name: Spin up scylladb (macOS) if: ${{ runner.os == 'macOS' }} timeout-minutes: 1 run: | docker run \ --detach \ --name scylladb \ --health-cmd "cqlsh -e 'describe cluster'" \ --health-interval 10s \ --health-timeout 5s \ --health-retries 5 \ --publish 9042:9042 \ --memory 16G \ scylladb/scylla - name: Wait for scylladb container to be healthy (macOS) if: ${{ runner.os == 'macOS' }} timeout-minutes: 1 run: | until [ "$(docker inspect -f '{{.State.Health.Status}}' scylladb)" == "healthy" ]; do sleep 1 done - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: clio_integration_tests_${{ runner.os }}_${{ inputs.build_type }}_${{ inputs.conan_profile }} - name: Run clio_integration_tests run: | chmod +x ./clio_integration_tests ./clio_integration_tests ${{ runner.os != 'macOS' && '--backend_host=scylladb' || '' }} - name: Show docker logs and stop scylladb if: ${{ always() && runner.os == 'macOS' }} run: | docker logs scylladb docker rm --force scylladb || true