Skip to content
This repository was archived by the owner on Jun 17, 2019. It is now read-only.

Commit 5b2ed4d

Browse files
Merge pull request #3 from justaprogrammer/fake-deploy
Fake deploy
2 parents 4706e3b + b156146 commit 5b2ed4d

File tree

6 files changed

+125
-37
lines changed

6 files changed

+125
-37
lines changed

Build.fsx

Lines changed: 107 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ open Fake.DotNet
88
open Fake.DotNet.NuGet
99
open Fake.Core
1010
open Fake.Tools
11+
open Fake.Api
12+
open Fake.Windows
1113

1214
BuildServer.install [
1315
AppVeyor.Installer
@@ -73,13 +75,8 @@ Target.create "Package" (fun _ ->
7375
Shell.copyRecursive "src/BCC.Submission/bin/Release" "nuget/tools" false
7476
|> ignore
7577

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-
8178
NuGet.NuGetPack (fun p -> { p with
82-
Version = version
79+
Version = gitVersion.NuGetVersionV2
8380
OutputPath = "nuget" }) "nuget/Package.nuspec"
8481

8582
!! "nuget/*.nupkg"
@@ -108,6 +105,104 @@ Target.create "Coverage" (fun _ ->
108105
)
109106
)
110107

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+
111206
Target.create "Default" (fun _ -> ())
112207

113208
open Fake.Core.TargetOperators
@@ -117,5 +212,11 @@ open Fake.Core.TargetOperators
117212
"Build" ==> "Test" ==> "Default"
118213
"Build" ==> "Coverage" ==> "Default"
119214

215+
let shouldDeploy = isAppveyor && AppVeyor.Environment.RepoTag
216+
217+
"Package" =?> ("DeployGitHub", (shouldDeploy)) ==> "Default"
218+
"Package" =?> ("DeployNuGet", (shouldDeploy)) ==> "Default"
219+
"Package" =?> ("DeployChocolatey", (shouldDeploy)) ==> "Default"
220+
120221
// start build
121222
Target.runOrDefault "Default"

GitVersion.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
next-version: 1.0.0
21
branches: {}
32
ignore:
43
sha: []

appveyor.yml

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,5 @@ before_build:
99
- ps: gitversion /output buildserver
1010
build_script:
1111
- ps: >-
12-
fake run Build.fsx
13-
test: off
14-
deploy:
15-
- provider: NuGet
16-
artifact: /.*\.nupkg/
17-
api_key:
18-
secure: dsO76Gkjz0FIjFDUQgSK5k04J5Kx+tBfpUVPA/YNOcvQN8dzfLfuoT+qmu4ezU2c
19-
on:
20-
branch: master
21-
appveyor_repo_tag: true
22-
- provider: NuGet
23-
artifact: /.*\.nupkg/
24-
server: https://chocolatey.org
25-
api_key:
26-
secure: WZYV1tc0xOaBu8I7KqifSysQu+E9nhtlodRlCwCXCiEGFYELc0evoeUBQc2y4iZq
27-
on:
28-
branch: master
29-
appveyor_repo_tag: true
30-
- provider: GitHub
31-
tag: $(APPVEYOR_REPO_TAG_NAME)
32-
release: BCC-Submission v$(GitVersion_SemVer)
33-
description: 'BCC-Submission v$(GitVersion_SemVer)'
34-
auth_token:
35-
secure: 8wLI8hf2W3L/V5BUk/tdGDs+gWryh9Y8HxCQk9iq48xV/n+hxShodChwuHAm2DsS
36-
artifact: /.*\.nupkg/
37-
draft: false
38-
prerelease: false
39-
on:
40-
branch: master
41-
appveyor_repo_tag: true
12+
fake run Build.fsx -p 3
13+
test: off

paket.dependencies

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ group FakeBuild
1313
nuget Fake.DotNet.NuGet
1414
nuget Fake.IO.FileSystem
1515
nuget Fake.Tools.GitVersion
16+
nuget Fake.Api.GitHub
17+
nuget Fake.Windows.Chocolatey
1618
groupref FakeBuildResources
1719

1820
group FakeBuildResources

paket.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ NUGET
77
remote: https://www.nuget.org/api/v2
88
BlackFox.VsWhere (0.3.2)
99
FSharp.Core (>= 4.2.3)
10+
Fake.Api.GitHub (5.9.3)
11+
FSharp.Core (>= 4.3.4)
12+
Octokit (>= 0.32)
1013
Fake.BuildServer.AppVeyor (5.9.3)
1114
Fake.Core.Environment (>= 5.9.3)
1215
Fake.Core.Process (>= 5.9.3)
@@ -119,6 +122,14 @@ NUGET
119122
Fake.IO.FileSystem (>= 5.9.3)
120123
FSharp.Core (>= 4.3.4)
121124
Newtonsoft.Json (>= 11.0.2)
125+
Fake.Windows.Chocolatey (5.9.3)
126+
Fake.Core.Environment (>= 5.9.3)
127+
Fake.Core.Process (>= 5.9.3)
128+
Fake.Core.String (>= 5.9.3)
129+
Fake.Core.Trace (>= 5.9.3)
130+
Fake.DotNet.NuGet (>= 5.9.3)
131+
Fake.IO.FileSystem (>= 5.9.3)
132+
FSharp.Core (>= 4.3.4)
122133
FParsec (1.0.3)
123134
FSharp.Core (>= 4.2.3)
124135
NETStandard.Library (>= 1.6.1)
@@ -178,6 +189,8 @@ NUGET
178189
NETStandard.Library (2.0.3)
179190
Microsoft.NETCore.Platforms (>= 1.1)
180191
Newtonsoft.Json (11.0.2)
192+
Octokit (0.32)
193+
NETStandard.Library (>= 1.6)
181194
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
182195
runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
183196
runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)

src/BCC.Submission.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{E3F58818
1212
..\appveyor.yml = ..\appveyor.yml
1313
..\Build.fsx = ..\Build.fsx
1414
..\codecov.yml = ..\codecov.yml
15+
..\GitVersion.yml = ..\GitVersion.yml
1516
..\nuget\Package.nuspec = ..\nuget\Package.nuspec
1617
..\paket.dependencies = ..\paket.dependencies
1718
EndProjectSection

0 commit comments

Comments
 (0)