在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Bali - 极简的 Golang 构建打包工具Bali 是一个使用 Golang 开发的极简 Golang 构建打包工具,Bali(old) 最初使用 PowerShell 编写,用于解决项目构建过程中的打包和配置设置等问题。Bali(old) 在构建时能够将,时间,git 的 commit 等信息填充到构建的二进制文件中,在追溯应用程序缺陷时有一定的用处。但基于 PowerShell 开发的 Bali 并没有直接支持创建 功能Bali 有一些功能是我觉得有些用处的:
bali 的命令行帮助信息如下: Bali - Minimalist Golang build and packaging toolusage: ./build/bin/bali <option> args ... -h|--help Show usage text and quit -v|--version Show version number and quit -V|--verbose Make the operation more talkative -F|--force Turn on force mode. eg: Overwrite configuration file -w|--workdir Specify bali running directory. (Position 0, default $PWD) -a|--arch Build arch: amd64 386 arm arm64 -t|--target Build target: windows linux darwin ... -o|--out Specify build output directory. default '$PWD/build' -d|--dest Specify the path to save the package -z|--zip Create archive file (UNIX: .tar.gz, Windows: .zip) -p|--pack Create installation package (UNIX: STGZ, Windows: none) --cleanup Cleanup build directory --no-rename Disable file renaming (STGZ installation package, default: OFF) 使用方法普通构建: bali /path/to/project 创建 bali /path/to/project -z 创建 bali /path/to/project -p 将安装包输出到指定目录: bali /path/to/project -p -d /tmp/output# # bali /path/to/project -p -d/tmp/output# bali /path/to/project -p -d=/tmp/output# bali /path/to/project -p --dist=/tmp/output# bali /path/to/project -p --dist /tmp/output Bali 构建文件格式Bali 同时支持 TOML 或者 JSON 格式的项目文件,JSON 使用内置解析不支持注释,TOML 支持注释。Bali 构建文件有两种,一种是项目文件 项目文件 { // name 用于项目打包命名 "name": "bali", // 用于打包的版本 "version": "1.0.0", // bali 配置文件等 "files": [ { "path": "config/bali.json", "destination": "config" }, { "path": "LICENSE", // 安装目录 "destination": "share", // 安装/配置时重命名文件 "newname": "LICENSE.bali", // 创建 STGZ 安装包时,不改名,即安装时如果存在相应文件则会覆盖,默认不会覆盖 "norename": true } ], // 程序相对目录 "dirs": [ "cmd/bali" ]} 项目文件 # https://toml.io/en/name = "bali"version = "1.2.11"dirs = [ "cmd/bali", # dirs][[files]]path = "LICENSE"destination = "share"newname = "LICENSE.bali"norename = true 程序构建文件 { // 二进制文件名称,不存在时使用目录名 "name": "bali", // 描述信息,默认填充到 PE 文件版本信息的 FileDescription "description": "Bali - Minimalist Golang build and packaging tool", // 安装目录 "destination": "bin", // 版本信息,在 goflags 中,可以推导 $BUILD_VERSION "version": "1.0.0", // 二进制的符号链接,比如在 GCC/Clang 编译后,程序为 GCC-9 然后会创建 GCC 的符号链接。 "links": [ "bin/baligo" ], // Go 编译器的参数,这些参数会使用 ExpandEnv 展开 "goflags": [ "-ldflags", "-X 'main.VERSION=$BUILD_VERSION' -X 'main.BUILDTIME=$BUILD_TIME' -X 'main.BUILDBRANCH=$BUILD_BRANCH' -X 'main.BUILDCOMMIT=$BUILD_COMMIT' -X 'main.GOVERSION=$BUILD_GOVERSION'" ], // 构建 Windows 目标,PE 文件的版本信息 "versioninfo": "res/versioninfo.json", // 构建 Windows 目标,PE 文件的图标 "icon": "res/bali.ico", // 构建 Windows 目标,PE 文件的应用程序清单 "manifest": "res/bali.manifest"} 程序构建文件 name = "bali"description = "Bali - Minimalist Golang build and packaging tool"destination = "bin"version = "1.2.11"versioninfo = "res/versioninfo.json"icon = "res/bali.ico"manifest = "res/bali.manifest"links = ["bin/baligo"]goflags = [ "-ldflags", "-X 'main.VERSION=$BUILD_VERSION' -X 'main.BUILDTIME=$BUILD_TIME' -X 'main.BUILDBRANCH=$BUILD_BRANCH' -X 'main.BUILDCOMMIT=$BUILD_COMMIT' -X 'main.GOVERSION=$BUILD_GOVERSION'",] 内置环境变量:
可以在 goflags 中使用其他环境变量。
{ "FixedFileInfo": { "FileVersion": { "Major": 0, "Minor": 0, "Patch": 0, "Build": 0 }, "ProductVersion": { "Major": 0, "Minor": 0, "Patch": 0, "Build": 0 }, "FileFlagsMask": "3f", "FileFlags ": "00", "FileOS": "40004", "FileType": "01", "FileSubType": "00" }, "StringFileInfo": { "Comments": "", "CompanyName": "Bali Team", "FileDescription": "Bali - Minimalist Golang build and packaging tool", "FileVersion": "", "InternalName": "bali.exe", "LegalCopyright": "Copyright \u00A9 2021. Bali contributors", "LegalTrademarks": "", "OriginalFilename": "bali.exe", "PrivateBuild": "", "ProductName": "Bali", "ProductVersion": "1.0", "SpecialBuild": "" }, "VarFileInfo": { "Translation": { "LangID": "0409", "CharsetID": "04B0" } }} Bali 整合了 添加引用程序清单的好处不言而喻,比如 Windows 的 UAC 提权,Windows 10 长路经支持(即路径支持 >260 字符),Windows Vista 风格控件,TaskDialog,DPI 设置等都需要修改应用程序清单。 自举通常在安装配置好 Golang 环境后,你可以按照下面的命令完成 Bali 的自举: UNIX: ./script/bootstrap.sh Windows: # 使用 powershell 运行pwsh ./script/bootstrap.ps1# 或者在 cmd 中运行script/bootstrap.bat 感谢Bali 自动添加版本信息到 PE 文件的功能离不开开源项目的贡献,在这里非常感谢 akavel/rsrc 和 josephspurrier/goversioninfo 两个项目的开发者和维护者。 Bali Github 组织和 Bali 自身的图标来源于 www.flaticon.com 制作者为 Smashicons。 |
请发表评论