bump version to 0.2.0 for mooncakes.io release
MoonFlagKit 是一个面向 MoonBit 的轻量级功能开关(Feature Flag)与灰度发布(Canary Release)决策引擎。它专注于解答运行时的一个核心问题:给定某个功能的配置与请求上下文,该功能是否应该开启?应返回哪种变体?决策的审计日志和依据是什么?
本项目非常适用于 WebAssembly Edge 实验、Wasm 边缘计算服务、CLI 命令行工具以及各种需要确定性灰度分桶、而无需依赖远程复杂控制面的轻量级微服务和单体应用。
核心贡献者:王正本人
control
treatment_red
treatment_blue
Eq
Ne
Gt
Lt
Ge
Le
Contains
In
NotIn
Decision
@json
JsonConfigProvider
evaluate(flag, context) -> Decision
evaluate_all(flags, context) -> Array[Decision]
explain(decision) -> String
validate_flags(flags) -> Array[FlagDiagnostic]
JsonConfigProvider::new(json_string)
parse_flags(input)
let promo_flag : @moonflagkit.Flag = { name: "promo_banner", enabled: true, default_enabled: false, rollout: 100, salt: "promo_salt", rules: [ @moonflagkit.AllowVariant("vip_user", "treatment_b"), @moonflagkit.WhenVariant("plan", In, "pro,enterprise", "treatment_a") ], is_multivariate: true, variants: [ { name: "control", weight: 50 }, { name: "treatment_a", weight: 30 }, { name: "treatment_b", weight: 20 } ], default_variant: "control" } let context : @moonflagkit.EvalContext = { subject: "user_bob", environment: "production", attributes: [ { key: "plan", value: "pro" } ] } let decision = @moonflagkit.evaluate(promo_flag, context) println(@moonflagkit.explain(decision))
{ "flags": [ { "name": "multivariate_promo_banner", "enabled": true, "default_enabled": false, "rollout": 100, "salt": "promo_salt", "is_multivariate": true, "default_variant": "control", "variants": [ { "name": "control", "weight": 50 }, { "name": "treatment_red", "weight": 30 }, { "name": "treatment_blue", "weight": 20 } ], "rules": [ { "type": "AllowVariant", "subject": "vip_user_1", "variant": "treatment_blue" }, { "type": "WhenVariant", "key": "plan", "op": "In", "value": "pro,enterprise", "variant": "treatment_red" } ] } ] }
在最新 MoonBit 工具链(0.10.3 及以上版本)中,您可以在项目根目录中安全地执行以下所有验收指令。项目内置的 moon CLI 包装脚本会自动过滤过时的参数以保证跨环境执行通过:
moon
# 对项目进行类型检查 moon check # 代码格式化自检 moon fmt --deny-warn # 自动生成公共接口 .mbti 自检 moon info --deny-warn # 运行所有单元与集成测试 moon test # 运行 CLI 演示程序 moon run cmd/main
q0w1ertyuiop/moonflagkit
要将决策内核集成到您的应用,请直接在您的 moon.mod 依赖列表中申明:
moon.mod
MoonFlagKit 是一个面向 MoonBit 生态的轻量级功能开关与灰度发布决策引擎,提供布尔开关、白名单/黑名单、上下文条件、稳定百分比灰度、配置解析、诊断和 CLI 示例。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MoonFlagKit
MoonFlagKit 是一个面向 MoonBit 的轻量级功能开关(Feature Flag)与灰度发布(Canary Release)决策引擎。它专注于解答运行时的一个核心问题:给定某个功能的配置与请求上下文,该功能是否应该开启?应返回哪种变体?决策的审计日志和依据是什么?
本项目非常适用于 WebAssembly Edge 实验、Wasm 边缘计算服务、CLI 命令行工具以及各种需要确定性灰度分桶、而无需依赖远程复杂控制面的轻量级微服务和单体应用。
核心贡献者:王正本人
核心特性
control,treatment_red,treatment_blue)并进行自定义重量级配比分桶。Eq(等于),Ne(不等于),Gt(大于),Lt(小于),Ge(大于等于),Le(小于等于),Contains(包含子串),In(列表内),NotIn(列表外)。Decision中记录详尽的审计 trace,方便调试与审计决策路径。@json的JsonConfigProvider,支持直接从 JSON 格式的配置文件中加载复杂的 Flag、Variant 以及 Rules。公共 API
evaluate(flag, context) -> Decision:评估单个功能的开关状态。evaluate_all(flags, context) -> Array[Decision]:批量评估一组开关状态。explain(decision) -> String:格式化输出带有审计日志的决策结果。validate_flags(flags) -> Array[FlagDiagnostic]:诊断自检 Flag 列表。JsonConfigProvider::new(json_string):创建 JSON 开关配置源提供者。parse_flags(input):解析行导向的简易文本配置(适配兼容旧版格式,支持多变体规则扩展)。核心代码示例
JSON 配置文件格式
本地开发与指令自查
在最新 MoonBit 工具链(0.10.3 及以上版本)中,您可以在项目根目录中安全地执行以下所有验收指令。项目内置的
moonCLI 包装脚本会自动过滤过时的参数以保证跨环境执行通过:平台仓库链接
q0w1ertyuiop/moonflagkit依赖声明 (Mooncakes)
要将决策内核集成到您的应用,请直接在您的
moon.mod依赖列表中申明: