1
+ # yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
2
+
3
+ name : publish
4
+ on :
5
+ workflow_dispatch : # Allow running the workflow manually from the GitHub UI
6
+ push :
7
+ branches :
8
+ - ' main' # Run the workflow when pushing to the main branch
9
+ pull_request :
10
+ branches :
11
+ - ' *' # Run the workflow for all pull requests
12
+ release :
13
+ types :
14
+ - published # Run the workflow when a new GitHub release is published
15
+
16
+ env :
17
+ DOTNET_SKIP_FIRST_TIME_EXPERIENCE : 1
18
+ DOTNET_NOLOGO : true
19
+ NuGetDirectory : ${{ github.workspace}}/nuget
20
+
21
+ defaults :
22
+ run :
23
+ shell : pwsh
24
+
25
+ jobs :
26
+ create_nuget :
27
+ runs-on : ubuntu-latest
28
+ steps :
29
+ - uses : actions/checkout@v3
30
+ with :
31
+ fetch-depth : 0 # Get all history to allow automatic versioning using MinVer
32
+
33
+ # Install the .NET SDK indicated in the global.json file
34
+ - name : Setup .NET
35
+ uses : actions/setup-dotnet@v3
36
+
37
+ - name : ' Get Version'
38
+ id : version
39
+ uses : battila7/get-version-action@v2
40
+
41
+ # Create the NuGet package in the folder from the environment variable NuGetDirectory
42
+ - run : dotnet pack --configuration Release --include-symbols -p:PackageVersion=${{ steps.version.outputs.version-without-v }} --output ${{ env.NuGetDirectory }}
43
+
44
+ # Publish the NuGet package as an artifact, so they can be used in the following jobs
45
+ - uses : actions/upload-artifact@v3
46
+ with :
47
+ name : nuget
48
+ if-no-files-found : error
49
+ retention-days : 7
50
+ path : ${{ env.NuGetDirectory }}/*.nupkg
51
+
52
+ validate_nuget :
53
+ runs-on : ubuntu-latest
54
+ needs : [ create_nuget ]
55
+ steps :
56
+ # Install the .NET SDK indicated in the global.json file
57
+ - name : Setup .NET
58
+ uses : actions/setup-dotnet@v3
59
+
60
+ # Download the NuGet package created in the previous job
61
+ - uses : actions/download-artifact@v3
62
+ with :
63
+ name : nuget
64
+ path : ${{ env.NuGetDirectory }}
65
+
66
+ - name : Install nuget validator
67
+ run : dotnet tool update Meziantou.Framework.NuGetPackageValidation.Tool --global
68
+
69
+ # Validate metadata and content of the NuGet package
70
+ # https://www.nuget.org/packages/Meziantou.Framework.NuGetPackageValidation.Tool#readme-body-tab
71
+ # If some rules are not applicable, you can disable them
72
+ # using the --excluded-rules or --excluded-rule-ids option
73
+ - name : Validate package
74
+ run : meziantou.validate-nuget-package (Get-ChildItem "${{ env.NuGetDirectory }}/*.nupkg")
75
+
76
+ run_test :
77
+ runs-on : ubuntu-latest
78
+ steps :
79
+ - uses : actions/checkout@v3
80
+ - name : Setup .NET
81
+ uses : actions/setup-dotnet@v3
82
+ - name : Run tests
83
+ run : dotnet test --configuration Release
84
+
85
+ deploy :
86
+ # Publish only when creating a GitHub Release
87
+ # https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository
88
+ # You can update this logic if you want to manage releases differently
89
+ if : github.event_name == 'release'
90
+ runs-on : ubuntu-latest
91
+ needs : [ validate_nuget, run_test ]
92
+ steps :
93
+ # Download the NuGet package created in the previous job
94
+ - uses : actions/download-artifact@v3
95
+ with :
96
+ name : nuget
97
+ path : ${{ env.NuGetDirectory }}
98
+
99
+ # Install the .NET SDK indicated in the global.json file
100
+ - name : Setup .NET Core
101
+ uses : actions/setup-dotnet@v3
102
+
103
+ # Publish all NuGet packages to NuGet.org
104
+ # Use --skip-duplicate to prevent errors if a package with the same version already exists.
105
+ # If you retry a failed workflow, already published packages will be skipped without error.
106
+ - name : Publish NuGet package
107
+ run : |
108
+ foreach($file in (Get-ChildItem "${{ env.NuGetDirectory }}" -Recurse -Include *.nupkg)) {
109
+ dotnet nuget push $file --api-key "${{ secrets.NUGET_APIKEY }}" --source https://api.nuget.org/v3/index.json --skip-duplicate
110
+ }
0 commit comments