From c2b676555c954a693de1e7dbebcbf5f7ea6ddfd6 Mon Sep 17 00:00:00 2001 From: Daniel Marbach Date: Thu, 8 Oct 2026 11:03:10 +0200 Subject: [PATCH 1/5] Try run-tests-action with timing-based ordering Pins Particular/run-tests-action to a branch commit that starts the slowest assemblies first using durations cached from earlier runs. The cloud database legs get their own cache key because legs with the same provider run the same projects. --- .github/workflows/ci.yml | 2 +- .github/workflows/cloud-database-tests.yml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f9632f42a..7e547d9fb9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -185,7 +185,7 @@ jobs: azure-credentials: ${{ secrets.AZURE_ACI_CREDENTIALS }} tag: ServiceControl - name: Run tests - uses: Particular/run-tests-action@v1.9.0 + uses: Particular/run-tests-action@cbc16079167d28d764dd096654d8ddea5010eaa8 # parallel-auto-and-timing-order, temporary with: projects: ${{ steps.select.outputs.test-projects }} max-parallel: ${{ matrix.max-parallel || 1 }} diff --git a/.github/workflows/cloud-database-tests.yml b/.github/workflows/cloud-database-tests.yml index db780d16e4..d0af8267c1 100644 --- a/.github/workflows/cloud-database-tests.yml +++ b/.github/workflows/cloud-database-tests.yml @@ -136,10 +136,12 @@ jobs: - name: Wait for build wait: build - name: Run tests - uses: Particular/run-tests-action@v1.9.0 + uses: Particular/run-tests-action@cbc16079167d28d764dd096654d8ddea5010eaa8 # parallel-auto-and-timing-order, temporary with: projects: ${{ env.PERSISTENCE_PROJECT }};${{ env.ACCEPTANCE_PROJECT }};${{ env.AUDIT_PERSISTENCE_PROJECT }};${{ env.AUDIT_ACCEPTANCE_PROJECT }} max-parallel: 2 + # Targets using the same provider run the same projects, so the project list alone cannot tell their durations apart. + timings-cache-key: ${{ matrix.target }} env: ServiceControl_TESTS_FILTER: ${{ matrix.provider }} PARTICULARSOFTWARE_LICENSE: ${{ secrets.LICENSETEXT }} From 87199c2bcc18cb6191ed355942c509619110c289 Mon Sep 17 00:00:00 2001 From: Daniel Marbach Date: Thu, 8 Oct 2026 11:06:54 +0200 Subject: [PATCH 2/5] Pin run-tests-action to the version that averages recorded durations --- .github/workflows/ci.yml | 2 +- .github/workflows/cloud-database-tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7e547d9fb9..1a83527ff9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -185,7 +185,7 @@ jobs: azure-credentials: ${{ secrets.AZURE_ACI_CREDENTIALS }} tag: ServiceControl - name: Run tests - uses: Particular/run-tests-action@cbc16079167d28d764dd096654d8ddea5010eaa8 # parallel-auto-and-timing-order, temporary + uses: Particular/run-tests-action@7b44ea49c36daa078a5ea6372996c623c6017391 # parallel-auto-and-timing-order, temporary with: projects: ${{ steps.select.outputs.test-projects }} max-parallel: ${{ matrix.max-parallel || 1 }} diff --git a/.github/workflows/cloud-database-tests.yml b/.github/workflows/cloud-database-tests.yml index d0af8267c1..fb25e7ed8e 100644 --- a/.github/workflows/cloud-database-tests.yml +++ b/.github/workflows/cloud-database-tests.yml @@ -136,7 +136,7 @@ jobs: - name: Wait for build wait: build - name: Run tests - uses: Particular/run-tests-action@cbc16079167d28d764dd096654d8ddea5010eaa8 # parallel-auto-and-timing-order, temporary + uses: Particular/run-tests-action@7b44ea49c36daa078a5ea6372996c623c6017391 # parallel-auto-and-timing-order, temporary with: projects: ${{ env.PERSISTENCE_PROJECT }};${{ env.ACCEPTANCE_PROJECT }};${{ env.AUDIT_PERSISTENCE_PROJECT }};${{ env.AUDIT_ACCEPTANCE_PROJECT }} max-parallel: 2 From 96e3c0d1856f99ad81eb329a75d96066f4acd1ed Mon Sep 17 00:00:00 2001 From: Daniel Marbach Date: Thu, 8 Oct 2026 11:20:50 +0200 Subject: [PATCH 3/5] Run CI again with cached timings From 70f685b8e87e007d3a6ecf6e29e364e319ab50f7 Mon Sep 17 00:00:00 2001 From: Daniel Marbach Date: Thu, 8 Oct 2026 11:40:11 +0200 Subject: [PATCH 4/5] Pin run-tests-action to the version that keeps the last 10 durations --- .github/workflows/ci.yml | 2 +- .github/workflows/cloud-database-tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a83527ff9..a6254bbaf3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -185,7 +185,7 @@ jobs: azure-credentials: ${{ secrets.AZURE_ACI_CREDENTIALS }} tag: ServiceControl - name: Run tests - uses: Particular/run-tests-action@7b44ea49c36daa078a5ea6372996c623c6017391 # parallel-auto-and-timing-order, temporary + uses: Particular/run-tests-action@1c9082d0d2c9b07de57656ab138ba75914ad303a # parallel-auto-and-timing-order, temporary with: projects: ${{ steps.select.outputs.test-projects }} max-parallel: ${{ matrix.max-parallel || 1 }} diff --git a/.github/workflows/cloud-database-tests.yml b/.github/workflows/cloud-database-tests.yml index fb25e7ed8e..7aa7f8e502 100644 --- a/.github/workflows/cloud-database-tests.yml +++ b/.github/workflows/cloud-database-tests.yml @@ -136,7 +136,7 @@ jobs: - name: Wait for build wait: build - name: Run tests - uses: Particular/run-tests-action@7b44ea49c36daa078a5ea6372996c623c6017391 # parallel-auto-and-timing-order, temporary + uses: Particular/run-tests-action@1c9082d0d2c9b07de57656ab138ba75914ad303a # parallel-auto-and-timing-order, temporary with: projects: ${{ env.PERSISTENCE_PROJECT }};${{ env.ACCEPTANCE_PROJECT }};${{ env.AUDIT_PERSISTENCE_PROJECT }};${{ env.AUDIT_ACCEPTANCE_PROJECT }} max-parallel: 2 From 0df1d250f6911b21bd5f0d2d014f9af6564d1f22 Mon Sep 17 00:00:00 2001 From: Daniel Marbach Date: Thu, 8 Oct 2026 12:21:30 +0200 Subject: [PATCH 5/5] Experiment: keep alphabetical order for the SqlServer and PostgreSql categories --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6254bbaf3..52c30378ec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -189,6 +189,8 @@ jobs: with: projects: ${{ steps.select.outputs.test-projects }} max-parallel: ${{ matrix.max-parallel || 1 }} + # Experiment: these share one database server, so starting the slowest assemblies together may slow them all down. + cache-timings: ${{ !contains(fromJSON('["SqlServer", "PostgreSql"]'), matrix.test-category) }} env: ServiceControl_TESTS_FILTER: ${{ matrix.test-category }} PARTICULARSOFTWARE_LICENSE: ${{ secrets.LICENSETEXT }}