用途:把已经构建好的静态页面产物发布到 SourceCraft Sites 仓库,运行于 Yandex 基础设施,可在俄罗斯使用。它是其他技能(如 telegram-channel-parser 摘要)生成页面产物的部署/输出层,本身不做前端设计,只打包并发布已有内容。
输入形态:已构建的静态文件文件夹、单个 HTML 产物加本地资源,或可从小目录提供服务的静态站点。
仓库布局要求:产物必须放入 <year>/<year>-<month>/<page-slug>/ 路径,例如 2026/2026-03/ai-digest-week/。不得平铺在仓库根目录,不得省略年份或年月嵌套。
配置:参考 config/README.md 设置环境变量与令牌。 cp config/.env.example config/.env 必需:SOURCECRAFT_TOKEN、SOURCECRAFT_REPO、SOURCECRAFT_SITE_URL。
工作流:确定发布日期分桶(year=YYYY,year-month=YYYY-MM);创建或更新目标目录;复制产物文件;确认存在入口(通常 index.html);确保仓库根有 .sourcecraft/sites.yaml;提交并强制推送到 SourceCraft 仓库;返回最终公开 URL。
发布命令: python3 scripts/publish_static.py --source <dir-or-html> --slug <name> [--date YYYY-MM-DD] [--image-max-kb 500] 脚本会浅克隆仓库、确保 sites.yaml 存在、把产物复制到 YYYY/YYYY-MM/slug/、在提交前优化过大的 .jpg/.jpeg/.png/.webp、提交并强制推送、打印最终公开 URL。
图片优化:属建议而非硬性要求。默认尝试将每张栅格图控制在 500KB 以内,通过去元数据、重压缩、必要时缩放长边实现。可用 --image-max-kb <kb> 改目标;用户明确需要原尺寸(如全分辨率信息图、地图、可下载媒体)时用 --keep-large-images 或 --image-max-kb 0。原始 --source 产物不被修改,优化只发生在复制到发布仓库目标目录之后。若 Pillow/uv 不可用或优化失败,继续发布原图并提示警告。手动运行: uv run --with pillow python3 scripts/optimize_images.py <artifact-dir> --max-kb 500
slug 规则:小写字母、数字、连字符;简短且具描述性;避免空格、下划线、西里尔字母。
URL 约定:始终返回 <SOURCECRAFT_SITE_URL>/<year>/<year>-<month>/<page-slug>/。
发布前校验:产物有 index.html 入口;在可行时优化过大栅格图(除非有意分享原尺寸);HTML/CSS 中无绝对本地路径;文件中无密钥;所有本地资源可从目标文件夹访问。
安全规则:不删除仓库中无关目录;只替换目标页面目录内容;若覆盖需在结果中说明;不得在输出、日志或提交文件中暴露令牌。
参考:references/publish-checklist.md 为推送前的操作清单。