-
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Run Playwright and dotnet tests in parallel in CI (#856)
* Run Playwright and dotnet tests in parallel in CI * Job names reflect dotnet or Playwright tests * Move inputs.run-playwright test to job * Add optional run-dotnet input, like run-playwright * Switch to Mercurial 6 as default --------- Co-authored-by: Kevin Hahn <[email protected]>
- Loading branch information
Showing
1 changed file
with
89 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,10 +12,15 @@ on: | |
required: true | ||
type: string | ||
hg-version: | ||
description: 'The version of hg to test (3 or 6, default 3)' | ||
description: 'The version of hg to test (3 or 6, default 6)' | ||
required: false | ||
default: '3' | ||
default: '6' | ||
type: string | ||
run-dotnet: | ||
description: 'Whether to run dotnet tests' | ||
required: false | ||
default: true | ||
type: boolean | ||
run-playwright: | ||
description: 'Whether to run Playwright tests' | ||
required: false | ||
|
@@ -32,20 +37,31 @@ on: | |
required: true | ||
type: string | ||
hg-version: | ||
description: 'The version of hg to test (3 or 6, default 3)' | ||
description: 'The version of hg to test (3 or 6, default 6)' | ||
required: false | ||
default: '3' | ||
default: '6' | ||
type: string | ||
run-dotnet: | ||
description: 'Whether to run dotnet tests' | ||
required: false | ||
default: true | ||
type: boolean | ||
run-playwright: | ||
description: 'Whether to run Playwright tests' | ||
required: false | ||
default: true | ||
type: boolean | ||
|
||
# TODO: Set up caching for /home/runner/.cache/ms-playwright | ||
# TODO: Ditto for /home/runner/.pnpm-store/v3 | ||
# TODO: Ditto for /home/runner/.nuget/packages | ||
# TODO: Ditto for /var/cache/apt/archives/ | ||
|
||
jobs: | ||
test: | ||
dotnet-test: | ||
if: ${{ inputs.run-dotnet }} | ||
timeout-minutes: 120 | ||
name: Test ${{ inputs.runs-on }} for Mercurial ${{ inputs.hg-version }} on ${{ inputs.environment }} | ||
name: Dotnet tests on ${{ inputs.runs-on }} for Mercurial ${{ inputs.hg-version }} on ${{ inputs.environment }} | ||
permissions: | ||
checks: write | ||
environment: | ||
|
@@ -68,23 +84,6 @@ jobs: | |
sudo apt-get install -f | ||
rm powershell_7.4.1-1.deb_amd64.deb | ||
pwsh #validate that powershell installed correctly | ||
# First we need to setup Node... | ||
- uses: actions/setup-node@v4 | ||
if: ${{ inputs.run-playwright }} | ||
with: | ||
node-version-file: 'frontend/package.json' | ||
# Then we can set up pnpm... | ||
- uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d # v3.0.0 | ||
if: ${{ inputs.run-playwright }} | ||
with: | ||
package_json_file: 'frontend/package.json' | ||
# Then we can have Noede set up package caching | ||
- uses: actions/setup-node@v4 | ||
if: ${{ inputs.run-playwright }} | ||
with: | ||
node-version-file: 'frontend/package.json' | ||
cache: 'pnpm' | ||
cache-dependency-path: 'frontend/pnpm-lock.yaml' | ||
- uses: actions/setup-dotnet@v4 | ||
env: | ||
DOTNET_INSTALL_DIR: ${{ inputs.runs-on == 'self-hosted' && '/opt/hostedtoolcache/dotnet' || '' }} #poor man's conditional | ||
|
@@ -104,66 +103,102 @@ jobs: | |
- name: Dotnet build | ||
# limit cpu count for self-hosted due to memory constraints | ||
run: dotnet build ${{ inputs.runs-on == 'self-hosted' && '-maxcpucount:2' || '' }} | ||
# TODO: Set up caching for /home/runner/.cache/ms-playwright so this doesn't take as long | ||
# TODO: Ditto for /home/runner/.pnpm-store/v3 | ||
# TODO: Ditto for /home/runner/.nuget/packages | ||
# TODO: Ditto for /var/cache/apt/archives/ | ||
- name: Playwright setup | ||
working-directory: frontend | ||
if: ${{ inputs.run-playwright }} | ||
run: pnpm install && pnpm pretest | ||
- name: Set up Playwright dependencies | ||
working-directory: frontend | ||
if: ${{ inputs.run-playwright && inputs.runs-on == 'self-hosted' }} | ||
run: sudo pnpm exec playwright install-deps | ||
- name: Build for tests | ||
run: "dotnet build /p:MercurialVersion=$MERCURIAL_VERSION" | ||
env: | ||
MERCURIAL_VERSION: ${{ inputs.hg-version }} | ||
|
||
- name: Integration tests (Playwright) | ||
if: ${{ inputs.run-playwright }} | ||
- name: Integration tests (.NET) | ||
env: | ||
TEST_SERVER_HOSTNAME: ${{ vars.TEST_SERVER_HOSTNAME }} | ||
# this is not a typo, we need to use the lf domain because it has a cert that hg will validate | ||
TEST_STANDARD_HG_HOSTNAME: ${{ vars.TEST_STANDARD_HG_HOSTNAME }} | ||
TEST_RESUMABLE_HG_HOSTNAME: ${{ vars.TEST_RESUMABLE_HG_HOSTNAME }} | ||
TEST_PROJECT_CODE: 'sena-3' | ||
TEST_DEFAULT_PASSWORD: ${{ secrets.TEST_USER_PASSWORD }} | ||
working-directory: frontend | ||
run: pnpm test | ||
# 1.5gb max heap size, must be in hex https://learn.microsoft.com/en-us/dotnet/core/runtime-config/garbage-collector#heap-limit | ||
# the self hosted runner only has 2gb so this should prevent it from running out of memory | ||
DOTNET_GCHeapHardLimit: '0x2CB417800' | ||
|
||
- name: Integration tests (.NET) | ||
run: dotnet test --output ./bin --logger trx --results-directory ./test-results --filter Category=Integration | ||
- name: Publish unit test results | ||
uses: EnricoMi/publish-unit-test-result-action/composite@8885e273a4343cd7b48eaa72428dea0c3067ea98 # v2.14.0 | ||
if: ${{ always() && !env.act }} | ||
with: | ||
check_name: Integration Tests ${{ inputs.runs-on }} for Mercurial ${{ inputs.hg-version }} | ||
files: ./test-results/*.trx | ||
- name: Publish results to testspace | ||
if: always() | ||
run: testspace "[.Net Integration/${{ inputs.runs-on }} HG ${{ inputs.hg-version }}]./test-results/*.trx" | ||
|
||
playwright-test: | ||
if: ${{ inputs.run-playwright }} | ||
timeout-minutes: 120 | ||
name: Playwright tests on ${{ inputs.runs-on }} for Mercurial ${{ inputs.hg-version }} on ${{ inputs.environment }} | ||
permissions: | ||
checks: write | ||
environment: | ||
name: ${{ inputs.environment }} | ||
runs-on: ${{ inputs.runs-on }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- uses: testspace-com/[email protected] | ||
with: | ||
domain: ${{ github.repository_owner }} | ||
- name: Setup self-hosted dependencies | ||
if: ${{ inputs.runs-on == 'self-hosted' }} | ||
run: | | ||
sudo apt-get update | ||
sudo apt-get install -y p7zip-full iputils-ping python3-venv wget zlib1g-dev libssl-dev #needed by setup python | ||
wget -q https://github.com/PowerShell/PowerShell/releases/download/v7.4.1/powershell_7.4.1-1.deb_amd64.deb | ||
sudo dpkg -i powershell_7.4.1-1.deb_amd64.deb | ||
sudo apt-get install -f | ||
rm powershell_7.4.1-1.deb_amd64.deb | ||
pwsh #validate that powershell installed correctly | ||
# First we need to setup Node... | ||
- uses: actions/setup-node@v4 | ||
with: | ||
node-version-file: 'frontend/package.json' | ||
# Then we can set up pnpm... | ||
- uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d # v3.0.0 | ||
with: | ||
package_json_file: 'frontend/package.json' | ||
# Then we can have Node set up package caching | ||
- uses: actions/setup-node@v4 | ||
with: | ||
node-version-file: 'frontend/package.json' | ||
cache: 'pnpm' | ||
cache-dependency-path: 'frontend/pnpm-lock.yaml' | ||
- name: Playwright setup | ||
working-directory: frontend | ||
run: pnpm install && pnpm pretest | ||
- name: Set up Playwright dependencies | ||
working-directory: frontend | ||
if: ${{ inputs.runs-on == 'self-hosted' }} | ||
run: sudo pnpm exec playwright install-deps | ||
|
||
- name: Integration tests (Playwright) | ||
env: | ||
TEST_SERVER_HOSTNAME: ${{ vars.TEST_SERVER_HOSTNAME }} | ||
# this is not a typo, we need to use the lf domain because it has a cert that hg will validate | ||
TEST_STANDARD_HG_HOSTNAME: ${{ vars.TEST_STANDARD_HG_HOSTNAME }} | ||
TEST_RESUMABLE_HG_HOSTNAME: ${{ vars.TEST_RESUMABLE_HG_HOSTNAME }} | ||
TEST_PROJECT_CODE: 'sena-3' | ||
TEST_DEFAULT_PASSWORD: ${{ secrets.TEST_USER_PASSWORD }} | ||
# 1.5gb max heap size, must be in hex https://learn.microsoft.com/en-us/dotnet/core/runtime-config/garbage-collector#heap-limit | ||
# the self hosted runner only has 2gb so this should prevent it from running out of memory | ||
DOTNET_GCHeapHardLimit: '0x2CB417800' | ||
|
||
run: dotnet test --output ./bin --logger trx --results-directory ./test-results --filter Category=Integration | ||
|
||
working-directory: frontend | ||
run: pnpm test | ||
- name: Password protect Playwright traces | ||
id: password_protect_test_results | ||
if: ${{ always() && inputs.run-playwright }} | ||
if: ${{ always() }} | ||
shell: bash | ||
env: | ||
ZIP_PASSWORD: ${{ secrets.TEST_USER_PASSWORD }} | ||
run: 7z a ./playwright-traces.7z -mx=0 -mmt=off ./frontend/test-results -p"$ZIP_PASSWORD" | ||
- name: Publish unit test results | ||
uses: EnricoMi/publish-unit-test-result-action/composite@8885e273a4343cd7b48eaa72428dea0c3067ea98 # v2.14.0 | ||
if: ${{ always() && !env.act }} | ||
with: | ||
check_name: Integration Tests ${{ inputs.runs-on }} for Mercurial ${{ inputs.hg-version }} | ||
files: ./test-results/*.trx | ||
- name: Publish results to testspace | ||
if: always() | ||
run: testspace "[.Net Integration/${{ inputs.runs-on }} HG ${{ inputs.hg-version }}]./test-results/*.trx" "[Playwright]./frontend/test-results/*.xml" | ||
run: testspace "[Playwright]./frontend/test-results/*.xml" | ||
- name: Upload playwright results | ||
if: ${{ always() && steps.password_protect_test_results.outcome == 'success' }} | ||
uses: actions/upload-artifact@v4 | ||
|