aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/build_and_test_ondemand.yml
blob: 5bd007df9a3a221fbf6ee1dbff2c0e183ae2254d (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
name: Build-and-Test-On-demand

on:
  workflow_call:
    inputs:
      sanitizer:
        required: false
        type: string
      test_label_regexp:
        required: false
        type: string
      image:
        type: string
        required: false
        default: fd8earpjmhevh8h6ug5o
      run_unit_tests:
        type: boolean
        default: true
      run_functional_tests:
        type: boolean
        default: true
  workflow_dispatch:
    inputs: 
      sanitizer:
        required: false
        type: string
      test_label_regexp:
        required: false
        type: string
      image:
        type: string
        required: false
        default: fd8earpjmhevh8h6ug5o
      run_unit_tests:
        type: boolean
        default: true
      run_functional_tests:
        type: boolean
        default: true
    
jobs:

  provide-runner:
    name: Start self-hosted YC runner
    timeout-minutes: 5
    runs-on: ubuntu-latest
    outputs:
      label: ${{steps.start-yc-runner.outputs.label}}
      instance-id: ${{steps.start-yc-runner.outputs.instance-id}}
    steps:
      - name: Start YC runner
        id: start-yc-runner
        uses: yc-actions/yc-github-runner@v1
        with:
          mode: start
          yc-sa-json-credentials: ${{ secrets.YC_SA_JSON_CREDENTIALS }}
          github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
          folder-id: ${{secrets.YC_FOLDER}}
          image-id: ${{inputs.image}}
          disk-size: ${{vars.DISK_SIZE && vars.DISK_SIZE || '1023GB'}}
          disk-type: network-ssd-nonreplicated
          cores: 32
          memory: 128GB
          core-fraction: 100
          zone-id: ru-central1-b
          subnet-id: ${{secrets.YC_SUBNET}}

  prepare-vm:
    name: Prepare runner
    needs: provide-runner
    runs-on: [ self-hosted, "${{ needs.provide-runner.outputs.label }}" ]
    steps:
      - name: Checkout PR
        uses: actions/checkout@v3
        if: github.event.pull_request.head.sha != ''
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Checkout
        uses: actions/checkout@v3
        if: github.event.pull_request.head.sha == ''
      - name: Prepare VM
        uses: ./.github/actions/prepare_vm

  main:
    name: Build and test
    needs: 
    - provide-runner
    - prepare-vm
    runs-on: [ self-hosted, "${{ needs.provide-runner.outputs.label }}" ]
    steps:
    - name: Checkout PR
      uses: actions/checkout@v3
      if: github.event.pull_request.head.sha != ''
      with:
          ref: ${{ github.event.pull_request.head.sha }}
    - name: Checkout
      uses: actions/checkout@v3
      if: github.event.pull_request.head.sha == ''
    - name: Build
      id: build
      uses: ./.github/actions/build
      with: 
        sanitizer: ${{ inputs.sanitizer }}
        ccache_remote_path: ${{ vars.REMOTE_CACHE_URL && format('http://{0}{1}', secrets.REMOTE_CACHE_AUTH, vars.REMOTE_CACHE_URL) || ''}}
    - name: Run tests
      uses: ./.github/actions/test
      with:
        log_suffix: ${{format('{0}{1}', 'X64', inputs.sanitizer)}}
        test_label_regexp: ${{ inputs.test_label_regexp }}
        aws_key_id: ${{secrets.AWS_KEY_ID}}
        aws_key_value: ${{secrets.AWS_KEY_VALUE}}
        aws_bucket: ${{vars.AWS_BUCKET}}
        aws_endpoint: ${{vars.AWS_ENDPOINT}}
        testman_token: ${{secrets.TESTMO_TOKEN}}
        testman_url: ${{vars.TESTMO_URL}}
        testman_project_id: ${{vars.TESTMO_PROJECT_ID}}
        run_unit_tests: ${{inputs.run_unit_tests}}
        run_functional_tests: ${{inputs.run_functional_tests}}
  release-runner:
    name: Release self-hosted YC runner if provided on-demand
    needs:
      - provide-runner # required to get output from the start-runner job
      - main # required to wait when the main job is done
    runs-on: ubuntu-latest
    if: always()
    steps:
      - name: Stop YC runner
        uses: yc-actions/yc-github-runner@v1
        with:
          mode: stop
          yc-sa-json-credentials: ${{ secrets.YC_SA_JSON_CREDENTIALS }}
          github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
          label: ${{ needs.provide-runner.outputs.label }}
          instance-id: ${{ needs.provide-runner.outputs.instance-id }}