55 branches : [ master, main ]
66 pull_request :
77 branches : [ master, main ]
8+ workflow_dispatch :
9+ inputs :
10+ publishNuget :
11+ description : " Publish NuGet package and dotnet tool"
12+ required : false
13+ type : boolean
14+ default : false
15+ deployWebFunc :
16+ description : " Deploy web/func artifacts"
17+ required : false
18+ type : boolean
19+ default : false
20+ createRelease :
21+ description : " Create GitHub release"
22+ required : false
23+ type : boolean
24+ default : false
25+ nugetApiKey :
26+ description : " NuGet API key (required if Publish NuGet is checked)"
27+ required : false
28+ type : string
829
930env :
1031 BuildVersion : ' 10.0.0'
1132
1233jobs :
13- build :
34+ build :
1435 runs-on : windows-2022
1536 env :
1637 BuildPlatform : Any CPU
5172 env :
5273 Tests1 : Tests/bin/${{ env.BuildTarget }}/ICSharpCode.CodeConverter.Tests.dll
5374
75+ - name : Run vitest
76+ working-directory : Web
77+ run : npm test -- --run
78+
5479 - name : Upload NuGet package
5580 uses : actions/upload-artifact@v4
5681 with :
@@ -70,31 +95,81 @@ jobs:
7095 uses : actions/upload-artifact@v4
7196 with :
7297 name : ICSharpCode.CodeConverter.Web.${{ env.BuildVersion }}.zip
73- path : Web/bin/${{ env.BuildTarget }}/publish /
98+ path : web/dist /
7499 - name : Upload Function
75100 uses : actions/upload-artifact@v4
76101 with :
77102 name : ICSharpCode.CodeConverter.Func.${{ env.BuildVersion }}.zip
78103 path : Func/bin/${{ env.BuildTarget }}/publish/
79104
80- deploy :
81- if : ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }}
82- concurrency : ci-${{ github.ref }}
83- needs : [build] # The second job must depend on the first one to complete before running and uses ubuntu-latest instead of windows.
84- runs-on : ubuntu-latest
85- steps :
86- - name : Checkout 🛎️
87- uses : actions/checkout@v4
105+ deploy :
106+ if : ${{ github.event_name == 'workflow_dispatch' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') }}
107+ concurrency : ci-${{ github.ref }}
108+ needs : [build] # The second job must depend on the first one to complete before running and uses ubuntu-latest instead of windows.
109+ runs-on : ubuntu-latest
110+ permissions :
111+ contents : write
112+ steps :
113+ - name : Checkout 🛎️
114+ uses : actions/checkout@v4
88115
89- - name : Download Artifacts 🔻 # The built project is downloaded into the 'site' folder.
90- uses : actions/download-artifact@v4
91- with :
92- name : ICSharpCode.CodeConverter.Web.${{ env.BuildVersion }}.zip
93- path : site
116+ - name : Download web artifact 🔻 # The built project is downloaded into the 'site' folder.
117+ if : ${{ inputs.deployWebFunc }}
118+ uses : actions/download-artifact@v4
119+ with :
120+ name : ICSharpCode.CodeConverter.Web.${{ env.BuildVersion }}.zip
121+ path : site
122+
123+ - name : Download release artifacts
124+ if : ${{ inputs.createRelease || inputs.publishNuget }}
125+ uses : actions/download-artifact@v4
126+ with :
127+ pattern : ICSharpCode.CodeConverter.*
128+ path : release-artifacts
129+ merge-multiple : true
130+
131+ - name : Extract latest changelog section
132+ id : changelog
133+ shell : pwsh
134+ if : ${{ inputs.createRelease }}
135+ run : |
136+ ./Get-LatestChangelog.ps1 -Path CHANGELOG.md | Tee-Object -FilePath release-notes.md
137+ "notes<<EOF" >> $env:GITHUB_OUTPUT
138+ Get-Content release-notes.md >> $env:GITHUB_OUTPUT
139+ "EOF" >> $env:GITHUB_OUTPUT
94140
95- - name : Deploy 🚀
96- uses : JamesIves/github-pages-deploy-action@v4
97- with :
98- branch : ' autoupdated/gh-pages'
99- folder : ' site/wwwroot'
141+ - name : Deploy 🚀
142+ if : ${{ inputs.deployWebFunc }}
143+ uses : JamesIves/github-pages-deploy-action@v4
144+ with :
145+ branch : ' autoupdated/gh-pages'
146+ folder : ' site/wwwroot'
147+
148+ - name : Publish NuGet packages
149+ if : ${{ inputs.publishNuget }}
150+ shell : pwsh
151+ env :
152+ NUGET_API_KEY : ${{ inputs.nugetApiKey }}
153+ run : |
154+ if (-not $env:NUGET_API_KEY) { throw "nugetApiKey input is required when Publish NuGet is checked." }
155+ Write-Output "::add-mask::$env:NUGET_API_KEY"
156+ $source = "https://api.nuget.org/v3/index.json"
157+ $packages = @(
158+ "release-artifacts/ICSharpCode.CodeConverter.*.nupkg",
159+ "release-artifacts/ICSharpCode.CodeConverter.CodeConv.*.nupkg"
160+ )
161+ foreach ($pattern in $packages) {
162+ Get-ChildItem -Path $pattern -File | ForEach-Object {
163+ dotnet nuget push $_.FullName -k $env:NUGET_API_KEY -s $source --skip-duplicate
164+ }
165+ }
166+
167+ - name : Create GitHub release
168+ if : ${{ inputs.createRelease }}
169+ uses : softprops/action-gh-release@v2
170+ with :
171+ tag_name : v${{ env.BuildVersion }}.${{ github.run_number }}
172+ name : v${{ env.BuildVersion }}.${{ github.run_number }}
173+ body : ${{ steps.changelog.outputs.notes }}
174+ files : release-artifacts/**
100175
0 commit comments