Skip to content

Release v1.0.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 04:26
· 23 commits to master since this release

What's Changed

这是 ModFetch 从实验性工具走向正式版的关键一跃。本次更新对代码库进行了
彻底的重构:从早期的单体实现迁移到清晰的六边形架构
(domain → ports → application → adapters),
同时引入了全新的构建流水线、缓存体系和命令行体验。

⚠️ 破坏性变更:本版本为 1.0.0 正式版,CLI 用法与 v0.2.0 不兼容,
详见下方「CLI 变更」与「迁移指南」。

ℹ️ 说明:extra_urls、mrpack 的 download/reference 模式、配置继承(from)、
only_version/feature 条件配置、Lua 插件运行时、光影包/资源包支持、
Web 界面等能力在 v0.2.x 已存在,仅在本版本中完善与修正,不再重复列入「新特性」。

🧱 架构重构

  • 六边形架构落地:建立领域层(domain)、端口层(ports)、应用层(application)、
    适配层(adapters),删除旧 models/exceptions/services/download/packager 分层。
  • 统一应用入口:CLI 与 Web 共用 BuildApplicationService,构建/计划/校验同一编排;
    依赖解析无状态化(per-call 上下文),循环依赖给出结构化诊断。
  • 适配层解耦:下载拆为 HttpDownloader / FileStore / Executor;
    打包抽离 PackagerPort,返回结构化 OutputArtifact,失败不再静默。
  • Web 瘦身:删除 FS 扫描与裸 aiohttp,JobManager 接入应用服务,
    统一事件协议,新增 JobEventSink 事件翻译器。
  • 彻底清理:删除旧 Orchestrator 与死代码(保留向后兼容 shim)。

✨ 新特性

  • 全新构建布局(三层):build/cache(内容寻址全局缓存)+ build/{mc}-{loader}
    (打包工作区)+ dist/(唯一扁平交付目录),配合硬链接物化(默认)
    或显式复制(--link-mode copy),重复构建几乎零下载、零冗余磁盘占用。
  • 构建计划(Build Plan):引入独立计划用例与序列化能力,
    modfetch plan 先行生成完整计划(依赖图、解析结果、产物清单)输出到文件或 stdout。
  • 光影包按加载器过滤:版本查询以该版本生效的光影加载器(iris/oculus/optifine)
    作 loader 过滤,并新增跨字段关联校验——配置了实际生效的光影包时,
    mods 必须包含对应光影加载器,错误在构建前即可发现。
  • 条件过滤贯通远程校验:only_version/feature 条件此前仅在本地过滤,
    本版本让远程校验按版本粒度先行条件过滤再查兼容性,消除误报 INCOMPATIBLE。
  • 异构 mods 数组:配置解析切换至标准库 tomllib/tomli,
    同数组内可混用 slug 字符串与结构化对象(旧 toml 库要求同构数组,无法解析)。
  • CLI 接入 Lua 插件:插件目录与显式插件路径按 .lua/.py 分发到对应加载器,
    接入 LuaPluginLoader 完整生命周期(initialize/shutdown)。
  • REFERENCE 模式下处理 extra_urls 文件:引用型整合包也能正确携带额外文件清单与内容。
  • 下载至指定目录并保持子目录结构:额外文件的子目录路径在打包时得以保留。
  • 新增 verify_ssl 配置项(默认 True)并透传至构建服务,可关闭 TLS 校验。

🖥️ CLI 变更(破坏性)

  • 由单命令 + 多个 flag 重构为 子命令风格:
    build / plan / check / plugins / clean。
旧用法(v0.2.x) 新用法(v1.0.0)
modfetch mods.toml modfetch build(默认 mods.toml,-c 覆盖)
modfetch --dry-run mods.toml modfetch check
modfetch --plan --plan-out f.json mods.toml modfetch plan -o f.json
modfetch --clean-cache mods.toml modfetch clean --cache
modfetch --clean-build mods.toml modfetch clean
modfetch --list-plugins mods.toml modfetch plugins

🚀 性能与稳定性

  • 消除请求放大:修复发往 Modrinth 的重复/冗余请求,减少接口放大与事件循环阻塞。
  • 并发下载统一并发控制,错误以结构化结果传递。
  • 修复 aiohttp 会话泄漏:调用链显式释放(close),长任务稳定运行。
  • 全链路日志打点:下载/解析/物化/打包关键阶段日志补齐。

🐛 修复

  • 下载失败跳过物化:不再半途中断或产生脏文件。
  • feature 默认值语义:未传 -f 时保留配置顶层 features 默认值,不被空列表覆盖。
  • 条件剔除反向过滤 bug:修复 feature 全部启用时条件对应条目被误排除的问题。
  • 修正示例配置的合法性。

📚 文档与示例

  • 全新 README:功能导向重写,含同类工具对比与选用建议。
  • 六类配置示例(examples/):最小可用、多 target、配置继承、条件编译、资源包/光影、插件。

迁移指南(v0.2.x → v1.0.0)

  1. 命令行:按上方「CLI 变更」表调整命令;
  2. 配置文件:mods 数组中混用 slug 与结构化对象不再受限(解析器升级,无需改动即可获益);
  3. 构建布局:构建目录已更新为 build/cache + build/{mc}-{loader} + dist 三层结构,
    旧版产出目录需手动清理;
  4. verify_ssl:默认 True,如需关闭请在配置中显式设置。

Full Changelog

Full Changelog: https://github.com/moyanj/modfetch/commits/v1.0.0

安装

通过 pip 安装

pip install modfetch==1.0.0

下载预编译二进制文件

根据你的平台下载对应的文件:

  • Linux: modfetch-linux-amd64.tar.gz
  • Windows: modfetch-windows-amd64.zip

校验和

下载后请验证文件完整性。