Skip to content

Commit

Permalink
New build
Browse files Browse the repository at this point in the history
Signed-off-by: Tomasz Maruszak <[email protected]>
  • Loading branch information
zarusz committed Jan 26, 2025
1 parent cbcdee2 commit f810c57
Showing 1 changed file with 254 additions and 73 deletions.
327 changes: 254 additions & 73 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@ env:
jobs:
build:
runs-on: ubuntu-latest
# allow to run concurrently within separate branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
steps:
- name: PR - Checkout
if: github.event_name == 'pull_request_target'
Expand All @@ -37,75 +33,217 @@ jobs:
with:
fetch-depth: 0

- name: Setup .NET 8.0
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
cache: false

- name: Setup .NET
- 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
working-directory: ./src

- name: SonarCloud - Setup Java17
#if: github.event_name == 'pull_request_target'
uses: actions/setup-java@v4
with:
distribution: "adopt"
java-version: "17"

- name: SonarCloud - Install SonarCloud scanner
#if: github.event_name == 'pull_request_target'
- name: Install SonarCloud Scanner
run: dotnet tool update dotnet-sonarscanner --tool-path ./.sonar/scanner

- name: SonarCloud - SonarScanner Begin
#if: github.event_name == 'pull_request_target'
- name: SonarCloud - Begin Analysis
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
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
../.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
run: dotnet build $SOLUTION_NAME --configuration $SOLUTION_CONFIGURATION --no-restore
working-directory: ./src

- name: Unit Tests
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 normal \
--logger "trx;LogFilePrefix=Unit" \
--collect:"XPlat Code Coverage;Format=opencover" \
--filter "Category!=Integration"
working-directory: ./src

- name: Integration Tests - Infrastructure
- 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: Integration Tests
- name: Run Integration Tests
run: |
dotnet test $SOLUTION_NAME \
--configuration $SOLUTION_CONFIGURATION \
--no-build \
--verbosity normal \
--verbosity minimal \
--logger "trx;LogFilePrefix=Integration" \
--collect:"XPlat Code Coverage;Format=opencover" \
--filter "Category=Integration"
Expand Down Expand Up @@ -158,54 +296,97 @@ jobs:

nats_endpoint: "nats://localhost:4222"

- name: SonarCloud - SonarScanner End
#if: github.event_name == 'pull_request_target'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ../.sonar/scanner/dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
working-directory: ./src

- name: Collect test results and rename
- name: Collect Integration Test Coverage
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()
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: test-results
path: ./test-results
name: integration-test-coverage
path: ./coverage/integration

- name: Publish Test Results
if: success() || failure()
uses: dorny/test-reporter@v1
sonarcloud_end:
runs-on: ubuntu-latest
needs: [build, unit_tests, integration_tests]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
name: .NET Tests
path: ./test-results/*.trx
reporter: dotnet-trx
fail-on-error: true
fetch-depth: 0

- name: Copy NuGet packages
shell: bash
run: |
mkdir ./dist
find -name "*.nupkg" -exec cp {} ./dist \;
find -name "*.snupkg" -exec cp {} ./dist \;
find ./dist
- name: Setup Java for SonarCloud
uses: actions/setup-java@v4
with:
distribution: "adopt"
java-version: "17"

- name: Archive NuGet packages
uses: actions/upload-artifact@v4
- name: Download Unit Test Coverage
uses: actions/download-artifact@v4
with:
name: nuget-packages
path: "./dist"
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"

0 comments on commit f810c57

Please sign in to comment.