summaryrefslogtreecommitdiffstats
path: root/.github/workflows/cpp_sdk_coverage.yml
blob: 45bfddd4ff62731317d37835bdae2301f7021a1d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
name: CPP SDK coverage

on:
  pull_request_target:
    branches:
      - main
      - stable-*
      - prestable-*
      - stream-nb-*
      - dev-*
      - rc-*
      - q-stable-*
    types:
      - labeled

concurrency:
  group: cpp-sdk-coverage-${{ github.event.pull_request.number }}
  cancel-in-progress: true

jobs:
  cpp_sdk_coverage:
    if: github.event.label.name == 'sdk-coverage' && github.event.pull_request.state == 'open'
    runs-on: [self-hosted, auto-provisioned, build-preset-relwithdebinfo]
    name: CPP SDK coverage
    timeout-minutes: 480
    steps:
      - name: Check label sender is collaborator
        uses: actions/github-script@v8
        with:
          github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
          script: |
            const sender = context.payload.sender.login;
            try {
              await github.rest.repos.checkCollaborator({
                owner: context.repo.owner,
                repo: context.repo.repo,
                username: sender,
              });
            } catch (error) {
              if (!error.status || error.status != 404) throw error;
              core.setFailed(`Only repository collaborators can trigger CPP SDK coverage (sender: @${sender}).`);
            }

      - name: Verify PR is mergeable
        uses: actions/github-script@v8
        with:
          script: |
            let pr = context.payload.pull_request;
            if (pr.mergeable == null || !pr.merge_commit_sha) {
              const { data } = await github.rest.pulls.get({
                owner: context.repo.owner,
                repo: context.repo.repo,
                pull_number: pr.number,
              });
              pr = data;
            }
            if (!pr.mergeable || !pr.merge_commit_sha) {
              core.setFailed(
                'Unable to merge PR into the base branch. Please rebase or resolve conflicts and re-add the sdk-coverage label.'
              );
            }

      - uses: actions/checkout@v5
        with:
          ref: refs/pull/${{ github.event.pull_request.number }}/merge
          fetch-depth: 0

      - name: Setup ydb access
        uses: ./.github/actions/setup_ci_ydb_service_account_key_file_credentials
        with:
          ci_ydb_service_account_key_file_credentials: ${{ secrets.CI_YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS }}
          ydb_qa_config: ${{ vars.YDB_QA_CONFIG }}

      - name: Build, test, and check coverage
        uses: ./.github/actions/test_cpp_sdk_with_coverage
        with:
          bazel_remote_uri: ${{ vars.REMOTE_CACHE_URL_YA }}
          bazel_remote_username: ${{ secrets.REMOTE_CACHE_USERNAME }}
          bazel_remote_password: ${{ secrets.REMOTE_CACHE_PASSWORD }}