New build #1445
This file contains hidden or 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: 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 | |
| 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 --verbosity minimal | |
| 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 \ | |
| --no-build \ | |
| --verbosity minimal \ | |
| --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 | |
| - 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 | |
| sonarcloud_end: | |
| runs-on: ubuntu-latest | |
| if: always() | |
| 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: 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: 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 | |
| - name: Upload Integration Test Coverage | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: integration-test-coverage | |
| path: ./coverage/integration | |
| - 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 | |
| # 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" |