validate <project> 配置、脚本、引用校验
dev <project> [--sync] 开发运行;sync 跟随 LetsGal 工程
migrate <source> <target>
只读源工程 → 新原生项目,验证后发布
bundle <project> --output <dir> [--benchmark]
编译、资源校验、hardened Engine 与完整发行目录
pack <project> 高级 Hakutaku 资源打包
remap ... 高级资源引用迁移
perf <project> [--startup] 开发测量
Cargo aliases 与 executable 使用同名动词;具体参数以 --help 为准。
正式内容先验证/编译,再加载或创建 publisher identity;失败保留已有可运行发布目录。
identity 与内嵌 key 不记录、不提交、不缓存,也不传给无需它的 child build。
cargo build --release --locked -p keine-editor --bin editor
cargo build --release --locked -p keine --bin keine --no-default-features --features audio-all,ui-sounds,video-native
bash dev/scripts/package-authoring-macos.sh target/release/editor target/release/keine /path/to/fresh-output
bash dev/scripts/bundle-macos.sh <project> <app-name> <reverse-dns-bundle-id>第一条打包脚本使用预构建二进制,产出相邻 Kēne Editor.app / Kēne Engine.app。
目标必须是新目录;Engine discovery 与协议必须匹配。
Editor 导入图片无需外部工具;导入非规范音视频需要可执行的 FFmpeg(libopus/libx264),
可安装到 PATH 或放在 Editor executable 旁/Resources 内。当前打包脚本不附带 FFmpeg;
Engine 播放规范媒体不依赖这项导入工具。
开发包使用 ad hoc 签名;正式签名和 notarization 尚不属于当前交付。
验收包括 codesign --verify --deep --strict、ZIP 解压后启动、独立安装后 sibling discovery。
先本机创建稳定的 Hakutaku identity,将其 base64 放进游戏仓库 Actions secret
HAKUTAKU_IDENTITY_BASE64。同一发布 lineage 始终复用同一身份。
name: Release
on:
workflow_dispatch:
push:
tags: ["v*"]
permissions:
contents: read
jobs:
release:
uses: maincoretech/keine/.github/workflows/project-release.yml@<40-character-keine-commit>
with:
project-path: .
artifact-name: my-game-linux-x64
retention-days: 14
secrets:
HAKUTAKU_IDENTITY_BASE64: ${{ secrets.HAKUTAKU_IDENTITY_BASE64 }}完整 SHA 同时确定 workflow 与 Engine;branch/tag/短 SHA 被拒绝。
身份只在 runner 临时私有路径恢复,上传前无条件清理。
缓存只有 Cargo downloads 与 Kēne build trees,不含游戏 checkout、完整发行包或身份。
产物包含 executable、game.haku、data/、非秘密 provenance。
mutable ref、路径逃逸、缺失身份、非生产媒体、构建失败或未解析动态库均 fail closed,不上传半成品。
当前复用工作流面向 Linux x64;macOS/Windows 本机运行态验收不由它代替。
入口:project-release.yml、
publisher、构建脚本。