-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathbuild.fsx
142 lines (113 loc) · 3.88 KB
/
build.fsx
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
139
140
141
142
#load ".fake/build.fsx/intellisense.fsx"
open Fake.Core
open Fake.DotNet
open Fake.IO
open Fake.IO.Globbing.Operators
open Fake.Core.TargetOperators
open Fake.BuildServer
Target.initEnvironment ()
let sln = "./DotNetDelice.sln"
let getChangelog () =
let changelog = "CHANGELOG.md" |> Changelog.load
changelog.LatestEntry
let isRelease (targets: Target list) =
targets
|> Seq.map (fun t -> t.Name)
|> Seq.exists ((=) "Release")
let configuration (targets: Target list) =
let defaultVal =
if isRelease targets then
"Release"
else
"Debug"
match Environment.environVarOrDefault "CONFIGURATION" defaultVal with
| "Debug" -> DotNet.BuildConfiguration.Debug
| "Release" -> DotNet.BuildConfiguration.Release
| config -> DotNet.BuildConfiguration.Custom config
let getVersionNumber (changeLog: Changelog.ChangelogEntry) (targets: Target list) =
match GitHubActions.Environment.CI false, isRelease targets with
| (true, true) -> changeLog.NuGetVersion
| (true, false) -> sprintf "%s-ci-%s" changeLog.NuGetVersion GitHubActions.Environment.RunId
| (_, _) -> sprintf "%s-local" changeLog.NuGetVersion
Target.create
"Clean"
(fun _ ->
DotNet.exec id "clean" "" |> ignore
!! "./.nuget" |> Shell.cleanDirs)
Target.create "Restore" (fun _ -> DotNet.restore id sln)
Target.create
"Build"
(fun ctx ->
let changelog = getChangelog ()
let args =
[ sprintf "/p:PackageVersion=%s" (getVersionNumber changelog (ctx.Context.AllExecutingTargets))
"--no-restore" ]
DotNet.build
(fun c ->
{ c with
Configuration = configuration (ctx.Context.AllExecutingTargets)
Common = c.Common |> DotNet.Options.withAdditionalArgs args })
sln)
// Target.create
// "Publish"
// (fun ctx ->
// let changelog = getChangelog ()
// let args =
// [ sprintf "/p:PackageVersion=%s" (getVersionNumber changelog (ctx.Context.AllExecutingTargets))
// "--no-restore"
// "--no-build" ]
// DotNet.publish
// (fun c ->
// { c with
// Configuration = configuration (ctx.Context.AllExecutingTargets)
// Common = c.Common |> DotNet.Options.withAdditionalArgs args })
// sln)
Target.create
"Package"
(fun ctx ->
let changelog = getChangelog ()
let args =
[ sprintf "/p:PackageVersion=%s" (getVersionNumber changelog (ctx.Context.AllExecutingTargets))
sprintf "/p:PackageReleaseNotes=\"%s\"" (sprintf "%O" changelog) ]
DotNet.pack
(fun c ->
{ c with
Configuration = configuration (ctx.Context.AllExecutingTargets)
OutputPath = Some "./.nupkg"
Common = c.Common |> DotNet.Options.withAdditionalArgs args })
sln)
Target.create
"PackageVersion"
(fun _ ->
let version = getChangelog ()
printfn "The version is %s" version.NuGetVersion)
Target.create
"Changelog"
(fun _ ->
let changelog = getChangelog ()
Directory.ensure "./.nupkg"
[| sprintf "%O" changelog |]
|> File.append "./.nupkg/changelog.md")
Target.create
"SetVersionForCI"
(fun _ ->
let changelog = getChangelog ()
printfn "::set-env name=package_version::%s" changelog.NuGetVersion)
Target.create "Test" (fun _ -> printfn "Should write some tests...")
Target.create "Default" ignore
Target.create "Release" ignore
Target.create "CI" ignore
"Clean" ==> "Restore" ==> "Build" ==> "Default"
"Default"
// ==> "Publish"
==> "Test"
==> "Package"
==> "Changelog"
==> "Release"
"Default"
// ==> "Publish"
==> "Test"
==> "Package"
==> "Changelog"
==> "CI"
Target.runOrDefault "Default"