Skip to content

Commit 689f079

Browse files
committed
add build step to validate the version surface area bump
1 parent c8d34ea commit 689f079

File tree

3 files changed

+328
-2
lines changed

3 files changed

+328
-2
lines changed

fcs/build.fsx

+30
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
open System
88
open System.IO
9+
open Paket
910
open Fake.BuildServer
1011
open Fake.Core
1112
open Fake.DotNet
@@ -111,9 +112,37 @@ Target.create "PublishNuGet" (fun _ ->
111112
)
112113
)
113114

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+
114141
// --------------------------------------------------------------------------------------
115142
// Run all targets by default. Invoke 'build <Target>' to override
116143

144+
145+
117146
Target.create "Start" ignore
118147
Target.create "Release" ignore
119148
Target.create "GenerateDocs" ignore
@@ -140,6 +169,7 @@ open Fake.Core.TargetOperators
140169

141170
"Build"
142171
==> "NuGet"
172+
// ==> "ValidateVersionBump"
143173
==> "PublishNuGet"
144174
==> "Release"
145175

fcs/paket.dependencies

+11-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ nuget Fake.Core.UserInput
1515
nuget Fake.DotNet.Cli
1616
nuget Fake.DotNet.Fsi
1717
nuget Fake.DotNet.Paket
18+
nuget SynVer.FAKE
19+
nuget Paket.Core
1820

1921
group generate
2022

@@ -27,4 +29,12 @@ nuget Fake.Core
2729
nuget Fake.IO.FileSystem
2830
nuget Fake.Core.Trace
2931
nuget FSharp.Literate 4.0.0-alpha03
30-
nuget FSharp.Formatting 4.0.0-alpha03
32+
nuget FSharp.Formatting 4.0.0-alpha03
33+
34+
group reference
35+
36+
source https://api.nuget.org/v3/index.json
37+
framework: netstandard2.0
38+
39+
storage: packages
40+
nuget FSharp.Compiler.Service 34.1.0

0 commit comments

Comments
 (0)