-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathPackageTasks.fs
110 lines (84 loc) · 4.06 KB
/
PackageTasks.fs
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
module PackageTasks
open MessagePrompts
open BasicTasks
open TestTasks
open BlackFox.Fake
open Fake.Core
open Fake.IO.Globbing.Operators
open System.Text.RegularExpressions
/// https://github.com/Freymaurer/Fake.Extensions.Release#release-notes-in-nuget
let private replaceCommitLink input =
let commitLinkPattern = @"\[\[#[a-z0-9]*\]\(.*\)\] "
Regex.Replace(input,commitLinkPattern,"")
module BundleDotNet =
let bundle (versionTag : string) (versionSuffix : string option) =
System.IO.Directory.CreateDirectory(ProjectInfo.netPkgDir) |> ignore
!! "src/**/*.*proj"
-- "src/bin/*"
|> Seq.iter (Fake.DotNet.DotNet.pack (fun p ->
let msBuildParams =
{p.MSBuildParams with
Properties = ([
"Version",versionTag
"PackageReleaseNotes", (ProjectInfo.release.Notes |> List.map replaceCommitLink |> String.toLines )
] @ p.MSBuildParams.Properties)
}
{
p with
VersionSuffix = versionSuffix
MSBuildParams = msBuildParams
OutputPath = Some ProjectInfo.netPkgDir
}
))
let packDotNet = BuildTask.create "PackDotNet" [clean; build; runTests] {
BundleDotNet.bundle ProjectInfo.stableVersionTag None
}
let packDotNetPrerelease = BuildTask.create "PackDotNetPrerelease" [setPrereleaseTag; clean; build; runTests] {
BundleDotNet.bundle ProjectInfo.prereleaseTag (Some ProjectInfo.prereleaseTag)
}
module BundleJs =
let bundle (versionTag: string) =
Fake.JavaScript.Npm.run "bundlejs" (fun o -> o)
GenerateIndexJs.ARCtrl_generate ProjectInfo.npmPkgDir
Fake.IO.File.readAsString "build/release_package.json"
|> fun t ->
let t = t.Replace(ProjectInfo.stableVersionTag, versionTag)
Fake.IO.File.writeString false $"{ProjectInfo.npmPkgDir}/package.json" t
Fake.IO.File.readAsString "README.md"
|> Fake.IO.File.writeString false $"{ProjectInfo.npmPkgDir}/README.md"
"" // "fable-library.**/**"
|> Fake.IO.File.writeString false $"{ProjectInfo.npmPkgDir}/fable_modules/.npmignore"
Fake.JavaScript.Npm.exec "pack" (fun o ->
{ o with
WorkingDirectory = ProjectInfo.npmPkgDir
})
let packJS = BuildTask.create "PackJS" [clean; build; runTests] {
BundleJs.bundle ProjectInfo.stableVersionTag
}
let packJSPrerelease = BuildTask.create "PackJSPrerelease" [setPrereleaseTag; clean; build; runTests] {
BundleJs.bundle ProjectInfo.prereleaseTag
}
module BundlePy =
let bundle (versionTag: string) =
run dotnet $"fable src/ARCtrl -o {ProjectInfo.pyPkgDir}/arctrl --lang python" ""
run python "-m poetry install --no-root" ProjectInfo.pyPkgDir
GenerateIndexPy.ARCtrl_generate (ProjectInfo.pyPkgDir + "/arctrl")
Fake.IO.File.readAsString "pyproject.toml"
|> fun t ->
let t = t.Replace(ProjectInfo.stableVersionTag, versionTag)
Fake.IO.File.writeString false $"{ProjectInfo.pyPkgDir}/pyproject.toml" t
Fake.IO.File.readAsString "README.md"
|> Fake.IO.File.writeString false $"{ProjectInfo.pyPkgDir}/README.md"
//"" // "fable-library.**/**"
//|> Fake.IO.File.writeString false $"{ProjectInfo.npmPkgDir}/fable_modules/.npmignore"
run python "-m poetry build" ProjectInfo.pyPkgDir //Remove "-o ." because not compatible with publish
let packPy = BuildTask.create "PackPy" [clean; build; runTests] {
BundlePy.bundle ProjectInfo.stableVersionTag
}
//let packPyPrerelease = BuildTask.create "PackJSPrerelease" [setPrereleaseTag; clean; build; runTests] {
// if promptYesNo (sprintf "[NPM] package tag will be %s OK?" ProjectInfo.prereleaseTag ) then
// BundleJs.bundle ProjectInfo.prereleaseTag
// else failwith "aborted"
// }
let pack = BuildTask.createEmpty "Pack" [packDotNet; packJS; packPy]
let packPrerelease = BuildTask.createEmpty "PackPrerelease" [packDotNetPrerelease;packJSPrerelease]