@@ -8,6 +8,8 @@ open Fake.DotNet
8
8
open Fake.DotNet .NuGet
9
9
open Fake.Core
10
10
open Fake.Tools
11
+ open Fake.Api
12
+ open Fake.Windows
11
13
12
14
BuildServer.install [
13
15
AppVeyor.Installer
@@ -73,13 +75,8 @@ Target.create "Package" (fun _ ->
73
75
Shell.copyRecursive " src/BCC.Submission/bin/Release" " nuget/tools" false
74
76
|> ignore
75
77
76
- let version =
77
- match String.isNullOrWhiteSpace gitVersion.PreReleaseLabel with
78
- | false -> sprintf " %s -%s%s " gitVersion.MajorMinorPatch gitVersion.PreReleaseLabel gitVersion.BuildMetaDataPadded
79
- | _ -> sprintf " %s " gitVersion.MajorMinorPatch
80
-
81
78
NuGet.NuGetPack ( fun p -> { p with
82
- Version = version
79
+ Version = gitVersion.NuGetVersionV2
83
80
OutputPath = " nuget" }) " nuget/Package.nuspec"
84
81
85
82
!! " nuget/*.nupkg"
@@ -108,6 +105,104 @@ Target.create "Coverage" (fun _ ->
108
105
)
109
106
)
110
107
108
+ Target.create " DeployGitHub" ( fun _ ->
109
+ let gitHubToken = Environment.environVarOrNone( " GITHUB_TOKEN" )
110
+ if ( gitHubToken.IsNone) then
111
+ Trace.traceError " GITHUB_TOKEN is not defined"
112
+ else
113
+ let ( gitOwner , gitName ) =
114
+ AppVeyor.Environment.RepoName.Split( '/' )
115
+ |> Array.pairwise
116
+ |> Array.head
117
+
118
+ let repoTagName = AppVeyor.Environment.RepoTagName
119
+ let projectName = AppVeyor.Environment.ProjectName
120
+
121
+ GitHub.createClientWithToken gitHubToken.Value
122
+ |> ( fun clientAsync ->
123
+ async {
124
+ let! client = clientAsync
125
+ let releaseClient = client.Repository.Release
126
+
127
+ let! someRelease = async {
128
+ let! exc = Async.Catch( async {
129
+ let! str = Async.AwaitTask ( releaseClient.Get( gitOwner, gitName, repoTagName))
130
+ return str })
131
+
132
+ match exc with
133
+ | Choice1Of2 r -> return Some r
134
+ | Choice2Of2 _ -> return None
135
+ }
136
+
137
+ match someRelease with
138
+ | Some release -> Trace.traceErrorfn " Release '%s ' @ '%s ' already exists" release.Name repoTagName
139
+ | _ ->
140
+ let isPrerelease = not ( String.isNullOrWhiteSpace gitVersion.PreReleaseTag)
141
+ let releaseName = sprintf " %s - v%s " projectName gitVersion.SemVer
142
+ let releaseBody = sprintf " ## %s " releaseName
143
+
144
+ let newRelease = new Octokit.NewRelease( repoTagName);
145
+ newRelease.Name <- releaseName
146
+ newRelease.Body <- releaseBody
147
+ newRelease.Draft <- true
148
+ newRelease.Prerelease <- isPrerelease
149
+
150
+ let! release = releaseClient.Create( gitOwner, gitName, newRelease) |> Async.AwaitTask
151
+
152
+ let release : GitHub.Release = {
153
+ Client = client;
154
+ Owner = gitOwner;
155
+ RepoName = gitName;
156
+ Release = release
157
+ }
158
+
159
+ let files = !! " nuget/*.nupkg"
160
+
161
+ release
162
+ |> async.Return
163
+ |> GitHub.uploadFiles files
164
+ |> GitHub.publishDraft
165
+ |> Async.RunSynchronously
166
+
167
+ Trace.traceImportantfn " Created Release: '%s ' @ '%s '" releaseName repoTagName
168
+ }
169
+ )
170
+ |> Async.Catch
171
+ |> Async.RunSynchronously
172
+ |> ignore
173
+ )
174
+
175
+ Target.create " DeployNuGet" ( fun _ ->
176
+ let nugetApiKey = Environment.environVarOrNone( " NUGET_API_KEY" )
177
+ if ( nugetApiKey.IsNone) then
178
+ Trace.traceError " NUGET_API_KEY is not defined"
179
+ else
180
+ try
181
+ NuGet.NuGetPublish ( fun p -> { p with
182
+ AccessKey = nugetApiKey.Value
183
+ Project = " BCC-Submission"
184
+ Version = gitVersion.NuGetVersionV2
185
+ WorkingDir = " nuget" })
186
+
187
+ Trace.traceImportant " Uploaded NuGet Package"
188
+ with ex ->
189
+ Trace.traceError " Unable to create NuGet Package"
190
+ Trace.traceException ex
191
+ )
192
+
193
+ Target.create " DeployChocolatey" ( fun _ ->
194
+ let chocoApiKey = Environment.environVarOrNone( " CHOCO_API_KEY" )
195
+ if ( chocoApiKey.IsNone) then
196
+ Trace.traceError " CHOCO_API_KEY is not defined"
197
+ else
198
+ try
199
+ !! " nuget/*.nupkg"
200
+ |> Seq.iter ( Choco.push ( fun p -> { p with ApiKey = chocoApiKey.Value }))
201
+ with ex ->
202
+ Trace.traceError " Unable to create Chocolatey Package"
203
+ Trace.traceException ex
204
+ )
205
+
111
206
Target.create " Default" ( fun _ -> ())
112
207
113
208
open Fake.Core .TargetOperators
@@ -117,5 +212,11 @@ open Fake.Core.TargetOperators
117
212
" Build" ==> " Test" ==> " Default"
118
213
" Build" ==> " Coverage" ==> " Default"
119
214
215
+ let shouldDeploy = isAppveyor && AppVeyor.Environment.RepoTag
216
+
217
+ " Package" =?> ( " DeployGitHub" , ( shouldDeploy)) ==> " Default"
218
+ " Package" =?> ( " DeployNuGet" , ( shouldDeploy)) ==> " Default"
219
+ " Package" =?> ( " DeployChocolatey" , ( shouldDeploy)) ==> " Default"
220
+
120
221
// start build
121
222
Target.runOrDefault " Default"
0 commit comments