可扩展的构建系统。
一个具体的构建任务,将会根据任务要求以及输入输出文件的修改日期决定该Task是否运行。
一个动作,将会根据参数创建对应的(一对多的)Task,它被写在脚本里。
.NET DLL文件,里面包含一些Action,供Bake脚本调用。
使用Import动作导入Module并调用其Action,用于描述真实的项目构建过程。
- 根据项目特点编写Modules(可选),Module包含一些Actions。
- 为要构建的项目创建Build.bake,bake脚本使用Import导入需要的Modules后调用Action编写此脚本和子脚本。
- 执行构建。
这个脚本用于构建Bake构建系统本身,并且将会在publish文件夹下整理各个平台的二进制文件、NuGet包和源代码。
Title "Bake Building System"
Print "=== Bake Building System ==="
Set $Output "publish"
GetDateTime $DateTime
Set $PublishToPlatform "dotnet publish Bake/Bake.fsproj -c Release"
Run {
$PublishToPlatform -p:PublishTrimmed=true -f net472
$PublishToPlatform -r osx-x64 -f netcoreapp3.1
$PublishToPlatform -p:PublishTrimmed=true -r linux-x64 -f netcoreapp3.1
dotnet pack Bake.Core/Bake.Core.fsproj -o $Output -c Release
dotnet pack Bake.Actions/Bake.Actions.fsproj -o $Output -c Release
dotnet pack Bake.Parser/Bake.Parser.fsproj -o $Output -c Release
}
CreateDirectory {
$Output
$Output/src
$Output/src/Bake
$Output/src/Bake.Core
$Output/src/Bake.Actions
$Output/src/Bake.Parser
}
Action CopyProject projectName {
Copy "$Output/src/projectName" {
projectName/*.fs
projectName/*.fsproj
projectName/Properties
}
}
Parallel {
Zip "$Output/Bake-bin-windows-$DateTime.zip" {
Bake/bin/Release/net472/publish/*
}
Zip "$Output/Bake-bin-osx-x64-$DateTime.zip" {
Bake/bin/Release/netcoreapp3.1/osx-x64/publish/*
}
Zip "$Output/Bake-bin-linux-x64-$DateTime.zip" {
Bake/bin/Release/netcoreapp3.1/linux-x64/publish/*
}
Atomic {
Parallel {
CopyProject Bake.Core
CopyProject Bake.Actions
CopyProject Bake.Parser
CopyProject Bake
Copy "$Output/src" {
LICENSE
Bake.sln
Package.bake
README.md
}
}
Zip "$Output/Bake-src-$DateTime.zip" {
$Output/src/*
}
}
}
- 可使用.NET DLL导入扩展模块