|
1 | | -name: Release |
| 1 | +name: Build and Package Release |
2 | 2 |
|
3 | 3 | on: |
4 | 4 | push: |
5 | 5 | tags: |
6 | | - - "v*" |
| 6 | + - 'v[0-9]+.[0-9]+.[0-9]+*' |
7 | 7 |
|
8 | 8 | permissions: |
9 | | - contents: write |
| 9 | + contents: read |
10 | 10 |
|
11 | 11 | env: |
12 | 12 | PROJECT_NAME: OutSystems.PhoneNumberValidator |
|
15 | 15 | jobs: |
16 | 16 | release: |
17 | 17 | runs-on: ubuntu-latest |
18 | | - |
| 18 | + permissions: |
| 19 | + contents: write |
19 | 20 | steps: |
20 | | - - name: Checkout code |
21 | | - uses: actions/checkout@v4 |
| 21 | + - name: Checkout Code |
| 22 | + uses: actions/checkout@v4 |
| 23 | + |
| 24 | + - name: Setup .NET |
| 25 | + uses: actions/setup-dotnet@v4 |
| 26 | + with: |
| 27 | + dotnet-version: '8.0.x' |
22 | 28 |
|
23 | | - - name: Setup .NET |
24 | | - uses: actions/setup-dotnet@v4 |
25 | | - with: |
26 | | - dotnet-version: 8.0.x |
| 29 | + # 1. Restore the solution (or both projects) for the target runtime |
| 30 | + - name: Restore dependencies |
| 31 | + run: dotnet restore ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.sln -r linux-x64 |
27 | 32 |
|
28 | | - - name: Restore dependencies |
29 | | - run: dotnet restore ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.sln -r linux-x64 |
| 33 | + # --- THE GATEKEEPER: RUN TESTS --- |
30 | 34 |
|
31 | | - - name: Run tests |
32 | | - run: | |
| 35 | + - name: Run tests |
| 36 | + run: | |
33 | 37 | dotnet test ${{ env.PROJECT_NAME }}.UnitTests/${{ env.PROJECT_NAME }}.UnitTests.csproj \ |
34 | 38 | --configuration Release \ |
35 | 39 | --no-restore \ |
36 | 40 | --nologo \ |
37 | 41 | --collect:"XPlat Code Coverage" \ |
38 | 42 | --results-directory ./coverage |
39 | 43 |
|
40 | | - - name: Code Coverage Summary |
41 | | - uses: irongut/CodeCoverageSummary@v1.3.0 |
42 | | - with: |
43 | | - filename: coverage/**/coverage.cobertura.xml |
44 | | - badge: true |
45 | | - format: markdown |
46 | | - output: both |
| 44 | + - name: Report Code Coverage (Optional Summary) |
| 45 | + uses: irongut/CodeCoverageSummary@v1.3.0 |
| 46 | + with: |
| 47 | + filename: coverage/**/coverage.cobertura.xml |
| 48 | + badge: true |
| 49 | + format: markdown |
| 50 | + output: both |
| 51 | + |
| 52 | + - name: Write coverage to summary |
| 53 | + run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY |
47 | 54 |
|
48 | | - - name: Write coverage to summary |
49 | | - run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY |
| 55 | + # --- PACKAGING STEPS (Only runs if tests pass) --- |
50 | 56 |
|
51 | | - - name: Extract version from tag |
52 | | - id: version |
53 | | - run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT |
| 57 | + - name: Extract version from tag |
| 58 | + id: version |
| 59 | + run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT |
54 | 60 |
|
55 | | - - name: Publish |
56 | | - run: | |
| 61 | + - name: Publish App |
| 62 | + run: | |
57 | 63 | dotnet publish ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj \ |
58 | 64 | -c Release \ |
59 | 65 | -r linux-x64 \ |
60 | 66 | --self-contained false \ |
61 | 67 | --no-restore \ |
62 | 68 | -o ./publish |
63 | 69 |
|
64 | | - - name: Create ZIP archive |
65 | | - run: | |
| 70 | + - name: Create Versioned Zip |
| 71 | + run: | |
66 | 72 | cd ./publish |
67 | 73 | zip -r ../${{ env.PRODUCT_NAME }}_${{ steps.version.outputs.VERSION }}.zip . |
| 74 | + cd .. |
68 | 75 |
|
69 | | - - name: Create GitHub Release |
70 | | - uses: softprops/action-gh-release@v2 |
71 | | - with: |
| 76 | + - name: Create GitHub Release |
| 77 | + uses: softprops/action-gh-release@v2 |
| 78 | + with: |
| 79 | + files: ${{ env.PRODUCT_NAME }}_${{ steps.get_version.outputs.VERSION }}.zip |
| 80 | + name: Release ${{ steps.get_version.outputs.VERSION }} |
| 81 | + draft: false |
| 82 | + prerelease: false |
72 | 83 | generate_release_notes: true |
73 | | - files: ${{ env.PRODUCT_NAME }}_${{ steps.version.outputs.VERSION }}.zip |
| 84 | + env: |
| 85 | + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
0 commit comments