Merge pull request #1117 from Altinity/backport/25.3.8/88668 #4062
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # yamllint disable rule:comments-indentation | |
| name: ReleaseBranchCI | |
| env: | |
| # Force the stdout and stderr streams to be unbuffered | |
| PYTHONUNBUFFERED: 1 | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| CLICKHOUSE_TEST_STAT_LOGIN: ${{ secrets.CLICKHOUSE_TEST_STAT_LOGIN }} | |
| CLICKHOUSE_TEST_STAT_PASSWORD: ${{ secrets.CLICKHOUSE_TEST_STAT_PASSWORD }} | |
| CLICKHOUSE_TEST_STAT_URL: ${{ secrets.CLICKHOUSE_TEST_STAT_URL }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| ROBOT_TOKEN: ${{ secrets.ROBOT_TOKEN }} | |
| on: # yamllint disable-line rule:truthy | |
| pull_request: | |
| types: | |
| - synchronize | |
| - reopened | |
| - opened | |
| branches: | |
| - 'releases/*' | |
| push: | |
| branches: | |
| - 'releases/*' | |
| tags: | |
| - '*' | |
| workflow_dispatch: | |
| inputs: | |
| workflow_name: | |
| description: 'Name of the workflow' | |
| required: false | |
| type: string | |
| jobs: | |
| RunConfig: | |
| runs-on: [self-hosted, altinity-on-demand, altinity-style-checker-aarch64] | |
| outputs: | |
| data: ${{ steps.runconfig.outputs.CI_DATA }} | |
| steps: | |
| - name: Check out repository code | |
| uses: Altinity/checkout@19599efdf36c4f3f30eb55d5bb388896faea69f6 | |
| with: | |
| clear-repository: true # to ensure correct digests | |
| fetch-depth: 0 # to get version | |
| filter: tree:0 | |
| - name: Debug Info | |
| uses: ./.github/actions/debug | |
| - name: PrepareRunConfig | |
| id: runconfig | |
| run: | | |
| echo "::group::configure CI run" | |
| python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --configure --outfile ${{ runner.temp }}/ci_run_data.json | |
| echo "::endgroup::" | |
| echo "::group::CI run configure results" | |
| python3 -m json.tool ${{ runner.temp }}/ci_run_data.json | |
| echo "::endgroup::" | |
| { | |
| echo 'CI_DATA<<EOF' | |
| cat ${{ runner.temp }}/ci_run_data.json | |
| echo 'EOF' | |
| } >> "$GITHUB_OUTPUT" | |
| - name: Re-create GH statuses for skipped jobs if any | |
| run: | | |
| python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --infile ${{ runner.temp }}/ci_run_data.json --update-gh-statuses | |
| - name: Note report location to summary | |
| env: | |
| PR_NUMBER: ${{ github.event.pull_request.number || 0 }} | |
| COMMIT_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} | |
| run: | | |
| REPORT_LINK=https://s3.amazonaws.com/altinity-build-artifacts/$PR_NUMBER/$COMMIT_SHA/ci_run_report.html | |
| echo "Workflow Run Report: [View Report]($REPORT_LINK)" >> $GITHUB_STEP_SUMMARY | |
| BuildDockers: | |
| needs: [RunConfig] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/docker_test_images.yml | |
| secrets: inherit | |
| with: | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| CompatibilityCheckX86: | |
| needs: [RunConfig, BuilderDebRelease] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Compatibility check (release) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| CompatibilityCheckAarch64: | |
| needs: [RunConfig, BuilderDebAarch64] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Compatibility check (aarch64) | |
| runner_type: altinity-func-tester-aarch64 | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| ######################################################################################### | |
| #################################### ORDINARY BUILDS #################################### | |
| ######################################################################################### | |
| BuilderDebRelease: | |
| needs: [RunConfig, BuildDockers] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_build.yml | |
| secrets: inherit | |
| with: | |
| build_name: package_release | |
| checkout_depth: 0 | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| # always rebuild on release branches to be able to publish from any commit | |
| force: true | |
| BuilderDebAarch64: | |
| needs: [RunConfig, BuildDockers] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_build.yml | |
| secrets: inherit | |
| with: | |
| build_name: package_aarch64 | |
| checkout_depth: 0 | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| # always rebuild on release branches to be able to publish from any commit | |
| force: true | |
| runner_type: builder-aarch64 | |
| BuilderDebAsan: | |
| needs: [RunConfig, BuildDockers] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_build.yml | |
| secrets: inherit | |
| with: | |
| build_name: package_asan | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| BuilderDebUBsan: | |
| needs: [RunConfig, BuildDockers] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_build.yml | |
| secrets: inherit | |
| with: | |
| build_name: package_ubsan | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| BuilderDebTsan: | |
| needs: [RunConfig, BuildDockers] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_build.yml | |
| secrets: inherit | |
| with: | |
| build_name: package_tsan | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| BuilderDebMsan: | |
| needs: [RunConfig, BuildDockers] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_build.yml | |
| secrets: inherit | |
| with: | |
| build_name: package_msan | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| BuilderDebDebug: | |
| needs: [RunConfig, BuildDockers] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_build.yml | |
| secrets: inherit | |
| with: | |
| build_name: package_debug | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| force: true | |
| ############################################################################################ | |
| ##################################### Docker images ####################################### | |
| ############################################################################################ | |
| DockerServerImage: | |
| needs: [RunConfig, BuilderDebRelease, BuilderDebAarch64] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Docker server image | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| DockerKeeperImage: | |
| needs: [RunConfig, BuilderDebRelease, BuilderDebAarch64] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Docker keeper image | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| GrypeScan: | |
| needs: [RunConfig, DockerServerImage, DockerKeeperImage] | |
| if: ${{ !failure() && !cancelled() }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - image: server | |
| suffix: '' | |
| - image: server | |
| suffix: '-alpine' | |
| - image: keeper | |
| suffix: '' | |
| uses: ./.github/workflows/grype_scan.yml | |
| secrets: inherit | |
| with: | |
| docker_image: altinityinfra/clickhouse-${{ matrix.image }} | |
| version: ${{ fromJson(needs.RunConfig.outputs.data).version }} | |
| tag-suffix: ${{ matrix.suffix }} | |
| ############################################################################################ | |
| ##################################### BUILD REPORTER ####################################### | |
| ############################################################################################ | |
| Builds_Report: | |
| # run report check for failed builds to indicate the CI error | |
| if: ${{ !cancelled() && needs.RunConfig.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'Builds') }} | |
| needs: [RunConfig, BuilderDebRelease, BuilderDebAarch64, BuilderDebAsan, BuilderDebUBsan, BuilderDebMsan, BuilderDebTsan, BuilderDebDebug] | |
| runs-on: [self-hosted, altinity-on-demand, altinity-style-checker-aarch64] | |
| steps: | |
| - name: Check out repository code | |
| uses: Altinity/checkout@19599efdf36c4f3f30eb55d5bb388896faea69f6 | |
| - name: Download reports | |
| run: | | |
| python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --infile ${{ toJson(needs.RunConfig.outputs.data) }} --pre --job-name Builds | |
| - name: Builds report | |
| run: | | |
| cd "$GITHUB_WORKSPACE/tests/ci" | |
| python3 ./build_report_check.py --reports package_release package_aarch64 package_asan package_msan package_ubsan package_tsan package_debug | |
| - name: Set status | |
| # NOTE(vnemkov): generate and upload the report even if previous step failed | |
| if: success() || failure() | |
| run: | | |
| python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --infile ${{ toJson(needs.RunConfig.outputs.data) }} --post --job-name Builds | |
| MarkReleaseReady: | |
| if: ${{ !failure() && !cancelled() }} | |
| needs: | |
| - BuilderDebRelease | |
| - BuilderDebAarch64 | |
| runs-on: [self-hosted, altinity-on-demand, altinity-style-checker-aarch64] | |
| steps: | |
| - name: Debug | |
| run: | | |
| echo need with different filters | |
| cat << 'EOF' | |
| ${{ toJSON(needs) }} | |
| ${{ toJSON(needs.*.result) }} | |
| no failures ${{ !contains(needs.*.result, 'failure') }} | |
| no skips ${{ !contains(needs.*.result, 'skipped') }} | |
| no both ${{ !(contains(needs.*.result, 'skipped') || contains(needs.*.result, 'failure')) }} | |
| EOF | |
| - name: Not ready | |
| # fail the job to be able restart it | |
| if: ${{ contains(needs.*.result, 'skipped') || contains(needs.*.result, 'failure') }} | |
| run: exit 1 | |
| - name: Check out repository code | |
| if: ${{ ! (contains(needs.*.result, 'skipped') || contains(needs.*.result, 'failure')) }} | |
| uses: Altinity/checkout@19599efdf36c4f3f30eb55d5bb388896faea69f6 | |
| - name: Mark Commit Release Ready | |
| if: ${{ ! (contains(needs.*.result, 'skipped') || contains(needs.*.result, 'failure')) }} | |
| run: | | |
| cd "$GITHUB_WORKSPACE/tests/ci" | |
| python3 mark_release_ready.py | |
| ############################################################################################ | |
| #################################### INSTALL PACKAGES ###################################### | |
| ############################################################################################ | |
| InstallPackagesTestRelease: | |
| needs: [RunConfig, BuilderDebRelease] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Install packages (release) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| run_command: | | |
| python3 install_check.py "$CHECK_NAME" | |
| InstallPackagesTestAarch64: | |
| needs: [RunConfig, BuilderDebAarch64] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Install packages (aarch64) | |
| runner_type: altinity-func-tester-aarch64 | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| run_command: | | |
| python3 install_check.py "$CHECK_NAME" | |
| ############################################################################################## | |
| ########################### FUNCTIONAl STATELESS TESTS ####################################### | |
| ############################################################################################## | |
| FunctionalStatelessTestRelease: | |
| needs: [RunConfig, BuilderDebRelease] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stateless tests (release) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| FunctionalStatelessTestAarch64: | |
| needs: [RunConfig, BuilderDebAarch64] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stateless tests (aarch64) | |
| runner_type: altinity-func-tester-aarch64 | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| FunctionalStatelessTestAsan: | |
| needs: [RunConfig, BuilderDebAsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stateless tests (asan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| FunctionalStatelessTestTsan: | |
| needs: [RunConfig, BuilderDebTsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stateless tests (tsan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| FunctionalStatelessTestMsan: | |
| needs: [RunConfig, BuilderDebMsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stateless tests (msan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| FunctionalStatelessTestUBsan: | |
| needs: [RunConfig, BuilderDebUBsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stateless tests (ubsan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| FunctionalStatelessTestDebug: | |
| needs: [RunConfig, BuilderDebDebug] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stateless tests (debug) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| ############################################################################################## | |
| ######################################### STRESS TESTS ####################################### | |
| ############################################################################################## | |
| StressTestAsan: | |
| needs: [RunConfig, BuilderDebAsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stress test (asan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| StressTestTsan: | |
| needs: [RunConfig, BuilderDebTsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stress test (tsan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| StressTestMsan: | |
| needs: [RunConfig, BuilderDebMsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stress test (msan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| StressTestUBsan: | |
| needs: [RunConfig, BuilderDebUBsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stress test (ubsan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| StressTestDebug: | |
| needs: [RunConfig, BuilderDebDebug] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Stress test (debug) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| ############################################################################################# | |
| ############################# INTEGRATION TESTS ############################################# | |
| ############################################################################################# | |
| IntegrationTestsAsan: | |
| needs: [RunConfig, BuilderDebAsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Integration tests (asan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| IntegrationTestsAnalyzerAsan: | |
| needs: [RunConfig, BuilderDebAsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Integration tests (asan, old analyzer) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| IntegrationTestsTsan: | |
| needs: [RunConfig, BuilderDebTsan] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Integration tests (tsan) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| IntegrationTestsRelease: | |
| needs: [RunConfig, BuilderDebRelease] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_test.yml | |
| secrets: inherit | |
| with: | |
| test_name: Integration tests (release) | |
| runner_type: altinity-func-tester | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| ############################################################################################# | |
| ##################################### REGRESSION TESTS ###################################### | |
| ############################################################################################# | |
| RegressionTestsRelease: | |
| needs: [RunConfig, BuilderDebRelease] | |
| if: ${{ !failure() && !cancelled() && !contains(fromJson(needs.RunConfig.outputs.data).ci_settings.exclude_keywords, 'regression')}} | |
| uses: ./.github/workflows/regression.yml | |
| secrets: inherit | |
| with: | |
| runner_type: altinity-on-demand, altinity-regression-tester | |
| commit: 4a249bc0422d93c6e466edbe5af74fcb0f564820 | |
| arch: release | |
| build_sha: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} | |
| timeout_minutes: 300 | |
| RegressionTestsAarch64: | |
| needs: [RunConfig, BuilderDebAarch64] | |
| if: ${{ !failure() && !cancelled() && !contains(fromJson(needs.RunConfig.outputs.data).ci_settings.exclude_keywords, 'regression') && !contains(fromJson(needs.RunConfig.outputs.data).ci_settings.exclude_keywords, 'aarch64')}} | |
| uses: ./.github/workflows/regression.yml | |
| secrets: inherit | |
| with: | |
| runner_type: altinity-on-demand, altinity-regression-tester-aarch64 | |
| commit: 4a249bc0422d93c6e466edbe5af74fcb0f564820 | |
| arch: aarch64 | |
| build_sha: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} | |
| timeout_minutes: 300 | |
| SignRelease: | |
| needs: [RunConfig, BuilderDebRelease] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_sign.yml | |
| secrets: inherit | |
| with: | |
| test_name: Sign release | |
| runner_type: altinity-style-checker | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| SignAarch64: | |
| needs: [RunConfig, BuilderDebAarch64] | |
| if: ${{ !failure() && !cancelled() }} | |
| uses: ./.github/workflows/reusable_sign.yml | |
| secrets: inherit | |
| with: | |
| test_name: Sign aarch64 | |
| runner_type: altinity-style-checker-aarch64 | |
| data: ${{ needs.RunConfig.outputs.data }} | |
| FinishCheck: | |
| if: ${{ !cancelled() }} | |
| needs: | |
| - RunConfig | |
| - DockerServerImage | |
| - DockerKeeperImage | |
| - Builds_Report | |
| - MarkReleaseReady | |
| - FunctionalStatelessTestDebug | |
| - FunctionalStatelessTestRelease | |
| - FunctionalStatelessTestAarch64 | |
| - FunctionalStatelessTestAsan | |
| - FunctionalStatelessTestTsan | |
| - FunctionalStatelessTestMsan | |
| - FunctionalStatelessTestUBsan | |
| - StressTestDebug | |
| - StressTestAsan | |
| - StressTestTsan | |
| - StressTestMsan | |
| - StressTestUBsan | |
| - IntegrationTestsAsan | |
| - IntegrationTestsTsan | |
| - IntegrationTestsRelease | |
| - CompatibilityCheckX86 | |
| - CompatibilityCheckAarch64 | |
| - RegressionTestsRelease | |
| - RegressionTestsAarch64 | |
| - GrypeScan | |
| - SignRelease | |
| runs-on: [self-hosted, altinity-on-demand, altinity-style-checker-aarch64] | |
| steps: | |
| - name: Check out repository code | |
| uses: Altinity/checkout@19599efdf36c4f3f30eb55d5bb388896faea69f6 | |
| with: | |
| clear-repository: true | |
| - name: Finish label | |
| if: ${{ !failure() }} | |
| run: | | |
| # update overall ci report | |
| python3 ./tests/ci/finish_check.py --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }} | |
| - name: Check Workflow results | |
| if: ${{ !cancelled() }} | |
| run: | | |
| export WORKFLOW_RESULT_FILE="/tmp/workflow_results.json" | |
| cat > "$WORKFLOW_RESULT_FILE" << 'EOF' | |
| ${{ toJson(needs) }} | |
| EOF | |
| python3 ./tests/ci/ci_buddy.py --check-wf-status | |
| - name: Finalize workflow report | |
| if: ${{ !cancelled() }} | |
| uses: ./.github/actions/create_workflow_report | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| CHECKS_DATABASE_HOST: ${{ secrets.CHECKS_DATABASE_HOST }} | |
| CHECKS_DATABASE_USER: ${{ secrets.CLICKHOUSE_TEST_STAT_LOGIN }} | |
| CHECKS_DATABASE_PASSWORD: ${{ secrets.CLICKHOUSE_TEST_STAT_PASSWORD }} | |
| with: | |
| final: true |