66
77open System
88open System.IO
9+ open Paket
910open Fake.BuildServer
1011open Fake.Core
1112open 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+
117146Target.create " Start" ignore
118147Target.create " Release" ignore
119148Target.create " GenerateDocs" ignore
@@ -140,6 +169,7 @@ open Fake.Core.TargetOperators
140169
141170" Build"
142171 ==> " NuGet"
172+ // ==> "ValidateVersionBump"
143173 ==> " PublishNuGet"
144174 ==> " Release"
145175
0 commit comments