Remove coverage from V1 tests run #283
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: .NET | |
on: | |
push: | |
branches: [ "Development" ] | |
pull_request: | |
branches: [ "Development", "main" ] | |
env: | |
IMAGE_NAME: CargoHub | |
OWNER: "${{ github.repository_owner }}" | |
DOTNET_INSTALL_DIR: "./.dotnet" | |
jobs: | |
build: | |
runs-on: self-hosted | |
outputs: | |
BUILD_TIME: ${{ steps.build-time.outputs.time }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: Cache NuGet packages | |
uses: actions/cache@v3 | |
with: | |
path: ~/.nuget/packages | |
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }} | |
restore-keys: | | |
${{ runner.os }}-nuget- | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Add packages | |
run: | | |
dotnet add package Newtonsoft.Json | |
dotnet add package xunit | |
- name: Build | |
id: build-time | |
run: | | |
dotnet build --no-restore | |
echo "time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT | |
test: | |
needs: build | |
runs-on: self-hosted | |
outputs: | |
TEST_TIME: ${{ steps.test-time.outputs.time }} | |
COVERAGE: ${{ steps.coverage.outputs.percentage }} | |
UNIT_TEST_COVERAGE: ${{ steps.unit-test-coverage.outputs.percentage }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET Core | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: '8.0.x' | |
- name: Cache .NET build output | |
uses: actions/cache@v3 | |
with: | |
path: ~/.dotnet/ | |
key: ${{ runner.os }}-dotnet-${{ hashFiles('**/*.csproj') }} | |
restore-keys: | | |
${{ runner.os }}-dotnet- | |
- name: Build the application | |
run: dotnet build --configuration Release | |
- name: Run unit tests with coverage | |
run: dotnet test --no-build --configuration Release --collect:"XPlat Code Coverage" --results-directory ./coverage --verbosity normal | |
- name: Run application | |
run: dotnet run --no-build --configuration Release --urls=${{ secrets.LOCALHOST }} & sleep 5 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Cache Python dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-python-${{ hashFiles('**/requirements.txt') }} | |
restore-keys: | | |
${{ runner.os }}-python- | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install httpx pytest coverage | |
- name: Run integration tests V1 | |
run: pytest "C#apiV1/Tests" | |
- name: Run integration tests V2 | |
run: coverage run -m pytest "C#api/Tests" | |
- name: Generate code coverage report | |
id: coverage | |
run: | | |
# Generate the coverage report in multiple formats | |
coverage xml -o coverage.xml | |
coverage report > coverage-summary.txt | |
echo "Debug: Showing coverage-summary.txt content" | |
cat coverage-summary.txt | |
# Extract and store the coverage percentage | |
COVERAGE=$(coverage report | grep TOTAL | awk '{print $NF}') | |
echo "Debug: Coverage percentage is $COVERAGE" | |
echo "percentage=$COVERAGE" >> $GITHUB_OUTPUT | |
# Store the full coverage report for later use | |
coverage report --format=markdown > coverage-report.md | |
# Debug: Show what files were created | |
ls -la | |
- name: Parse coverage by file | |
id: parse-coverage-file | |
run: | | |
echo "Debug: Starting coverage parsing" | |
python -c " | |
import os | |
print('Debug: Reading coverage-summary.txt') | |
with open('coverage-summary.txt', 'r') as f: | |
lines = f.readlines() | |
summary = [] | |
for line in lines: | |
parts = line.split() | |
if len(parts) >= 4: | |
filename = parts[0] | |
coverage = parts[-1] | |
summary.append(f'{filename}: {coverage}') | |
print('Debug: Writing parsed-coverage-summary.txt') | |
with open('parsed-coverage-summary.txt', 'w') as report: | |
report.write('\n'.join(summary)) | |
print('Debug: Coverage parsing complete') | |
" | |
- name: Upload Coverage Reports | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage-data | |
path: | | |
coverage-summary.txt | |
parsed-coverage-summary.txt | |
coverage.xml | |
coveragereport/** | |
retention-days: 1 | |
- name: Cache Coverage Reports | |
uses: actions/cache@v3 | |
with: | |
path: coverage/ | |
key: ${{ runner.os }}-coverage-${{ github.run_id }} | |
- name: Set test Completion time | |
id: test-time | |
run: | | |
echo "time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT | |
release: | |
runs-on: self-hosted | |
if: github.event_name == 'pull_request' && github.event.pull_request.base.ref == 'main' | |
needs: [build, test] | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Git | |
run: | | |
git config user.name "GitHub Actions" | |
git config user.email "actions@github.com" | |
- name: Generate release notes | |
run: | | |
git fetch --all --tags | |
# Get the date 2 weeks ago in ISO 8601 format | |
TWO_WEEKS_AGO=$(date -d '2 weeks ago' '+%Y-%m-%d' || date -v '-2w' '+%Y-%m-%d') | |
echo "Debug: Date 2 weeks ago is $TWO_WEEKS_AGO" | |
echo "# Release Notes" > release_notes.md | |
echo "## Branches merged into Development in the last 2 weeks:" >> release_notes.md | |
# Get merged branches in the last 2 weeks | |
MERGED_BRANCHES=$(git log --since="$TWO_WEEKS_AGO" --merges --pretty=format:"%s%n%b" origin/Development | | |
grep -E "Merge (branch|pull request)|into 'Development'" | | |
sed -E "s/Merge (branch|pull request) //g; s/ into Development//g; s/from //g; s/'//g; s/\"//g" | | |
sort -u) | |
echo "Merged branches: $MERGED_BRANCHES" | |
if [ -z "$MERGED_BRANCHES" ]; then | |
echo "No branches merged in the last 2 weeks." >> release_notes.md | |
else | |
echo "$MERGED_BRANCHES" | sed 's/^/- /' >> release_notes.md | |
fi | |
# Display the contents of the release notes | |
cat release_notes.md | |
- name: Upload release notes | |
uses: actions/upload-artifact@v4 | |
with: | |
name: release-notes | |
path: release_notes.md | |
retention-days: 14 | |
notify: | |
needs: [build, test] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download coverage data | |
uses: actions/download-artifact@v4 | |
with: | |
name: coverage-data | |
path: ./coverage | |
- name: Debug coverage data | |
run: | | |
echo "Debug: Listing coverage directory contents" | |
ls -la ./coverage | |
echo "Debug: Content of coverage-summary.txt:" | |
cat ./coverage/coverage-summary.txt || echo "File not found" | |
- name: Parse coverage data | |
id: parse-coverage | |
run: | | |
cd ./coverage | |
if [ -f parsed-coverage-summary.txt ]; then | |
echo "Debug: Reading parsed-coverage-summary.txt" | |
COVERAGE_SUMMARY=$(cat parsed-coverage-summary.txt) | |
TOTAL_LINE=$(grep "TOTAL" coverage-summary.txt || echo "TOTAL 0 0 0%") | |
COVERAGE=$(echo $TOTAL_LINE | awk '{print $NF}') | |
echo "Debug: Coverage is $COVERAGE" | |
echo "coverage=$COVERAGE" >> $GITHUB_OUTPUT | |
echo "coverage_summary<<EOF" >> $GITHUB_OUTPUT | |
echo "$COVERAGE_SUMMARY" >> $GITHUB_OUTPUT | |
echo "EOF" >> $GITHUB_OUTPUT | |
else | |
echo "Error: parsed-coverage-summary.txt not found" | |
echo "coverage=0%" >> $GITHUB_OUTPUT | |
echo "coverage_summary=No coverage data available" >> $GITHUB_OUTPUT | |
fi | |
- name: Determine coverage status | |
id: coverage-status | |
run: | | |
COVERAGE=$(echo ${{ steps.parse-coverage.outputs.coverage }} | sed 's/%//') | |
echo "Debug: Checking coverage value: $COVERAGE" | |
if (( $(echo "$COVERAGE >= 90" | bc -l) )); then | |
echo "status=good" >> $GITHUB_OUTPUT | |
echo "emoji=✅" >> $GITHUB_OUTPUT | |
echo "gif=https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdjhrcmJsMzA4YmtwODZiZm00aGpmMzd0ZHUzMm9heWQ2NGc2NWZneSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/GSCWqj4qvwSFGDiR2z/giphy.gif" >> $GITHUB_OUTPUT | |
else | |
echo "status=bad" >> $GITHUB_OUTPUT | |
echo "emoji=❌" >> $GITHUB_OUTPUT | |
echo "gif=https://media.giphy.com/media/l1J9EdzfOSgfyueLm/giphy.gif" >> $GITHUB_OUTPUT | |
fi | |
- name: Discord notification | |
env: | |
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} | |
uses: Ilshidur/action-discord@master | |
with: | |
args: | | |
:rocket: Project Update Notification :rocket: | |
The project **${{ github.repository }}** has been updated. | |
:hammer_and_wrench: **Build Job** | |
- Completed at: ${{ needs.build.outputs.BUILD_TIME }} | |
:test_tube: **Test Job** | |
- Completed at: ${{ needs.test.outputs.TEST_TIME }} | |
:bar_chart: **Coverage Report** ${{ steps.coverage-status.outputs.emoji }} | |
- Overall Coverage: ${{ steps.parse-coverage.outputs.coverage }} | |
:page_facing_up: **Detailed Coverage by File | |
\`\`\` | |
${{ steps.parse-coverage.outputs.coverage_summary }} | |
\`\`\` | |
${{ steps.coverage-status.outputs.gif }} | |
:link: [View Commit](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) | |
:octocat: [View Workflow Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) | |
Branch: ${{ github.ref_name }} | |
Event: ${{ github.event_name }} | |
close_pr_on_failure: | |
needs: [build, test] | |
runs-on: ubuntu-latest | |
if: failure() && github.event_name == 'pull_request' | |
permissions: | |
pull-requests: write | |
steps: | |
- name: Close Pull Request | |
uses: actions/github-script@v6 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
script: | | |
github.rest.pulls.update({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
pull_number: context.issue.number, | |
state: 'closed' | |
}) | |
- name: Comment on Pull Request | |
uses: actions/github-script@v6 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
script: | | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: 'This pull request has been automatically closed due to workflow failure. Please fix the issues and open a new pull request.' | |
}) |