name: Ya-Build-and-Test-On-demand on: workflow_dispatch: inputs: image: type: string default: fd8earpjmhevh8h6ug5o description: "VM image" build_target: type: string default: "ydb/" description: "limit build and test to specific target" build_preset: type: choice default: "relwithdebinfo" description: "Build preset" options: - relwithdebinfo - release-asan - release-tsan test_size: type: choice default: "small,medium,large" description: "test size to run" options: - small - small,medium - small,medium,large test_type: type: choice default: "unittest,py3test,py2test,pytest" description: "type of tests to run" options: - unittest - py3test,py2test,pytest - unittest,py3test,py2test,pytest test_threads: type: string default: "28" description: "Test threads count" link_threads: type: string default: "8" description: "link threads count" run_build: type: boolean default: true description: "run build" run_tests: type: boolean default: true description: "run tests" workflow_call: inputs: image: type: string default: fd8earpjmhevh8h6ug5o build_target: type: string default: "ydb/" build_preset: type: string default: "relwithdebinfo" test_size: type: string default: "small,medium,large" test_type: type: string default: "unittest,py3test,py2test,pytest" run_build: type: boolean default: true run_tests: type: boolean default: true test_threads: type: string default: 28 description: "Test threads count" link_threads: type: string default: 8 description: "link threads count" 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: 64 memory: 192GB 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: uses: ./.github/workflows/build_and_test_ya.yml needs: - provide-runner - prepare-vm with: runner_kind: self-hosted runner_label: ${{ needs.provide-runner.outputs.label }} build_target: ${{ inputs.build_target }} build_preset: ${{ inputs.build_preset }} run_build: ${{ inputs.run_build }} run_tests: ${{ inputs.run_tests }} test_size: ${{ inputs.test_size }} test_type: ${{ inputs.test_type }} link_threads: ${{ inputs.link_threads }} test_threads: ${{ inputs.test_threads }} secrets: inherit 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 }}