Бали — минималистичный инструмент для сборки и упаковки приложений на Golang
Бали (Bali) — это минималистичный инструмент, разработанный на языке Golang, который помогает собирать и упаковывать приложения.
У инструмента есть несколько полезных функций:
На платформе Windows инструмент поддерживает встроенную информацию о версии, значки и манифест приложения.
Формат | Поддерживаемые методы сжатия |
---|---|
rpm | gzip, zstd, lzma, xz |
tar | none (чистый tar), gzip (tar.gz), zstd (tar.zst), xz (tar.xz), bzip2 (tar.bz2), brotli (tar.br) |
sh | none (чистый tar), gzip (tar.gz), zstd (tar.zst), xz (tar.xz), bzip2 (tar.bz2) |
zip | deflate, zstd, bzip2, xz |
Использование: bali <команда> [флаги]
Бали — минималистичный инструмент для сборки и упаковки приложений на Golang.
Флаги:
-h, --help Показать контекстно-зависимую справку.
-M, --module="." Явно указать каталог модуля.
-B, --build="build" Явно указать директорию сборки.
-V, --verbose Сделать операцию более разговорчивой.
-v, --version Вывести информацию о версии и выйти.
Команды:
build Скомпилировать текущий модуль (по умолчанию).
update Обновить зависимости, как записано в go.mod.
clean Удалить сгенерированные артефакты.
Для получения дополнительной информации о команде выполните «bali <command> --help».
Использование: bali build [флаги]
Скомпилируйте текущий модуль (по умолчанию)
Флаги:
-h, --help Показать контекстно-зависимую справку.
-M, --module="." Явно указать каталог модуля.
-B, --build="build" Явно указать директорию сборки.
-V, --verbose Сделать операцию более разговорчивой.
-v, --version Вывести информацию о версии и выйти.
-T, --target="windows" Целевая ОС, для которой компилируется код.
-A, --arch="amd64" Целевая архитектура, для которой компилируется код.
--release=STRING Указывает тег версии пакета rpm.
-D, --destination="dest" Указать место сохранения пакета.
--pack=PACK,... Упаковать в определённом формате. Поддерживается: zip,
tar, sh, rpm
--compression=STRING Указывает метод сжатия.
Обычная сборка:
cd /path/to/project
bali
Создать сжатый пакет Tar.gz:
bali --pack=tar
Создайте установочный пакет STGZ, который в основном используется на платформах Linux/macOS:
bali --pack=sh --target=linux --arch=amd64
Выведите установочный пакет в указанный каталог:
bali --pack=rpm --target=linux --arch=amd64 --dest=/tmp/output
Создание нескольких пакетов одновременно:
bali --target=linux --arch=arm64 '--pack=sh,rpm,tar'
Файл проекта bali.toml:
# https://toml.io/en/
name = "bali"
summary = "Bali — Minimalist Golang build and packaging tool"
description = "Bali — Minimalist Golang build and packaging tool"
package-name = "bali-dev"
version = "3.1.0"
license = "MIT"
prefix = "/usr/local"
crates = [
"cmd/bali", # crates
"cmd/peassets",
]
[[include]]
path = "LICENSE"
destination = "share"
rename = "BALI-COPYRIGHT.txt"
permissions = "0664"
Встроенные переменные среды:
BUILD_VERSION
заполняется полем version файла balisrc.json;BUILD_TIME
заполняется временем сборки в соответствии с RFC3339;BUILD_COMMIT
заполняется идентификатором фиксации репозитория (когда это репозиторий git);BUILD_GOVERSION
заполняется выводом go version (префикс go version удалён);BUILD_BRANCH
заполняется именем ветки репозитория (если это репозиторий git).Другие переменные среды можно использовать в goflags.
Файл сборки программы crate.toml:
name = Бали — минималистичный инструмент для сборки и упаковки приложений на Golang
destination = "bin"
version = "3.1.0"
goflags = [
"-ldflags",
"-X 'main.VERSION=$BUILD_VERSION' -X 'main.BUILD_TIME=$BUILD_TIME' -X 'main.BUILD_BRANCH=$BUILD_BRANCH' -X 'main.BUILD_COMMIT=$BUILD_COMMIT' -X 'main.BUILD_REFNAME=$BUILD_REFNAME' -X 'main.BUILD_GOVERSION=$BUILD_GOVERSION'",
]
Файлы манифеста, связанные с crate.toml (Windows): winres.toml:
```toml
icon = "res/bali.ico" # data:base64-content
manifest = """data:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<description>Bali</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
"""
[FixedFileInfo]
FileFlagsMask = "3f"
FileFlags = "00"
FileOS = "40004"
FileType = "01"
FileSubType = "00"
[FixedFileInfo.FileVersion]
Major = 0
Minor = 0
Patch = 0
Build = 0
[FixedFileInfo.ProductVersion]
Major = 0
Minor = 0
Patch = 0
Build = 0
[StringFileInfo]
Comments = ""
CompanyName = "Bali Team"
FileDescription = "Bali — минималистичный инструмент для сборки и упаковки приложений на Golang"
FileVersion = ""
InternalName = "bali.exe"
LegalCopyright = "Copyright © 2024. Bali contributors"
LegalTrademarks = ""
OriginalFilename = "bali.exe"
PrivateBuild = ""
ProductName = "Bali"
ProductVersion = ""
SpecialBuild = ""
[VarFileInfo]
[VarFileInfo.Translation]
LangID = "0409"
CharsetID = "04B0"
Бали интегрирует goversioninfo. Когда целью является Windows, он может встраивать информацию о версии (winres.toml) в исполняемую программу.
Преимущества добавления ссылки на программный манифест очевидны. Например, эскалация привилегий UAC в Windows, поддержка длинных путей в Windows 10 (т. е. поддержка путей > 260 символов), элементы управления в стиле Windows Vista, TaskDialog, настройки DPI и т. д. — всё это требует изменения манифеста приложения.
## Bootstrap
Обычно после установки и настройки среды Golang вы можете выполнить следующую команду для завершения начальной загрузки Bali:
UNIX:
```shell
./script/bootstrap.sh
Windows:
# powershell
pwsh ./script/bootstrap.ps1
# cmd
script/bootstrap.bat
go install github.com/balibuild/bali/v3/cmd/bali@latest
Спасибо!
Способность Bali автоматически добавлять информацию о версии в файлы PE неотделима от вклада проектов с открытым исходным кодом. Большое спасибо разработчику и сопровождающему двух проектов akavel/rsrc и josephspurrier/goversioninfo.
Иконки организации Bali Github и собственные иконки Bali взяты с сайта www.flaticon.com. Создатель — Smashicons.
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.