Skip to content

test: Run test projects parallel #2944

test: Run test projects parallel

test: Run test projects parallel #2944

Workflow file for this run

name: Continuous Integration & Delivery
on:
push:
branches: [ develop, main, bugfix/*, feature/* ]
pull_request:
branches: [ develop, main ]
workflow_dispatch:
inputs:
publish_nuget_package:
description: Publish a new NuGet package?
required: false
type: boolean
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.sha }}
cancel-in-progress: true
env:
DOTNET_CLI_TELEMETRY_OPTOUT: true
DOTNET_NOLOGO: true
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
DOTNET_USE_POLLING_FILE_WATCHER: true
NUGET_XMLDOC_MODE: skip
TZ: CET # https://stackoverflow.com/q/53510011
jobs:
test1:
strategy:
max-parallel: 2
matrix:
projects: [
{ name: "Testcontainers.MongoDb", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.PostgreSql", runs-on: "ubuntu-22.04" },
# { name: "Testcontainers.PostgreSql", runs-on: "ubuntu-22.04" },
# { name: "Testcontainers.PostgreSql", runs-on: "ubuntu-22.04" },
]
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
runs-on: ${{ matrix.projects.runs-on }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
lfs: true
- name: Setup .NET
uses: actions/setup-dotnet@v4
- name: Restore .NET Tools
run: dotnet tool restore
- name: Restore NuGet Packages
run: dotnet cake --target=Restore-NuGet-Packages
- name: Run Build
run: dotnet cake --target=Build
- name: Run Tests
run: dotnet cake --target=Tests --test-filter=FullyQualifiedName~${{ matrix.projects.name }}
- name: Upload Test And Coverage Results
uses: actions/upload-artifact@v4
if: always()
with:
name: ${{ matrix.projects.name }}.Coverage
path: test-results
test2:
needs: test1
runs-on: ubuntu-22.04
steps:
- name: Download Test And Coverage Results
uses: actions/download-artifact@v4
with:
pattern: '*.Coverage'
path: test-results
- name: Show test-results
run: ls -la test-results/
# build:
# strategy:
# fail-fast: false
# matrix:
# os: [ ubuntu-22.04, windows-2022 ]
# runs-on: ${{ matrix.os }}
# steps:
# - name: Checkout Repository
# uses: actions/checkout@v4
# with:
# lfs: true
# - name: Cache NuGet Packages
# uses: actions/cache@v4
# with:
# key: ${{ matrix.os }}-nuget-${{ hashFiles('Directory.Packages.props') }}
# path: ~/.nuget/packages
# # Our modules occupy too much disk space. The GitHub-hosted runners ran into the
# # error: "no space left on device." The pulled images are not cleaned up between
# # the test runs. One obvious approach is splitting the tests and running them on
# # multiple runners. However, we need to keep in mind that running too many
# # simultaneous builds has an impact on others as well. We observed that scheduled
# # Dependabot builds blocked others in the Testcontainers organization.
# - name: Free Disk Space
# uses: jlumbroso/[email protected]
# if: runner.os == 'Linux'
# with:
# tool-cache: true
# android: true
# dotnet: true
# haskell: true
# large-packages: true
# docker-images: true
# swap-storage: false
# - name: Setup .NET
# uses: actions/setup-dotnet@v4
# - name: Restore .NET Tools
# run: dotnet tool restore
# - name: Restore NuGet Packages
# run: dotnet cake --target=Restore-NuGet-Packages
# - name: Run Build
# run: dotnet cake --target=Build
# - name: Run Tests
# run: dotnet cake --target=Tests --test-filter=${{ startsWith(matrix.os, 'ubuntu') && 'FullyQualifiedName~Testcontainers' || 'DockerPlatform=Windows' }}
# - name: Upload Test And Coverage Results
# uses: actions/upload-artifact@v4
# if: always()
# with:
# name: ${{ matrix.os }}
# path: test-results
# publish:
# if: ${{ contains(fromJson('["develop", "main"]'), github.ref_name) }}
# needs: build
# environment: production
# runs-on: ubuntu-22.04
# permissions:
# contents: write
# pull-requests: read
# env:
# CODE_SIGNING_CERTIFICATE_BASE64: ${{ secrets.CODE_SIGNING_CERTIFICATE_BASE64 }}
# CODE_SIGNING_CERTIFICATE_PASSWORD: ${{ secrets.CODE_SIGNING_CERTIFICATE_PASSWORD }}
# FEED_SOURCE: https://api.nuget.org/v3/index.json
# FEED_API_KEY: ${{ secrets.FEED_API_KEY }}
# SONARCLOUD_URL: https://sonarcloud.io
# SONARCLOUD_ORGANIZATION: testcontainers
# SONARCLOUD_KEY: testcontainers_testcontainers-dotnet
# SONARCLOUD_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }}
# PUBLISH_NUGET_PACKAGE: ${{ inputs.publish_nuget_package }}
# steps:
# - name: Checkout Repository
# uses: actions/checkout@v4
# with:
# lfs: true
# fetch-depth: 0
# - name: Download Test And Coverage Results (ubuntu-22.04)
# uses: actions/download-artifact@v4
# with:
# name: ubuntu-22.04
# path: test-results
# - name: Download Test And Coverage Results (windows-2022)
# uses: actions/download-artifact@v4
# with:
# name: windows-2022
# path: test-results
# - name: Fix Absolute Code Coverage Paths
# run: Get-ChildItem -Path 'test-results' -Filter *.xml -Recurse | Select-Object -ExpandProperty FullName | % { (Get-Content -LiteralPath $_) -Replace 'fullPath="[A-Za-z0-9:\-\/\\]+(src|tests)', 'fullPath="${{ github.workspace }}/$1' | Set-Content -LiteralPath $_ }
# shell: pwsh
# - name: Cache NuGet Packages
# uses: actions/cache@v4
# with:
# key: ubuntu-22.04-nuget-${{ hashFiles('Directory.Packages.props') }}
# path: ~/.nuget/packages
# - name: Setup Java
# uses: actions/setup-java@v4
# with:
# distribution: temurin
# java-version: 17
# - name: Setup .NET
# uses: actions/setup-dotnet@v4
# - name: Restore .NET Tools
# run: dotnet tool restore
# - name: Restore NuGet Packages
# run: dotnet cake --target=Restore-NuGet-Packages
# - name: Run Sonar Analysis
# run: dotnet cake --target=Sonar-Begin
# - name: Run Build
# run: dotnet cake --target=Build
# - name: Upload Sonar Results
# run: dotnet cake --target=Sonar-End
# - name: Publish NuGet Package
# run: dotnet cake --target=Publish
# # Cake sets the semVer environment variable
# - uses: release-drafter/release-drafter@v6
# with:
# version: ${{ env.semVer }}
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}