6
6
7
7
open System
8
8
open System.IO
9
+ open Paket
9
10
open Fake.BuildServer
10
11
open Fake.Core
11
12
open Fake.DotNet
@@ -111,9 +112,37 @@ Target.create "PublishNuGet" (fun _ ->
111
112
)
112
113
)
113
114
115
+ let anchor ( path : string ) =
116
+ System.IO.Path.GetFullPath( Path.Combine(__ SOURCE_ DIRECTORY__, path))
117
+
118
+ Target.create " ValidateVersionBump" ( fun _ ->
119
+ let intendedVersion = Paket.PublicAPI.ParseSemVer release.NugetVersion
120
+ let lockfile = Paket.LockFile.LoadFrom " paket.lock"
121
+ let refGroup = lockfile.Groups.[ Paket.Domain.GroupName " reference" ]
122
+ let oldPackage = refGroup.Resolution.[ Paket.Domain.PackageName " FSharp.Compiler.Service" ]
123
+ let oldVersion = oldPackage.Version
124
+ let oldSurfaceArea = SynVer.SurfaceArea.ofAssembly ( System.Reflection.Assembly.LoadFile ( anchor " packages/reference/FSharp.Compiler.Service/lib/netstandard2.0/FSharp.Compiler.Service.dll" ))
125
+ let newSurfaceArea = SynVer.SurfaceArea.ofAssembly ( System.Reflection.Assembly.LoadFile ( anchor " ../artifacts/bin/fcs/Release/netstandard2.0/FSharp.Compiler.Service.dll" ))
126
+ let ( computedVersion , computedMagnitude ) = SynVer.SurfaceArea.bump ( string oldVersion) oldSurfaceArea newSurfaceArea
127
+ let parsedComputedVersion = Paket.PublicAPI.ParseSemVer computedVersion
128
+ let apiDiffs = SynVer.SurfaceArea.diff oldSurfaceArea newSurfaceArea |> String.concat " \n "
129
+ // todo: expand on this comparison based on the magnitudes
130
+ if parsedComputedVersion <> intendedVersion
131
+ then
132
+ failwithf """ Version bump invalid.
133
+ Version packaged was %A
134
+ Version computed due to API diffs was %A
135
+ Allowed version magnitude change is %A
136
+ The full set of API diffs is:
137
+ %A
138
+ """ intendedVersion parsedComputedVersion computedMagnitude apiDiffs
139
+ )
140
+
114
141
// --------------------------------------------------------------------------------------
115
142
// Run all targets by default. Invoke 'build <Target>' to override
116
143
144
+
145
+
117
146
Target.create " Start" ignore
118
147
Target.create " Release" ignore
119
148
Target.create " GenerateDocs" ignore
@@ -140,6 +169,7 @@ open Fake.Core.TargetOperators
140
169
141
170
" Build"
142
171
==> " NuGet"
172
+ // ==> "ValidateVersionBump"
143
173
==> " PublishNuGet"
144
174
==> " Release"
145
175
0 commit comments