hugo_publish

【技术要点】基于Python的Hugo博客发布系统实现Markdown自动化处理与GitHub Pages部署 【核心价值】通过模块化设计整合Obsidian到Hugo工作流,支持全链路自动化发布

1. 项目结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
.
├── hugo_publish_blog.py   # 主程序
├── config.yaml           # 配置文件
├── config.yaml.example   # 配置文件模板
├── requirements.txt      # 依赖清单
└── scripts/             # 功能模块
    ├── __init__.py
    ├── blog_processor.py        # 博客处理核心类
    ├── front_matter.py          # 文章前置数据处理
    ├── config_manager.py        # 配置管理
    ├── image_processor.py       # 图片处理
    └── obsidian_image_handler.py # Obsidian图片转换

2. 核心功能和主要类

  1. BlogProcessor 类 (blog_processor.py):

    • create_new_post() - 创建新的Hugo文章
    • process_markdown_files() - 处理Markdown文件转换
    • list_published_markdowns() - 列出已发布的文章
    • set_publish_false() - 设置文章为未发布状态
    • unpublish_article() - 取消发布文章
    • preview_site() - 预览博客站点
    • deploy_to_repos() - 部署到GitHub仓库
  2. FrontMatter 类 (front_matter.py):

    • 管理文章前置数据
    • 处理标签和分类
    • 提供标准化的数据访问接口
  3. 支持模块:

    • config_manager.py: 配置管理
    • obsidian_image_handler.py: 图片处理
    • image_processor.py: 图片处理工具

3. 程序流程图

graph TD A[开始] --> B{检查命令行参数} B -->|--preview| C[预览模式] B -->|--unpublish| D[取消发布] B -->|--republish| E[重新发布] B -->|默认发布| F[发布流程] C --> C1[启动Hugo服务器] C1 --> C2[打开预览页面] D --> D1[列出已发布文章] D1 --> D2[选择要取消的文章] D2 --> D3[更新文章状态] D3 --> D4[删除Hugo文件] D4 --> G[部署更新] E --> E1[找出已发布文章] E1 --> E2[取消所有发布] E2 --> E3[重新发布文章] E3 --> G F --> F1[处理Markdown文件] F1 --> F2[处理图片资源] F2 --> F3[创建Hugo文章] F3 --> G G --> G1[更新源码仓库] G1 --> G2[构建Hugo站点] G2 --> G3[部署到GitHub Pages] G3 --> H[结束]

4. 文章处理流程

sequenceDiagram participant U as 用户 participant BP as BlogProcessor participant FM as FrontMatter participant IH as ImageHandler participant H as Hugo participant G as Git仓库 U->>BP: 执行发布命令 BP->>FM: 提取YAML和内容 FM->>FM: 处理前置数据 BP->>IH: 处理图片 IH->>IH: 复制并重命名图片 BP->>BP: 创建Hugo文章 BP->>H: 构建站点 BP->>G: 推送源码 BP->>G: 部署页面 G-->>U: 返回部署结果

5. 类关系图

classDiagram class BlogProcessor { +source_dir: Path +hugo_dir: Path +create_new_post() +process_markdown_files() +list_published_markdowns() +set_publish_false() +unpublish_article() +preview_site() +deploy_to_repos() } class FrontMatter { +data: dict +title: str +date: str +tags: list +categories: list +draft: bool +publish: bool +to_dict() +update() } class ImageHandler { +process_obsidian_images() +copy_image() +update_links() } BlogProcessor --> FrontMatter : 使用 BlogProcessor --> ImageHandler : 使用

6. 部署流程

graph TD A[开始部署] --> B[更新源码仓库] B --> C[构建Hugo站点] C --> D[部署到GitHub Pages] D --> E[结束] B --> B1[Git操作] B1 --> B2[提交更改] B2 --> B3[推送到源码仓库] C --> C1[生成静态文件] C1 --> C2[优化资源] D --> D1[初始化Pages仓库] D1 --> D2[提交更改] D2 --> D3[强制推送到Pages]

7. 配置管理流程

graph LR A[配置文件] -->|读取| B[Config类] B -->|解析| C[配置字典] C -->|获取配置| D[程序模块] D -->|更新配置| B B -->|保存| A

8. 主要功能说明

  1. 文章处理:

    • 支持从Obsidian格式转换到Hugo格式
    • 自动处理图片资源
    • 维护标签和分类的映射关系
    • 支持草稿模式
  2. 部署功能:

    • 自动更新源码仓库
    • 构建Hugo静态站点
    • 部署到GitHub Pages
    • 支持预览模式
  3. 图片处理:

    • 自动复制和重命名图片
    • 更新文章中的图片链接
    • 支持多种图片格式
  4. 配置管理:

    • 灵活的配置系统
    • 支持多环境配置
    • 配置验证和错误处理
路漫漫其修远兮,吾将上下而求索
使用 Hugo 构建
主题 StackJimmy 设计