55 branches : [ master ]
66 pull_request :
77 branches : [ master ]
8- workflow_dispatch :
98
109jobs :
11- build-and-test :
10+ build :
11+
1212 strategy :
1313 matrix :
1414 os : [ ubuntu-latest, windows-latest, macos-latest ]
15- dotnet-version : [ '10.0.x' ]
15+ dotnet-version : [ '8.0.x', '9.0.x', ' 10.0.x' ]
1616 runs-on : ${{ matrix.os }}
1717 steps :
18- - uses : actions/checkout@v4
18+ - uses : actions/checkout@v3
1919 - name : Setup .NET
20- uses : actions/setup-dotnet@v4
20+ uses : actions/setup-dotnet@v3
2121 with :
2222 dotnet-version : ${{ matrix.dotnet-version }}
23-
24- - name : Build
23+ - name : Build with dotnet
2524 run : dotnet build -c Release
26-
27- - name : Run Tests
25+ - name : Run tests with coverage
2826 run : |
27+ cd ./src/Hexecs.Tests/
2928 dotnet test -c Release --no-build /p:CollectCoverage=true /p:CoverletOutput=TestResults/ /p:CoverletOutputFormat=opencover
30-
3129 - name : Publish coverage report
32- if : matrix.os == 'ubuntu-latest'
33- uses : codecov/codecov-action@v4
30+ if : matrix.os == 'ubuntu-latest' && matrix.dotnet-version == '10.0.x'
31+ uses : codecov/codecov-action@v3
3432 with :
3533 token : ${{ secrets.CODECOV_TOKEN }}
36-
37- benchmark :
38- runs-on : ubuntu-latest
39- needs : build-and-test
40- permissions :
41- contents : write
42- pull-requests : write
43- steps :
44- - uses : actions/checkout@v4
45-
46- - name : Setup .NET
47- uses : actions/setup-dotnet@v4
48- with :
49- dotnet-version : ' 10.0.x'
50-
51- - name : Run Benchmarks
52- run : |
53- # Создаем абсолютный путь для артефактов в корне репозитория
54- mkdir -p ${{ github.workspace }}/bench-results
55-
56- if [ "${{ github.event_name }}" == "pull_request" ]; then
57- dotnet run -c Release --project ./src/Hexecs.Benchmarks/ -- --filter '*' --exporters json --join --job LowRuntime --artifacts ${{ github.workspace }}/bench-results
58- else
59- dotnet run -c Release --project ./src/Hexecs.Benchmarks/ -- --filter '*' --exporters json --join --artifacts ${{ github.workspace }}/bench-results
60- fi
61-
62- - name : Locate Result File
63- run : |
64- # Находим созданный JSON (BenchmarkDotNet может положить его в подпапку results)
65- echo "Searching for benchmark results in ${{ github.workspace }}/bench-results..."
66- REPORT_FILE=$(find ${{ github.workspace }}/bench-results -name "*.json" | head -n 1)
67-
68- if [ -z "$REPORT_FILE" ]; then
69- echo "Error: No benchmark report found!"
70- exit 1
71- fi
72-
73- echo "Found report: $REPORT_FILE"
74- # Копируем его в фиксированное место для следующего шага
75- cp "$REPORT_FILE" ${{ github.workspace }}/final-report.json
76-
77- - name : Store benchmark result
78- uses : benchmark-action/github-action-benchmark@v1
79- with :
80- tool : ' benchmarkdotnet'
81- output-file-path : ' ./final-report.json'
82- github-token : ${{ secrets.GITHUB_TOKEN }}
83- # Пушим графики в gh-pages только при мердже в мастер
84- auto-push : ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
85- comment-on-alert : true
86- fail-on-alert : true
87- alert-threshold : " 120%"
0 commit comments