New build #1441
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
name: build | |
on: | |
push: | |
branches: ["master", "release/*", "feature/*"] | |
pull_request_target: | |
branches: ["master", "release/*", "devops/*"] | |
workflow_dispatch: | |
permissions: | |
contents: read | |
id-token: write # needed by dorny/test-reporter | |
checks: write # needed by dorny/test-reporter | |
env: | |
SOLUTION_NAME: SlimMessageBus.sln | |
SOLUTION_CONFIGURATION: Release | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: PR - Checkout | |
if: github.event_name == 'pull_request_target' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Checkout | |
if: github.event_name != 'pull_request_target' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup .NET 9.0 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.x | |
cache: false | |
- name: SonarCloud - Setup Java17 | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "adopt" | |
java-version: "17" | |
- name: Install SonarCloud Scanner | |
run: dotnet tool update dotnet-sonarscanner --tool-path ./.sonar/scanner | |
- name: SonarCloud - Begin Analysis | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
run: | | |
params="" | |
pr_number="${{ github.event.pull_request.number }}" | |
if [[ -n "$pr_number" ]]; then | |
params="/d:sonar.pullrequest.key=${pr_number}" | |
fi | |
../.sonar/scanner/dotnet-sonarscanner begin \ | |
/k:"zarusz_SlimMessageBus" /o:"zarusz" \ | |
/d:sonar.token="${{ secrets.SONAR_TOKEN }}" \ | |
/d:sonar.host.url="https://sonarcloud.io" \ | |
/d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" \ | |
/d:sonar.exclusions="Samples/**/*,Tests/**/*" \ | |
$params | |
working-directory: ./src | |
- name: Restore Dependencies | |
run: dotnet restore $SOLUTION_NAME | |
working-directory: ./src | |
- name: Build | |
run: dotnet build $SOLUTION_NAME --configuration $SOLUTION_CONFIGURATION --no-restore | |
working-directory: ./src | |
unit_tests: | |
runs-on: ubuntu-latest | |
steps: | |
- name: PR - Checkout | |
if: github.event_name == 'pull_request_target' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Checkout | |
if: github.event_name != 'pull_request_target' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup .NET 8.0 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
cache: false | |
- name: Setup .NET 9.0 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.x | |
cache: false | |
# - name: SonarCloud - Setup Java17 | |
# #if: github.event_name == 'pull_request_target' | |
# uses: actions/setup-java@v4 | |
# with: | |
# distribution: "adopt" | |
# java-version: "17" | |
# - name: Install SonarCloud Scanner | |
# #if: github.event_name == 'pull_request_target' | |
# run: dotnet tool update dotnet-sonarscanner --tool-path ./.sonar/scanner | |
# - name: SonarCloud - Begin Analysis | |
# #if: github.event_name == 'pull_request_target' | |
# env: | |
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
# run: | | |
# params="" | |
# pr_number="${{ github.event.pull_request.number }}" | |
# if [[ -n "$pr_number" ]]; then | |
# params="/d:sonar.pullrequest.key=${pr_number}" | |
# fi | |
# ../.sonar/scanner/dotnet-sonarscanner begin \ | |
# /k:"zarusz_SlimMessageBus" /o:"zarusz" \ | |
# /d:sonar.token="${{ secrets.SONAR_TOKEN }}" \ | |
# /d:sonar.host.url="https://sonarcloud.io" \ | |
# /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" \ | |
# /d:sonar.exclusions="Samples/**/*,Tests/**/*" \ | |
# $params | |
# working-directory: ./src | |
# - name: Restore Dependencies | |
# run: dotnet restore $SOLUTION_NAME | |
# working-directory: ./src | |
# - name: Build | |
# run: dotnet build $SOLUTION_NAME --configuration $SOLUTION_CONFIGURATION --no-restore | |
# working-directory: ./src | |
- name: Run Unit Tests | |
run: | | |
dotnet test $SOLUTION_NAME \ | |
--configuration $SOLUTION_CONFIGURATION \ | |
--verbosity normal \ | |
--logger "trx;LogFilePrefix=Unit" \ | |
--collect:"XPlat Code Coverage;Format=opencover" \ | |
--filter "Category!=Integration" | |
working-directory: ./src | |
- name: Collect Unit Test Coverage | |
if: success() || failure() | |
run: | | |
mkdir -p ./coverage/unit | |
find ./src -name "coverage.opencover.xml" -exec cp {} ./coverage/unit/ \; | |
- name: Upload Unit Test Coverage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: unit-test-coverage | |
path: ./coverage/unit | |
integration_tests: | |
runs-on: ubuntu-latest | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
steps: | |
- name: PR - Checkout | |
if: github.event_name == 'pull_request_target' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Checkout | |
if: github.event_name != 'pull_request_target' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup .NET 8.0 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
cache: false | |
- name: Setup .NET 9.0 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.x | |
cache: false | |
# - name: SonarCloud - Setup Java17 | |
# #if: github.event_name == 'pull_request_target' | |
# uses: actions/setup-java@v4 | |
# with: | |
# distribution: "adopt" | |
# java-version: "17" | |
# - name: Install SonarCloud Scanner | |
# #if: github.event_name == 'pull_request_target' | |
# run: dotnet tool update dotnet-sonarscanner --tool-path ./.sonar/scanner | |
# - name: SonarCloud - Begin Analysis | |
# #if: github.event_name == 'pull_request_target' | |
# env: | |
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
# run: | | |
# params="" | |
# pr_number="${{ github.event.pull_request.number }}" | |
# if [[ -n "$pr_number" ]]; then | |
# params="/d:sonar.pullrequest.key=${pr_number}" | |
# fi | |
# ../.sonar/scanner/dotnet-sonarscanner begin \ | |
# /k:"zarusz_SlimMessageBus" /o:"zarusz" \ | |
# /d:sonar.token="${{ secrets.SONAR_TOKEN }}" \ | |
# /d:sonar.host.url="https://sonarcloud.io" \ | |
# /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" \ | |
# /d:sonar.exclusions="Samples/**/*,Tests/**/*" \ | |
# $params | |
# working-directory: ./src | |
- name: Restore Dependencies | |
run: dotnet restore $SOLUTION_NAME --verbosity minimal | |
working-directory: ./src | |
# - name: Build | |
# run: dotnet build $SOLUTION_NAME --configuration $SOLUTION_CONFIGURATION --no-restore | |
# working-directory: ./src | |
- name: Run Integration Tests - Infrastructure Setup | |
run: | | |
docker compose -f src/Infrastructure/docker-compose.yml up --detach --force-recreate -V | |
- name: Run Integration Tests | |
run: | | |
dotnet test $SOLUTION_NAME \ | |
--configuration $SOLUTION_CONFIGURATION \ | |
# --no-build \ | |
--verbosity minimal \ | |
--logger "trx;LogFilePrefix=Integration" \ | |
--collect:"XPlat Code Coverage;Format=opencover" \ | |
--filter "Category=Integration" | |
working-directory: ./src | |
env: | |
# Connects to the Azure cloud | |
azure_servicebus_connectionstring: ${{ secrets.azure_servicebus_connectionstring }} | |
azure_eventhub_connectionstring: ${{ secrets.azure_eventhub_connectionstring }} | |
azure_storagecontainer_connectionstring: ${{ secrets.azure_storagecontainer_connectionstring }} | |
# Connects to AWS cloud | |
amazon_access_key: ${{ secrets.amazon_access_key }} | |
amazon_secret_access_key: ${{ secrets.amazon_secret_access_key }} | |
_kafka_brokers: ${{ secrets.kafka_brokers }} | |
_kafka_username: ${{ secrets.kafka_username }} | |
_kafka_password: ${{ secrets.kafka_password }} | |
_kafka_secure: ${{ secrets.kafka_secure }} | |
_mqtt_server: ${{ secrets.mqtt_server }} | |
_mqtt_port: ${{ secrets.mqtt_port }} | |
_mqtt_username: ${{ secrets.mqtt_username }} | |
_mqtt_password: ${{ secrets.mqtt_password }} | |
_mqtt_secure: ${{ secrets.mqtt_secure }} | |
_rabbitmq_connectionstring: ${{ secrets.rabbitmq_connectionstring }} | |
_redis_connectionstring: ${{ secrets.redis_connectionstring }} | |
sqlserver_connectionstring: ${{ secrets.sqlserver_connectionstring }} | |
# Connects to the local Test Containers | |
kafka_brokers: localhost:9092 | |
kafka_username: user | |
kafka_password: password | |
kafka_secure: false | |
mqtt_server: localhost | |
mqtt_port: 1883 | |
mqtt_username: "(empty)" | |
mqtt_password: "(empty)" | |
mqtt_secure: false | |
rabbitmq_connectionstring: amqp://localhost | |
redis_connectionstring: localhost:6379 | |
_sqlserver_connectionstring: "Server=localhost;Initial Catalog=SlimMessageBus_Outbox;User ID=sa;Password=SuperSecretP@55word;TrustServerCertificate=true;MultipleActiveResultSets=true;" | |
nats_endpoint: "nats://localhost:4222" | |
- name: Collect Integration Test Coverage | |
if: success() || failure() | |
run: | | |
mkdir -p ./coverage/integration | |
find ./src -name "coverage.opencover.xml" -exec cp {} ./coverage/integration/ \; | |
- name: Upload Integration Test Coverage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: integration-test-coverage | |
path: ./coverage/integration | |
sonarcloud_end: | |
runs-on: ubuntu-latest | |
needs: [build, unit_tests, integration_tests] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup Java for SonarCloud | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "adopt" | |
java-version: "17" | |
- name: Download Unit Test Coverage | |
uses: actions/download-artifact@v4 | |
with: | |
name: unit-test-coverage | |
path: ./coverage/unit | |
- name: Download Integration Test Coverage | |
uses: actions/download-artifact@v4 | |
with: | |
name: integration-test-coverage | |
path: ./coverage/integration | |
- name: SonarCloud - End Analysis | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
run: ../.sonar/scanner/dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}" | |
working-directory: ./src | |
# finish: | |
# runs-on: ubuntu-latest | |
# concurrency: | |
# group: ${{ github.workflow }}-${{ github.ref }} | |
# cancel-in-progress: true | |
# steps: | |
# - name: Collect test results and rename | |
# if: success() || failure() | |
# run: | | |
# mkdir -p ./test-results | |
# # Find all the .trx files recursively and copy them to the test-results folder | |
# # Use the grandparent directory name and filename | |
# find ./src -name "*.trx" | while read file; do | |
# # The grand parent will correspond to the csproj name e.g. SlimMessageBus.Host.Tests | |
# grandparent_dir=$(basename $(dirname $(dirname "$file"))) | |
# filename=$(basename "$file") | |
# # Copy the file and use grandparent_dir and index as the new filename | |
# cp "$file" "./test-results/${grandparent_dir}_${filename}" | |
# done | |
# - name: Upload Test Results | |
# if: success() || failure() | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: test-results | |
# path: ./test-results | |
# - name: Publish Test Results | |
# if: success() || failure() | |
# uses: dorny/test-reporter@v1 | |
# with: | |
# name: .NET Tests | |
# path: ./test-results/*.trx | |
# reporter: dotnet-trx | |
# fail-on-error: true | |
# - name: Copy NuGet packages | |
# shell: bash | |
# run: | | |
# mkdir ./dist | |
# find -name "*.nupkg" -exec cp {} ./dist \; | |
# find -name "*.snupkg" -exec cp {} ./dist \; | |
# find ./dist | |
# - name: Archive NuGet packages | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: nuget-packages | |
# path: "./dist" |