name: Run test case concurrency: group: test-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true on: push: branches: - '**' tags: - v* - e* pull_request: jobs: prepare: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04" outputs: fast_ct_apps: ${{ steps.run_find_apps.outputs.fast_ct_apps }} docker_ct_apps: ${{ steps.run_find_apps.outputs.docker_ct_apps }} steps: - uses: actions/checkout@v3 with: path: source fetch-depth: 0 - name: find_ct_apps working-directory: source id: run_find_apps run: | fast_ct_apps="$(./scripts/find-apps.sh --ct fast --json)" docker_ct_apps="$(./scripts/find-apps.sh --ct docker --json)" echo "fast-ct-apps: $fast_ct_apps" echo "docer-ct-apps: $docker_ct_apps" echo "::set-output name=fast_ct_apps::$fast_ct_apps" echo "::set-output name=docker_ct_apps::$docker_ct_apps" - name: get_all_deps working-directory: source run: | make deps-all ./rebar3 as test compile cd .. zip -ryq source.zip source/* source/.[^.]* - uses: actions/upload-artifact@v3 with: name: source path: source.zip eunit_and_proper: needs: prepare runs-on: aws-amd64 strategy: fail-fast: false matrix: profile: - emqx - emqx-enterprise defaults: run: shell: bash container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04" steps: - uses: AutoModality/action-clean@v1 - uses: actions/download-artifact@v3 with: name: source path: . - name: unzip source code env: PROFILE: ${{ matrix.profile }} run: unzip -o -q source.zip # produces eunit.coverdata - name: eunit env: PROFILE: ${{ matrix.profile }} working-directory: source run: make eunit # produces proper.coverdata - name: proper env: PROFILE: ${{ matrix.profile }} working-directory: source run: make proper - uses: actions/upload-artifact@v3 with: name: coverdata path: source/_build/test/cover ct_docker: needs: prepare strategy: fail-fast: false matrix: app_name: ${{ fromJson(needs.prepare.outputs.docker_ct_apps) }} runs-on: aws-amd64 defaults: run: shell: bash steps: - uses: AutoModality/action-clean@v1 - uses: actions/download-artifact@v3 with: name: source path: . - name: unzip source code run: unzip -q source.zip - name: docker compose up working-directory: source env: MONGO_TAG: 5 MYSQL_TAG: 8 PGSQL_TAG: 13 REDIS_TAG: 6 run: | rm _build/default/lib/rocksdb/_build/cmake/CMakeCache.txt ./scripts/ct/run.sh --app ${{ matrix.app_name }} - uses: actions/upload-artifact@v3 with: name: coverdata path: source/_build/test/cover - uses: actions/upload-artifact@v3 if: failure() with: name: logs-${{ matrix.profile }} path: source/_build/test/logs ct: needs: prepare strategy: fail-fast: false matrix: app_name: ${{ fromJson(needs.prepare.outputs.fast_ct_apps) }} profile: - emqx - emqx-enterprise runs-on: aws-amd64 container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04" defaults: run: shell: bash steps: - uses: AutoModality/action-clean@v1 - uses: actions/download-artifact@v3 with: name: source path: . - name: unzip source code run: unzip -q source.zip # produces .coverdata - name: run common test working-directory: source env: PROFILE: ${{ matrix.profile }} WHICH_APP: ${{ matrix.app_name }} run: | if [ "$PROFILE" = 'emqx-enterprise' ]; then COMPILE_FLAGS="$(grep -R "EMQX_RELEASE_EDITION" "$WHICH_APP" | wc -l || true)" if [ "$COMPILE_FLAGS" -gt 0 ]; then # need to clean first because the default profile was make clean make "${WHICH_APP}-ct" else echo "skip_common_test_run_for_app ${WHICH_APP}-ct" fi else case "$WHICH_APP" in lib-ee/*) echo "skip_opensource_edition_test_for_lib-ee" ;; *) make "${WHICH_APP}-ct" ;; esac fi - uses: actions/upload-artifact@v3 with: name: coverdata path: source/_build/test/cover if-no-files-found: warn # do not fail if no coverdata found - uses: actions/upload-artifact@v3 if: failure() with: name: logs-${{ matrix.profile }} path: source/_build/test/logs make_cover: needs: - eunit_and_proper - ct - ct_docker runs-on: ubuntu-20.04 container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04" steps: - uses: AutoModality/action-clean@v1 - uses: actions/download-artifact@v3 with: name: source path: . - name: unzip source code run: unzip -q source.zip - uses: actions/download-artifact@v3 name: download coverdata with: name: coverdata path: source/_build/test/cover - name: make cover working-directory: source run: make cover - name: send to coveralls working-directory: source env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: make coveralls - name: get coveralls logs working-directory: source if: failure() run: cat rebar3.crashdump # do this in a separate job upload_coverdata: needs: make_cover runs-on: ubuntu-20.04 steps: - name: Coveralls Finished env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | curl -v -k https://coveralls.io/webhook \ --header "Content-Type: application/json" \ --data "{\"repo_name\":\"$GITHUB_REPOSITORY\",\"repo_token\":\"$GITHUB_TOKEN\",\"payload\":{\"build_num\":$GITHUB_RUN_ID,\"status\":\"done\"}}" || true allgood_functional_tests: runs-on: ubuntu-20.04 needs: - eunit_and_proper - ct_docker - ct steps: - name: Check if all functional tests succeeded uses: re-actors/alls-green@release/v1 with: #allowed-failures: #allowed-skips: jobs: ${{ toJSON(needs) }}