From 9b38435d43c6a46ef0b665384a4b5c61a9652e89 Mon Sep 17 00:00:00 2001 From: Rashid N H M <95639609+rashidnhm@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:24:15 -0400 Subject: [PATCH 1/4] Added ability to run linux workflows on large runners --- .github/workflows/benchmarks.yml | 1 - .../workflows/determine-workflow-runner.yml | 49 +++++++++++++++++++ .github/workflows/docs.yml | 10 +++- .github/workflows/format.yml | 19 ++++--- .github/workflows/tests.yml | 11 ++++- .github/workflows/unit-test.yml | 10 +++- 6 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/determine-workflow-runner.yml diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 0ced2db6f5f..1b2507244bf 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -1,6 +1,5 @@ name: Benchmarks on: - pull_request: workflow_call: inputs: ref_branch: diff --git a/.github/workflows/determine-workflow-runner.yml b/.github/workflows/determine-workflow-runner.yml new file mode 100644 index 00000000000..48c512707dc --- /dev/null +++ b/.github/workflows/determine-workflow-runner.yml @@ -0,0 +1,49 @@ +name: Determine Workflow Runner group + +on: + workflow_call: + inputs: + default_runner: + description: The runner type that is used by the calling workflow by default + required: true + type: string + outputs: + runner_group: + description: The runner all subsequent jobs within the calling workflow should run on + value: ${{ jobs.determine_workflow_runner.outputs.runner_group || inputs.default_runner }} + +env: + LARGE_RUNNER_GROUP_NAME: pl-4-core-large-runner + +jobs: + determine_workflow_runner: + runs-on: >- + ${{ + ( + github.event_name == 'pull_request' + && contains(github.event.pull_request.labels.*.name, 'urgent') + ) && 'pl-4-core-large-runner' || 'ubuntu-latest' + }} + + outputs: + runner_group: ${{ steps.runner_group.outputs.runner_group }} + + steps: + - name: Output Runner Group name + if: >- + ${{ + github.event_name == 'pull_request' + && startsWith(inputs.default_runner, 'ubuntu') + }} + id: runner_group + env: + # We are not able to use \d to check numeric values as bash does not allow them (not POSIX compliant) + RC_BRANCH_FORMAT_REGEX: v[0-9]+\.[0-9]+\.[0-9]+_rc[0-9]? + REPO_FULL_NAME: PennyLaneAI/pennylane + run: | + if [[ '${{ contains(github.event.pull_request.labels.*.name, 'urgent') }}' == 'true' || ('${{ github.event.pull_request.head.repo.full_name }}' == "$REPO_FULL_NAME" && '${{ github.event.pull_request.head.ref }}' =~ $RC_BRANCH_FORMAT_REGEX) ]]; then + echo "This job requires usage of the large runner group '$LARGE_RUNNER_GROUP_NAME'"; + echo "runner_group=$LARGE_RUNNER_GROUP_NAME" >> $GITHUB_OUTPUT + else + echo "This job does not require usage of large runners ..."; + fi \ No newline at end of file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 772be785250..20235c26585 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -24,11 +24,19 @@ on: - ready_for_review jobs: + determine_runner: + if: github.event.pull_request.draft == false + name: Determine runner type to use + uses: ./.github/workflows/determine-workflow-runner.yml + with: + default_runner: ubuntu-latest + sphinx: if: github.event.pull_request.draft == false env: DEPS_BRANCH: bot/stable-deps-update - runs-on: ubuntu-latest + needs: [determine_runner] + runs-on: ${{ needs.determine_runner.outputs.runner_group }} steps: - uses: actions/checkout@v3 - uses: PennyLaneAI/sphinx-action@master diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index ba01f6cace0..89adee613fa 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -7,17 +7,24 @@ on: - synchronize - ready_for_review +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: + determine_runner: + if: github.event.pull_request.draft == false + name: Determine runner type to use + uses: ./.github/workflows/determine-workflow-runner.yml + with: + default_runner: ubuntu-latest + black-pylint: if: github.event.pull_request.draft == false - runs-on: ubuntu-latest + needs: [determine_runner] + runs-on: ${{ needs.determine_runner.outputs.runner_group }} steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.11.0 - with: - access_token: ${{ github.token }} - - name: Set up Python uses: actions/setup-python@v2 with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b214c0d4a62..30aca7823b6 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,6 +21,13 @@ env: DEPS_BRANCH: bot/stable-deps-update jobs: + determine_runner: + if: github.event.pull_request.draft == false + name: Determine runner type to use + uses: ./.github/workflows/determine-workflow-runner.yml + with: + default_runner: ubuntu-latest + tests: if: github.event.pull_request.draft == false uses: ./.github/workflows/interface-unit-tests.yml @@ -41,8 +48,8 @@ jobs: pytest_store_durations: false upload-stable-deps: - needs: tests - runs-on: ubuntu-latest + needs: [tests, determine_runner] + runs-on: ${{ needs.determine_runner.outputs.runner_group }} if: ${{ github.event_name == 'push' }} steps: - name: Checkout diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 8e11cf86473..f9c2ff7ab5a 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -116,9 +116,17 @@ on: default: "False" jobs: + determine_runner: + if: github.event.pull_request.draft == false + name: Determine runner type to use + uses: ./.github/workflows/determine-workflow-runner.yml + with: + default_runner: ubuntu-latest + test: name: ${{ inputs.job_name }} - runs-on: ubuntu-latest + needs: [determine_runner] + runs-on: ${{ needs.determine_runner.outputs.runner }} steps: - name: Checkout From 8125f8bb0df4e9272e6a2a192bbb73595f24986f Mon Sep 17 00:00:00 2001 From: Rashid N H M <95639609+rashidnhm@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:22:00 -0400 Subject: [PATCH 2/4] Trigger CI From b030d4a8ccf39cd72881c0546e4feeae7c8c029c Mon Sep 17 00:00:00 2001 From: Rashid N H M <95639609+rashidnhm@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:02:40 -0400 Subject: [PATCH 3/4] Move determine_runner job to interface-unit-test workflow (have it run once vs many times) --- .../workflows/determine-workflow-runner.yml | 2 +- .github/workflows/interface-unit-tests.yml | 31 +++++++++++++++++++ .github/workflows/unit-test.yml | 15 ++++----- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/.github/workflows/determine-workflow-runner.yml b/.github/workflows/determine-workflow-runner.yml index 48c512707dc..2126d7e01f4 100644 --- a/.github/workflows/determine-workflow-runner.yml +++ b/.github/workflows/determine-workflow-runner.yml @@ -38,7 +38,7 @@ jobs: id: runner_group env: # We are not able to use \d to check numeric values as bash does not allow them (not POSIX compliant) - RC_BRANCH_FORMAT_REGEX: v[0-9]+\.[0-9]+\.[0-9]+_rc[0-9]? + RC_BRANCH_FORMAT_REGEX: v[0-9]+\.[0-9]+\.[0-9]+-rc[0-9]? REPO_FULL_NAME: PennyLaneAI/pennylane run: | if [[ '${{ contains(github.event.pull_request.labels.*.name, 'urgent') }}' == 'true' || ('${{ github.event.pull_request.head.repo.full_name }}' == "$REPO_FULL_NAME" && '${{ github.event.pull_request.head.ref }}' =~ $RC_BRANCH_FORMAT_REGEX) ]]; then diff --git a/.github/workflows/interface-unit-tests.yml b/.github/workflows/interface-unit-tests.yml index 601e762fc92..b1b7aceb413 100644 --- a/.github/workflows/interface-unit-tests.yml +++ b/.github/workflows/interface-unit-tests.yml @@ -49,6 +49,13 @@ on: default: false jobs: + determine_runner: + if: github.event.pull_request.draft == false + name: Determine runner type to use + uses: ./.github/workflows/determine-workflow-runner.yml + with: + default_runner: ubuntu-latest + setup-ci-load: runs-on: ubuntu-latest @@ -140,6 +147,7 @@ jobs: torch-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -156,6 +164,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: torch-tests (${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: core-interfaces-coverage-torch-${{ matrix.python-version }} python_version: ${{ matrix.python-version }} @@ -173,6 +182,7 @@ jobs: autograd-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -189,6 +199,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: autograd-tests (${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: core-interfaces-coverage-autograd-${{ matrix.python-version }} python_version: ${{ matrix.python-version }} @@ -205,6 +216,7 @@ jobs: tf-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -222,6 +234,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: tf-tests (${{ matrix.group }}, ${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: core-interfaces-coverage-tf-${{ matrix.python-version }}-${{ matrix.group }} python_version: ${{ matrix.python-version }} @@ -243,6 +256,7 @@ jobs: jax-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -260,6 +274,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: jax-tests (${{ matrix.group }}, ${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: core-interfaces-coverage-jax-${{ matrix.python-version }}-${{ matrix.group }} python_version: ${{ matrix.python-version }} @@ -281,6 +296,7 @@ jobs: core-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -298,6 +314,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: core-tests (${{ matrix.group }}, ${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: core-interfaces-coverage-core-${{ matrix.python-version }}-${{ matrix.group }} python_version: ${{ matrix.python-version }} @@ -319,6 +336,7 @@ jobs: all-interfaces-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -335,6 +353,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: all-interfaces-tests (${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: all-interfaces-coverage python_version: ${{ matrix.python-version }} @@ -352,6 +371,7 @@ jobs: external-libraries-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -368,6 +388,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: external-libraries-tests (${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: external-libraries-tests-coverage python_version: ${{ matrix.python-version }} @@ -391,6 +412,7 @@ jobs: qcut-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -407,6 +429,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: qcut-tests (${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: qcut-coverage python_version: ${{ matrix.python-version }} @@ -424,6 +447,7 @@ jobs: qchem-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -440,6 +464,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: qchem-tests (${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: qchem-coverage python_version: ${{ matrix.python-version }} @@ -456,6 +481,7 @@ jobs: gradients-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -475,6 +501,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: gradients-tests (${{ matrix.config.suite }}, ${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: gradients-${{ matrix.config.suite }}-coverage python_version: ${{ matrix.python-version }} @@ -491,6 +518,7 @@ jobs: data-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -507,6 +535,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: data-tests (${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: data-coverage-${{ matrix.python-version }} python_version: ${{ matrix.python-version }} @@ -524,6 +553,7 @@ jobs: device-tests: needs: - setup-ci-load + - determine_runner strategy: max-parallel: >- ${{ @@ -547,6 +577,7 @@ jobs: uses: ./.github/workflows/unit-test.yml with: job_name: device-tests (${{ matrix.config.device }}, ${{ matrix.config.shots }}, ${{ matrix.python-version }}) + job_runner_name: ${{ needs.determine_runner.outputs.runner_group }} branch: ${{ inputs.branch }} coverage_artifact_name: devices-coverage-${{ matrix.config.device }}-${{ matrix.config.shots }} python_version: ${{ matrix.python-version }} diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index f9c2ff7ab5a..c1206d5a830 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -14,6 +14,11 @@ on: description: Name of the artifact file that will contain the coverage file for codevoc required: true type: string + job_runner_name: + description: The name of the runner to use for the job + required: false + type: string + default: 'ubuntu-latest' checkout_fetch_depth: description: How many commits to checkout from HEAD of branch passed required: false @@ -116,17 +121,9 @@ on: default: "False" jobs: - determine_runner: - if: github.event.pull_request.draft == false - name: Determine runner type to use - uses: ./.github/workflows/determine-workflow-runner.yml - with: - default_runner: ubuntu-latest - test: name: ${{ inputs.job_name }} - needs: [determine_runner] - runs-on: ${{ needs.determine_runner.outputs.runner }} + runs-on: ${{ inputs.job_runner_name }} steps: - name: Checkout From 18fd83e3c927743717115c150ad476cd86fc6542 Mon Sep 17 00:00:00 2001 From: Rashid N H M <95639609+rashidnhm@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:58:47 -0400 Subject: [PATCH 4/4] Remove usage of large runners on scheduled job --- .github/workflows/tests.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 30aca7823b6..11ef46561b7 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,13 +21,6 @@ env: DEPS_BRANCH: bot/stable-deps-update jobs: - determine_runner: - if: github.event.pull_request.draft == false - name: Determine runner type to use - uses: ./.github/workflows/determine-workflow-runner.yml - with: - default_runner: ubuntu-latest - tests: if: github.event.pull_request.draft == false uses: ./.github/workflows/interface-unit-tests.yml @@ -48,9 +41,9 @@ jobs: pytest_store_durations: false upload-stable-deps: - needs: [tests, determine_runner] - runs-on: ${{ needs.determine_runner.outputs.runner_group }} - if: ${{ github.event_name == 'push' }} + needs: [tests] + runs-on: ubuntu-latest + if: ${{ github.event_name == 'schedule' }} steps: - name: Checkout uses: actions/checkout@v3