name: Run tests (ya make) description: Run tests using ya make inputs: build_target: required: false description: "build target" sanitizer: required: false description: "sanitizer type (address, memory, thread, undefined, leak)" log_suffix: required: true description: "log suffix" test_threads: required: false default: "28" description: "Test threads count" testman_token: required: false description: "test manager auth token" testman_url: required: false description: "test manager endpoint" testman_project_id: required: false description: "test manager project id" runs: using: "composite" steps: - name: Init id: init shell: bash run: | echo "SHELLOPTS=xtrace" >> $GITHUB_ENV export TMP_DIR=$(pwd)/tmp echo "TMP_DIR=$TMP_DIR" >> $GITHUB_ENV echo "OUT_DIR=$TMP_DIR/out" >> $GITHUB_ENV echo "ARTIFACTS_DIR=$TMP_DIR/artifacts" >> $GITHUB_ENV echo "JUNIT_REPORT_XML=$TMP_DIR/junit.xml" >> $GITHUB_ENV echo "TESTMO_TOKEN=${{ inputs.testman_token }}" >> $GITHUB_ENV echo "TESTMO_URL=${{ inputs.testman_url }}" >> $GITHUB_ENV echo "SUMMARY_LINKS=$(mktemp)" >> $GITHUB_ENV - name: prepare shell: bash run: | rm -rf $TMP_DIR $JUNIT_REPORT_XML mkdir -p $TMP_DIR $OUT_DIR $ARTIFACTS_DIR - name: Install Node required for Testmo CLI uses: actions/setup-node@v3 with: node-version: 19 - name: Install Testmo CLI shell: bash run: npm install -g @testmo/testmo-cli - name: Test history run create id: th if: inputs.testman_token shell: bash env: PR_NUMBER: ${{ github.event.number }} run: | RUN_URL="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" BRANCH_TAG="$GITHUB_REF_NAME" TESTMO_SOURCE="${{ inputs.log_suffix }}" TESTMO_SOURCE="${TESTMO_SOURCE/_/-}" case $GITHUB_EVENT_NAME in workflow_dispatch) TESTMO_RUN_NAME="${{ github.run_id }} manual" EXTRA_TAG="manual" ;; pull_request | pull_request_target) TESTMO_RUN_NAME="${{ github.run_id }} PR #${PR_NUMBER}" EXTRA_TAG="pr" BRANCH_TAG="" ;; schedule) TESTMO_RUN_NAME="${{ github.run_id }} schedule" EXTRA_TAG="schedule" ;; *) TESTMO_RUN_NAME="${{ github.run_id }}" EXTRA_TAG="" ;; esac testmo automation:resources:add-link --name build --url "$RUN_URL" --resources testmo.json testmo automation:resources:add-field --name git-sha --type string --value "${GITHUB_SHA:0:7}" --resources testmo.json testmo automation:run:create --instance "$TESTMO_URL" --project-id "${{ inputs.testman_project_id }}" --name "$TESTMO_RUN_NAME" \ --source "$TESTMO_SOURCE" --resources testmo.json \ --tags "$BRANCH_TAG" --tags "$EXTRA_TAG" | \ echo "runid=$(cat)" >> $GITHUB_OUTPUT - name: Print test history link shell: bash run: | echo "10 [Test history](${TESTMO_URL}/automation/runs/view/${{steps.th.outputs.runid}})" >> $SUMMARY_LINKS - name: ya test shell: bash run: | extra_params=() if [ ! -z "${{ inputs.build_target }}" ]; then extra_params+=(--target="${{ inputs.build_target }}") fi if [ ! -z "${{ inputs.sanitizer }}" ] && [ "${{ inputs.sanitizer }}" != "none" ]; then extra_params+=(--sanitize="${{ inputs.sanitizer }}") fi ./ya test -A --build relwithdebinfo -D'BUILD_LANGUAGES=CPP PY3' --test-threads "${{ inputs.test_threads }}" \ --do-not-output-stderrs -T \ --junit "$JUNIT_REPORT_XML" --output "$OUT_DIR" "${extra_params[@]}" || ( RC=$? if [ $RC == 10 ]; then echo "ya test returned failed tests status, recovering.." else exit $RC fi ) - name: postprocess junit report shell: bash run: | .github/scripts/tests/transform-ya-junit.py -i \ --mu .github/config/muted_test.txt \ --mf .github/config/muted_functest.txt \ --ya-out "$OUT_DIR" \ --log-url-prefix "$S3_URL_PREFIX/logs/" \ --log-out-dir "$ARTIFACTS_DIR/logs/" \ "$JUNIT_REPORT_XML" - name: write tests summary if: always() shell: bash env: GITHUB_TOKEN: ${{ github.token }} run: | cat $SUMMARY_LINKS | python3 -c 'import sys; print(" | ".join([v for _, v in sorted([l.strip().split(" ", 1) for l in sys.stdin], key=lambda a: (int(a[0]), a))]))' >> $GITHUB_STEP_SUMMARY mkdir $ARTIFACTS_DIR/summary/ .github/scripts/tests/generate-summary.py \ --summary-out-path $ARTIFACTS_DIR/summary/ \ --summary-url-prefix $S3_URL_PREFIX/summary/ \ "Tests" ya-test.html "$JUNIT_REPORT_XML" - name: Unit test history upload results if: always() && inputs.testman_token shell: bash run: | testmo automation:run:submit-thread \ --instance "$TESTMO_URL" --run-id ${{ steps.th.outputs.runid }} \ --results "$JUNIT_REPORT_XML" - name: sync test results to s3 if: always() shell: bash run: | echo "::group::s3-sync" s3cmd sync --follow-symlinks --acl-public --no-progress --stats --no-check-md5 "$ARTIFACTS_DIR/" "$S3_BUCKET_PATH/" echo "::endgroup::" - name: Test history run complete if: always() && inputs.testman_token shell: bash run: | testmo automation:run:complete --instance "$TESTMO_URL" --run-id ${{ steps.th.outputs.runid }} - name: check test results shell: bash run: | .github/scripts/tests/fail-checker.py "$JUNIT_REPORT_XML"