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: aws-amd64 # 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" env: PROFILE: emqx outputs: fast_ct_apps: ${{ steps.find_ct_apps.outputs.fast_ct_apps }} docker_ct_apps: ${{ steps.find_ct_apps.outputs.docker_ct_apps }} steps: - uses: emqx/self-hosted-cleanup-action@v1.0.3 - uses: actions/checkout@v3 with: path: source - name: Find CT Apps working-directory: source id: find_ct_apps run: | fast_ct_apps="$(./scripts/find-apps.sh --ci fast)" docker_ct_apps="$(./scripts/find-apps.sh --ci docker)" echo "fast: $fast_ct_apps" echo "docker: $docker_ct_apps" echo "fast_ct_apps=${fast_ct_apps}" >> $GITHUB_OUTPUT echo "docker_ct_apps=${docker_ct_apps}" >> $GITHUB_OUTPUT - name: Get deps and compile working-directory: source env: PROFILE: emqx run: | make cd .. zip -ryq source.zip source/* source/.[^.]* - uses: actions/upload-artifact@v3 with: name: source-${{ env.PROFILE }} path: source.zip prepare_ee: runs-on: aws-amd64 # 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" env: PROFILE: emqx-enterprise steps: - uses: emqx/self-hosted-cleanup-action@v1.0.3 - uses: actions/checkout@v3 with: path: source - name: Get deps and compile working-directory: source run: | make cd .. zip -ryq source.zip source/* source/.[^.]* - uses: actions/upload-artifact@v3 with: name: source-${{ env.PROFILE }} path: source.zip eunit_and_proper: needs: - prepare - prepare_ee 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: emqx/self-hosted-cleanup-action@v1.0.3 - uses: actions/download-artifact@v3 with: name: source-${{ matrix.profile }} 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 - prepare_ee strategy: fail-fast: false matrix: app: ${{ fromJson(needs.prepare.outputs.docker_ct_apps) }} runs-on: aws-amd64 defaults: run: shell: bash steps: - uses: emqx/self-hosted-cleanup-action@v1.0.3 with: cleanup_docker: true - uses: actions/download-artifact@v3 with: name: source-${{ matrix.app[1] }} 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 INFLUXDB_TAG: 2.5.0 WHICH_APP: ${{ matrix.app[0] }} PROFILE: ${{ matrix.app[1] }} run: | echo $PROFILE ./scripts/ct/run.sh --app $WHICH_APP - uses: actions/upload-artifact@v3 if: success() with: name: coverdata path: source/_build/test/cover - id: logs_artifact_name if: failure() run: | PRE_NAME="logs-${{ matrix.app[0] }}-${{ matrix.app[1] }}" ARTIFACT_NAME=$(echo "$PRE_NAME" | sed 's/\//-/g') echo "artifact_name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT - uses: actions/upload-artifact@v3 if: failure() with: name: ${{ steps.logs_artifact_name.outputs.artifact_name }} path: source/_build/test/logs ct: needs: - prepare - prepare_ee strategy: fail-fast: false matrix: app: ${{ fromJson(needs.prepare.outputs.fast_ct_apps) }} 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: emqx/self-hosted-cleanup-action@v1.0.3 - uses: actions/download-artifact@v3 with: name: source-${{ matrix.app[1] }} path: . - name: unzip source code run: unzip -q source.zip # produces $PROFILE-.coverdata - name: run common test working-directory: source env: WHICH_APP: ${{ matrix.app[0] }} PROFILE: ${{ matrix.app[1] }} run: | make "${WHICH_APP}-ct" - uses: actions/upload-artifact@v3 if: success() with: name: coverdata path: source/_build/test/cover if-no-files-found: warn # do not fail if no coverdata found - id: logs_artifact_name if: failure() run: | PRE_NAME="logs-${{ matrix.app[0] }}-${{ matrix.app[1] }}" ARTIFACT_NAME=$(echo "$PRE_NAME" | sed 's/\//-/g') echo "artifact_name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT - uses: actions/upload-artifact@v3 if: failure() with: name: ${{ steps.logs_artifact_name.outputs.artifact_name }} 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.1.0 - uses: actions/download-artifact@v3 with: name: source-emqx-enterprise 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 env: PROFILE: emqx-enterprise run: make cover - name: send to coveralls working-directory: source env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PROFILE: emqx-enterprise 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