246c2b22f1
- Implement async stdout/stderr streaming with event channel - Add Repology endpoint configuration in dependencies config - Refactor PackageManager trait to return Vec<Command> - Add bootstrap configuration example - Remove temp/privdrop.rs
241 lines
8.3 KiB
YAML
241 lines
8.3 KiB
YAML
# prebake.yaml.tmpl
|
||
#
|
||
# 术语说明:
|
||
# 可选:该字段可以不给出
|
||
# 默认为...:隐含“可选”
|
||
# 留空:尚未定义,留作后续
|
||
|
||
# 版本号,用于格式兼容性检查
|
||
version: "1.0"
|
||
|
||
# 构建环境定义
|
||
environment:
|
||
# 构建机类型:docker | firecracker | custom | baremetal
|
||
builder: "docker"
|
||
|
||
# 构建机配置,与builder一致的被启用。
|
||
baremetal: {}
|
||
|
||
docker:
|
||
# 镜像名,与dockerfile互斥
|
||
image: "rust:1.70-slim"
|
||
|
||
# Dockerfile路径,相对于项目根目录,与image互斥
|
||
dockerfile: "/Dockerfile"
|
||
# Docker构建参数,可选
|
||
build_args:
|
||
RUST_VERSION: "1.70"
|
||
|
||
firecracker: {}
|
||
# TODO: 定义firecracker结构
|
||
|
||
custom:
|
||
# 自定义构建机名称
|
||
name: "my-custom-builder"
|
||
# 设置脚本,相对于项目根目录
|
||
setup_script: "setup-builder.sh"
|
||
# 清洁脚本,相对于项目根目录
|
||
cleanup_script: "cleanup-builder.sh"
|
||
|
||
# 硬件资源要求,满足最小要求的构建机可以被选中
|
||
resources:
|
||
cpu: 2 # CPU核心数,默认为1
|
||
memory: "2G" # 内存大小,也可以写作2048MB,默认为"1G"
|
||
disk: "10G" # 磁盘空间,也可以写作10240MB,默认为"1G"
|
||
architecture: "x86_64" # 架构要求,只能是"noarch"或{"x86_64"/"amd64", "arm64"/"aarch64", "riscv64", "loongarch64"/"loong64"}中的一个或几个
|
||
# TODO: 重新设计GPU字段
|
||
# gpu: false # 是否需要GPU,默认为false
|
||
# gpu_type: "cuda" # GPU类型(如果需要),可以是"cuda", "rocm", "vulkan", "oneapi"中的一个或几个
|
||
tags: # 自定义标签,只有满足标签的构建机可以被选中
|
||
- "custom_tag"
|
||
|
||
# 网络配置
|
||
network:
|
||
enabled: true # 启用网络,对baremetal不适用,默认为true
|
||
outbound: true # 允许出站连接,对baremetal不适用,默认为true
|
||
dns_servers: # 指定构建机的DNS服务器,对baremetal不适用,custom应该自行处理DNS问题,可选
|
||
- "8.8.8.8"
|
||
- "1.1.1.1"
|
||
proxies: # 代理配置,暂时留空,可选
|
||
|
||
# 构建环境初始化
|
||
bootstrap:
|
||
# 构建用户,默认为 vulcan(火神)
|
||
# 设定为 "root" 表示忽略用户切换并禁用安全特性,需要 PIPELINE_PRIVILEGED 权限
|
||
user: "vulcan"
|
||
|
||
# 工作空间
|
||
workspace:
|
||
# 工作目录路径
|
||
path: "/home/vulcan/workspace"
|
||
# 路径不可用时回退到 /workspace
|
||
# 即使路径可用,也会在 /workspace 建立软链接
|
||
fallback: true
|
||
|
||
# 自定义 sudoers 文件内容
|
||
# 这会覆盖默认行为,可能绕过安全机制
|
||
# 需要 PIPELINE_CUSTOM_SUDOERS 权限
|
||
sudoers: "vulcan ALL=(ALL:ALL) NOPASSWD: ALL"
|
||
|
||
# 自定义 doas 文件内容
|
||
# 这会覆盖默认行为,可能绕过安全机制
|
||
# 与 sudoers 共享 PIPELINE_CUSTOM_SUDOERS 权限
|
||
doas: "permit nopass vulcan as root"
|
||
|
||
# 自定义 bootstrap 脚本(与上述所有字段互斥)
|
||
# 支持多种来源:
|
||
# workspace:///.workshop/bootstrap.sh - 项目内文件
|
||
# file:///bin/bootstrap.sh - 环境内文件
|
||
# server://bootstrap.sh - 由服务器提供
|
||
# https://example.com/bootstrap.sh - http/https网络下载,请确保构建环境可以连接到该URL
|
||
# (content) - 直接给出内容,当文本开头无法匹配任何scheme时采用
|
||
# 需要 PIPELINE_CUSTOM_BOOTSTRAP 权限
|
||
custom: "server://bootstrap-alpine.sh"
|
||
|
||
|
||
|
||
# 依赖定义,安装依赖时按system-user顺序进行
|
||
dependencies:
|
||
# Repology 端点配置,用于将 UPM 包名解析为系统包名
|
||
# 可选值:disabled, none, local, remote, server, default
|
||
# - disabled: 完全禁用 Repology
|
||
# - none: 不解析,直接使用原始包名
|
||
# - local: 使用本地 Repology 服务器
|
||
# - remote: 使用远程 Repology API
|
||
# - server: 由服务器提供 Repology 服务
|
||
# - default: 默认行为(通常等同于 local)
|
||
config:
|
||
repology_endpoint: "default"
|
||
|
||
# 系统包依赖,按包管理器枚举给出,只应该给出与环境契合的字段。
|
||
# 根据security.drop-after的配置,在此阶段一般具有root或免密root权限
|
||
# 不适用于裸机
|
||
system:
|
||
apt:
|
||
packages: # 安装的软件包
|
||
- "git"
|
||
- "curl"
|
||
- "build-essential"
|
||
- "pkg-config"
|
||
- "libssl-dev"
|
||
repositories: # 该字段按serde Value原样传递给插件,config.rs不做解析
|
||
- url: "ppa:custom/ppa" # 自定义PPA(Ubuntu)
|
||
- url: "https://download.docker.com/linux/ubuntu" # DEB822
|
||
key: "https://download.docker.com/linux/ubuntu/gpg"
|
||
mirror: "https://mirrors.tuna.tsinghua.edu.cn" # 指定软件包镜像源,可选
|
||
pacman:
|
||
packages:
|
||
- "git"
|
||
- "curl"
|
||
- "base-devel"
|
||
- "pkg-config"
|
||
- "openssl"
|
||
repositories:
|
||
- server: "https://mirrors.tuna.tsinghua.edu.cn/arch4edu/$arch" # 自定义仓库(Arch)
|
||
name: "arch4edu"
|
||
keypackage: "arch4edu-keyring"
|
||
mirror: "https://mirrors.tuna.tsinghua.edu.cn" # 指定软件包镜像源,可选
|
||
#dnf:
|
||
# 略
|
||
|
||
# 用户依赖
|
||
# 根据security.drop-after的配置,在此阶段一般不具有root权限
|
||
# 例外:语言依赖会在system中产生隐式依赖
|
||
user:
|
||
# 以下字段按serde Value原样传递给插件,config.rs不做解析
|
||
# rust:
|
||
# type: "rustup" # 此时会向系统引入隐式的rustup依赖
|
||
# toolchain: "nightly-x86_64-unknown-linux-gnu"
|
||
# manifest: "Cargo.toml"
|
||
# lock: "Cargo.lock"
|
||
# python:
|
||
# type: "uv"
|
||
# python: "python3.14"
|
||
# index: "http://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
||
# directory: ".venv"
|
||
# env: # 优先,高级选项
|
||
# UV_PYTHON: "python3.14"
|
||
# UV_INDEX: "http://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
||
# UV_DIRECTORY: ".venv"
|
||
# manifest: "requirements.txt" # 或pyproject.toml
|
||
# nix: {}
|
||
# # TBD: 没用过lol
|
||
# # PR welcome
|
||
custom: # 绝对的自定义,与上述全部配置互斥(custom独占)
|
||
- command: "cargo fetch"
|
||
working_dir: "/tmp"
|
||
|
||
# 环境变量配置
|
||
envvars:
|
||
# 构建环境变量,只在 prebake 阶段有效
|
||
# 用于控制 prebake 阶段的行为(apt/cargo/rustc 等)
|
||
prebake:
|
||
RUST_BACKTRACE: "full" # Rust 调试
|
||
CARGO_NET_GIT_FETCH_WITH_CLI: "true" # Cargo 配置
|
||
NODE_ENV: "production" # Node 环境
|
||
|
||
# 运行时环境变量(会传递给 bake 阶段)
|
||
# 这些变量会与项目中的 .env 文件合并后,作为最终环境
|
||
bake:
|
||
# 支持 secret 引用,格式: {{ secret.<key> }}
|
||
DATABASE_URL: "postgresql://user:{{ secret.dbpassword }}@localhost/db"
|
||
LOG_LEVEL: "info"
|
||
|
||
# 特殊变量:指定项目中 .env 文件的位置
|
||
# 系统会读取该文件,并将其中的变量与上面定义的变量合并
|
||
# 合并规则:prebake.yml 中定义的变量优先级更高,会覆盖 .env 中的同名变量
|
||
# 此变量本身不会传递给 bake 阶段
|
||
# .env不应该包含任何 secret !
|
||
__ENV_FILE: ".env"
|
||
|
||
# 注意:
|
||
# - secret 只存在于内存中,不会写入磁盘
|
||
# - 日志中会自动遮蔽 secret 的值
|
||
# - 如需临时查看 secret,可使用 PIPELINE_UNCOVER_SECRET 权限(需 2FA)
|
||
|
||
|
||
# 缓存配置
|
||
cache:
|
||
# 缓存目录
|
||
directory:
|
||
- path: "/usr/local/cargo"
|
||
strategy: "always" # 在"always","readonly","clean"和"never"中选择一个,可以被流水线启动时配置覆盖,默认为"always"
|
||
mode: "zstd" # 在"gzip","zstd","none"和"dir"中选择一个
|
||
|
||
- path: "/root/.npm"
|
||
strategy: "clean"
|
||
mode: "none"
|
||
|
||
- path: "/app/target"
|
||
strategy: "always"
|
||
mode: "dir"
|
||
|
||
# 缓存策略
|
||
strategy:
|
||
ttl_days: 30 # 缓存生存时间
|
||
max_size_gb: 20 # 最大缓存大小
|
||
cleanup_policy: "lru" # 清理策略:lru, fifo, size
|
||
|
||
# 安全配置
|
||
security:
|
||
#
|
||
drop-after: ""
|
||
# 留空
|
||
|
||
# 钩子脚本
|
||
hooks:
|
||
# 依赖安装前
|
||
early:
|
||
- command: "echo 'Starting dependency installation'"
|
||
name: ""
|
||
|
||
# 依赖安装后
|
||
late:
|
||
- command: "cargo fetch"
|
||
working_dir: "/tmp"
|
||
|
||
# 元数据
|
||
metadata:
|
||
description: "Rust project build environment"
|
||
maintainer: "team@example.com"
|