@@ -66,39 +66,132 @@ let run cmd args dir =
6666 ) System.TimeSpan.MaxValue = false then
6767 traceError <| sprintf " Error while running '%s ' with args: %s " cmd args
6868
69+ let npmTool =
70+ match isUnix with
71+ | true -> " /usr/local/bin/npm"
72+ | _ -> __ SOURCE_ DIRECTORY__ </> " packages/Npm.js/tools/npm.cmd"
73+
74+ let vsceTool =
75+ #if MONO
76+ " vsce"
77+ #else
78+ Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData) </> " npm" </> " vsce.cmd"
79+ #endif
80+
6981
7082// --------------------------------------------------------------------------------------
7183// Build the Generator project and run it
7284// --------------------------------------------------------------------------------------
7385
7486Target " Clean" ( fun _ ->
87+ CleanDir " ./temp"
7588 CopyFiles " release" [ " README.md" ; " LICENSE.md" ; " RELEASE_NOTES.md" ]
7689)
7790
7891#if MONO
7992Target " BuildGenerator" ( fun () ->
80- [ __ SOURCE_ DIRECTORY__ @@ " src" @@ " Ionide.FSharp.fsproj" ]
93+ [ __ SOURCE_ DIRECTORY__ </> " src" </> " Ionide.FSharp.fsproj" ]
8194 |> MSBuildDebug " " " Rebuild"
8295 |> Log " AppBuild-Output: "
8396)
8497
8598Target " RunGenerator" ( fun () ->
8699 ( TimeSpan.FromMinutes 5.0 )
87100 |> ProcessHelper.ExecProcess ( fun p ->
88- p.FileName <- __ SOURCE_ DIRECTORY__ @@ " src" @@ " bin" @@ " Debug" @@ " Ionide.FSharp.exe" )
101+ p.FileName <- __ SOURCE_ DIRECTORY__ </> " src" </> " bin" </> " Debug" </> " Ionide.FSharp.exe" )
89102 |> ignore
90103)
91104#else
92105Target " RunScript" ( fun () ->
93- Ionide.VSCode.Generator.translateModules typeof< Ionide.VSCode.FSharp> " ../ release/ fsharp.js"
106+ Ionide.VSCode.Generator.translateModules typeof< Ionide.VSCode.FSharp> ( " .." </> " release" </> " fsharp.js" )
94107)
95108#endif
96109
110+ Target " InstallVSCE" ( fun _ ->
111+ killProcess " npm"
112+ run npmTool " install -g vsce" " "
113+ )
114+
115+ Target " SetVersion" ( fun _ ->
116+ let fileName = " ./release/package.json"
117+ let lines =
118+ File.ReadAllLines fileName
119+ |> Seq.map ( fun line ->
120+ if line.TrimStart() .StartsWith( " \" version\" :" ) then
121+ let indent = line.Substring( 0 , line.IndexOf( " \" " ))
122+ sprintf " %s \" version\" : \" %O \" ," indent release.NugetVersion
123+ else line)
124+ File.WriteAllLines( fileName, lines)
125+ )
126+
127+ Target " BuildPackage" ( fun _ ->
128+ killProcess " vsce"
129+ run vsceTool " package" " release"
130+ !! " release/*.vsix"
131+ |> Seq.iter( MoveFile " ./temp/" )
132+ )
133+
134+ Target " LoginToVSCE" ( fun _ ->
135+ let publisher =
136+ match getBuildParam " vsce-publisher" with
137+ | s when not ( String.IsNullOrWhiteSpace s) -> s
138+ | _ -> getUserPassword " VSCE Publisher: "
139+
140+ let token =
141+ match getBuildParam " vsce-token" with
142+ | s when not ( String.IsNullOrWhiteSpace s) -> s
143+ | _ -> getUserPassword " VSCE Token: "
144+
145+ killProcess " vsce"
146+ run vsceTool ( sprintf " login %s -pat %s " publisher token) " release"
147+ )
148+
149+ Target " PublishToGallery" ( fun _ ->
150+ killProcess " vsce"
151+ run vsceTool " publish" " release"
152+ )
153+
154+ #load " paket-files/fsharp/FAKE/modules/Octokit/Octokit.fsx"
155+ open Octokit
156+
157+ Target " ReleaseGitHub" ( fun _ ->
158+ let user =
159+ match getBuildParam " github-user" with
160+ | s when not ( String.IsNullOrWhiteSpace s) -> s
161+ | _ -> getUserInput " Username: "
162+ let pw =
163+ match getBuildParam " github-pw" with
164+ | s when not ( String.IsNullOrWhiteSpace s) -> s
165+ | _ -> getUserPassword " Password: "
166+ let remote =
167+ Git.CommandHelper.getGitResult " " " remote -v"
168+ |> Seq.filter ( fun ( s : string ) -> s.EndsWith( " (push)" ))
169+ |> Seq.tryFind ( fun ( s : string ) -> s.Contains( gitOwner + " /" + gitName))
170+ |> function None -> gitHome + " /" + gitName | Some ( s: string) -> s.Split().[ 0 ]
171+
172+ StageAll " "
173+ Git.Commit.Commit " " ( sprintf " Bump version to %s " release.NugetVersion)
174+ Branches.pushBranch " " remote ( Information.getBranchName " " )
175+
176+ Branches.tag " " release.NugetVersion
177+ Branches.pushTag " " remote release.NugetVersion
178+
179+ let file = !! ( " ./temp" </> " *.vsix" ) |> Seq.head
180+
181+ // release on github
182+ createClient user pw
183+ |> createDraft gitOwner gitName release.NugetVersion ( release.SemVer.PreRelease <> None) release.Notes
184+ |> uploadFile file
185+ |> releaseDraft
186+ |> Async.RunSynchronously
187+ )
188+
97189// --------------------------------------------------------------------------------------
98190// Run generator by default. Invoke 'build <Target>' to override
99191// --------------------------------------------------------------------------------------
100192
101193Target " Default" DoNothing
194+ Target " Release" DoNothing
102195
103196#if MONO
104197" Clean"
@@ -111,4 +204,12 @@ Target "Default" DoNothing
111204 ==> " Default"
112205#endif
113206
207+ " Default"
208+ ==> " SetVersion"
209+ ==> " InstallVSCE"
210+ ==> " BuildPackage"
211+ ==> " ReleaseGitHub"
212+ // ==> "LoginToVSCE"
213+ ==> " PublishToGallery"
214+ ==> " Release"
114215RunTargetOrDefault " Default"
0 commit comments