一个用 Rust 编写的高性能课程数据处理工具。
cargo build --release构建后的二进制文件位于 target/release/hoa-backend
- GitHub Actions 的
release只会在 推送 tag 时触发:.github/workflows/build.yaml中有条件startsWith(github.ref, 'refs/tags/')。 - 推荐发布流程(确保 tag 指向包含版本号更新的 commit):
- 修改
Cargo.toml的version(如有生成/变更也一并更新Cargo.lock)。 - 提交变更:
git add Cargo.toml Cargo.lock→git commit -m "chore: bump version to 1.15.1"。 - 创建 annotated tag(使用
v前缀,格式为v<大版本>.<小版本>.<修订版本>,和 GitHub Release 命名规范一致):git tag -a v1.15.1 -m "v1.15.1"。 - 推送到远端以触发流水线:
git push后再git push origin v1.15.1(或使用git push --follow-tags)。
- 修改
- Release 显示为 Draft 是预期行为:工作流里配置了
draft: true,需要到 GitHub 的 Releases 页面手动点 Publish release;如需自动发布,把draft改为false或删除该行。 - 若
buildjob 失败,release不会执行(needs: [build])。 release步骤开启了fail_on_unmatched_files: true:如果上传的 artifacts 名称/路径与配置不一致(例如hoa-backend-linux.tar.gz/hoa-backend-linux.tar.gz),发布会直接失败。
- 加载培养方案:从
hoa_major-data/plans/*.toml读取所有培养方案 - 过滤课程:根据
repos_list.txt(如果存在)过滤可用课程 - 读取资源:从
repos/目录读取课程的.mdx和.json文件 - 生成页面:
- 为每个课程生成 MDX 页面,包含 YAML frontmatter
- 从
worktree.json生成文件树 JSX - 根据学期自动分类课程
- 生成学期索引、专业索引和年级索引
content/docs/
├── 2022/
│ ├── meta.json
│ ├── index.mdx
│ └── 010101/ # 专业代码
│ ├── meta.json
│ ├── index.mdx
│ ├── fresh-autumn/ # 大一秋季
│ │ ├── index.mdx
│ │ ├── COMP2001.mdx
│ │ └── ...
│ └── ...
└── ...
位于项目根目录,每行一个课程代码,用于过滤需要处理的课程。如果文件不存在,将处理所有课程。
示例:
COMP2001
COMP2003
MATH1001
tokio: 异步运行时serde: 序列化/反序列化toml: TOML 文件解析serde_json: JSON 处理thiserror: 错误处理walkdir: 目录遍历urlencoding: URL 编码chrono: 时间戳格式化