Read a MoonBit module's own moon.mod and git metadata at runtime, baked in at build time.
moon add PaiGack/moon_shadowimport {
"PaiGack/moon_shadow/mooninfo",
"PaiGack/moon_shadow/gitinfo",
"PaiGack/moon_shadow/buildinfo",
}
virtual(implement: "PaiGack/moon_shadow/shadow")
rule(
name: "gen",
command: "moon run --target native --target-dir _build/gen .mooncakes/PaiGack/moon_shadow/gen -- \"$input\" \"$output\"",
)
dev_build(rule: "gen", input: "../moon.mod", output: "generated.mbt")import {
"PaiGack/moon_shadow",
}
options(
overrides: [ "your/module/shadow" ],
)let info = @moon_shadow.current()
println(info.name) // "PaiGack/moon_shadow"
println(info.version) // "0.1.1"
println(info.long_version()) // "PaiGack/moon_shadow@0.1.1"
println(info.dep("moonbitlang/moon_config")) // Some(...)
let git = @moon_shadow.git()
println(git.branch) // "main"
println(git.to_version_string()) // "main-dirty 50a396b-dirty"
let build = @moon_shadow.build()
println(build.moon()) // "moon 0.1.20261020"
println(build.moonc()) // "moonc v0.10.16+b1a0e846e"
println(build.profile) // "debug" / "release"
println(build.target) // "wasm-gc" / "js" / "native"mooninfo/ ModuleInfo / Dependency、moon_config 解析、moon.mod 侧渲染
gitinfo/ 公开元信息 API:GitInfo 类型、版本字符串格式,
以及 RepoInfo -> GitInfo 的收口
gitx/gitz/core/ 底层 Git 实现:SHA-1、inflate
gitx/gitz/repo/ 直接读 .git 的那一层(不依赖 git 命令):仓库发现与解析、
.git 布局、HEAD、refs、commit 对象、index、仓库状态
gitx/gitcli/ 另一半:调用 git 命令采集同一份仓库信息
buildinfo/ BuildInfo / ToolchainInfo 类型,profile 与 target 的
targets 选择,以及虚拟包实现文件的渲染
gen/ 生成器可执行文件:读 moon.mod,先问 gitx/gitcli,
失败回退 gitx/gitz/repo,写出实现文件
shadow/ 虚拟包及其生成的默认实现、gen 规则
moon_shadow.mbt 公共 API:current()、git()、build()
moon_shadow_example/ 一个使用者模块,即上述配置的完整示例pub fn module_info() -> @PaiGack/moon_shadow/mooninfo.ModuleInfo
pub fn git_info() -> @PaiGack/moon_shadow/gitinfo.GitInfo
pub fn build_info() -> @PaiGack/moon_shadow/buildinfo.BuildInfo///|
pub fn build_info() -> @PaiGack/moon_shadow/buildinfo.BuildInfo {
@PaiGack/moon_shadow/buildinfo.BuildInfo::from_toolchain({
moon_version: "0.1.20261020",
moonc_version: "v0.10.16+b1a0e846e",
})
}Install
Download zipRead a MoonBit module's own moon.mod and git metadata at runtime, baked in at build time.