-
Notifications
You must be signed in to change notification settings - Fork 0
138 lines (115 loc) · 5.08 KB
/
build-and-publish.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: publish
on:
workflow_dispatch: # Allow running the workflow manually from the GitHub UI
push:
branches:
- 'main' # Run the workflow when pushing to the main branch
- 'release/**' # Run the workflow when pushing to a release branch
pull_request:
branches:
- '*' # Run the workflow for all pull requests
release:
types:
- published # Run the workflow when a new GitHub release is published
env:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
DOTNET_NOLOGO: true
NuGetDirectory: ${{ github.workspace }}/nuget
defaults:
run:
shell: pwsh
jobs:
pack_nuget:
runs-on: ubuntu-latest
# Checkout the source code
steps:
- name: "Checkout source"
uses: actions/checkout@v4
# Install the .NET SDK indicated in the global.json file
- name: Setup .NET SDK with global.json
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
# Create the NuGet packages in the folder from the environment variable NuGetDirectory
- name: dotnet pack Sagara.Core
run: dotnet pack ./src/Sagara.Core/Sagara.Core.csproj --configuration Release --output ${{ env.NuGetDirectory }}
- name: dotnet pack Sagara.Core.AspNetCore
run: dotnet pack ./src/Sagara.Core.AspNetCore/Sagara.Core.AspNetCore.csproj --configuration Release --output ${{ env.NuGetDirectory }}
- name: dotnet pack Sagara.Core.Caching
run: dotnet pack ./src/Sagara.Core.Caching/Sagara.Core.Caching.csproj --configuration Release --output ${{ env.NuGetDirectory }}
- name: dotnet pack Sagara.Core.Data
run: dotnet pack ./src/Sagara.Core.Data/Sagara.Core.Data.csproj --configuration Release --output ${{ env.NuGetDirectory }}
- name: dotnet pack Sagara.Core.Logging.Serilog
run: dotnet pack ./src/Sagara.Core.Logging.Serilog/Sagara.Core.Logging.Serilog.csproj --configuration Release --output ${{ env.NuGetDirectory }}
# Upload .nupkg files as an artifact, so they can be used in the following jobs
- name: Upload NuGet packages as artifacts
uses: actions/upload-artifact@v4
with:
name: nuget
if-no-files-found: error
retention-days: 7
path: ${{ env.NuGetDirectory }}/*
# Upload global.json as an artifact so that we don't have to check out the whole repo to publish to nuget.
- name: Upload global.json as artifact
uses: actions/upload-artifact@v4
with:
name: globaljson
if-no-files-found: error
retention-days: 7
path: ${{ github.workspace }}/global.json
run_test:
runs-on: ubuntu-latest
steps:
- name: "Checkout source"
uses: actions/checkout@v4
# Install the .NET SDK indicated in the global.json file
- name: Setup .NET SDK with global.json
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Run tests
run: dotnet test --configuration Release
deploy_packages:
# Publish only when creating a GitHub Release
# https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository
# You can update this logic if you want to manage releases differently
if: github.event_name == 'release'
runs-on: ubuntu-latest
needs: [ pack_nuget, run_test ]
steps:
# Download the NuGet package created in the pack job
- name: Download NuGet package artifacts
uses: actions/download-artifact@v4
with:
name: nuget
path: ${{ env.NuGetDirectory }}
# Download the global.json file uploaded in the pack job
- name: Download NuGet package artifacts
uses: actions/download-artifact@v4
with:
name: globaljson
path: ${{ github.workspace }}
# Install the .NET SDK indicated in the global.json file
- name: Setup .NET SDK with global.json
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
# Install NuGet. Needed to push the .snupkg file. dotnet nuget apparently can't do this.
# - name: Setup NuGet
# uses: NuGet/setup-nuget@v1
# Publish all NuGet .nupkg files to NuGet.
# Use --skip-duplicate to prevent errors if a package with the same version already exists.
# If you retry a failed workflow, already published packages will be skipped without error.
- name: Publish package (.nupkg) files
run: |
foreach ($file in (Get-ChildItem "${{ env.NuGetDirectory }}" -Recurse -Include *.nupkg)) {
$file
dotnet nuget push $file --api-key "${{ secrets.NUGET_API_KEY }}" --source https://api.nuget.org/v3/index.json --skip-duplicate
}
# Publish all NuGet .snupkg symbol files to NuGet.
# - name: Publish symbol (.snupkg) files
# run: |
# foreach ($file in (Get-ChildItem "${{ env.NuGetDirectory }}" -Recurse -Include *.snupkg)) {
# nuget push $file -Source 'https://api.nuget.org/v3/index.json' -ApiKey ${{ secrets.NUGET_API_KEY }}
# }