• github的博客搭建以及标签的自动化


    github博客搭建以及标签的自动化

    引子

    没有github的程序员,不是好程序员!

    BUT

    如果有一个*.github.io的blog,会不会更酷?

    基于以上原因,本拐也折腾了一下自己的github,并且做了标签的集成功能,以下为一些最佳实践。

    标签的自动化配置在本文的最后一部分,github已经上车的同学可以迅速下划一下 :)

    启用github pages

    建立存储库

    对于开发者个人而言,建立github pages第一步就是建立一个YOURNAME.github.io 的存储库。

    其中:YOURNAME 是你的github用户名。

    如果是早期的情况,仓库名为 YOURNAME.github.com

    配置Jekyll

    基本存储库建立好以后,只能看到一个很丑的原生页面,为了让站点美观,我们需要配置Jekyll

    关于Jekyll Jekyll 是一个静态站点生成器,内置 GitHub Pages 支持和简化的构建过程。Jekyll 使用 Markdown 和 HTML 文件,并根据您选择的布局创建完整静态网站。Jekyll 支持 Markdown 和 Lick,这是一种可在网站上加载动态内容的模板语言。有关详细信息,请参阅 Jekyll。

    安装Jekyll

    MacOS下安装Jeky脚本如下:

    1. # 需要ruby
    2. brew install ruby 
    3. # 安装jekyll
    4. sudo gem install bundler jekyll minima
    5. bundle install

    初始化站点结构

    将存储库clone到本地后,进入到存储库目录下,执行:

    jekyll new --skip-bundle ./

    这时jekyll会初始化相应的目录结构,如下:

    1. .
    2. ├── 404.html
    3. ├── Gemfile
    4. ├── Gemfile.lock
    5. ├── _config.yml
    6. ├── _posts
    7. │   └── 2022-10-19-welcome-to-jekyll.markdown
    8. ├── about.markdown
    9. └── index.markdown

    到这里,一个基本的配置已经完成了。只要按照mmm-yy-dd-title.md的形式往_posts目录下增加文档,在推送后就会进行相应的更新。

    也可以在本地运行bundle exec jekyll serve来看站点的生成形式。

    加入标签支持

    在博客内容中加入标签

    现在的博客内容,大多都愿意以标签形式进行组织,而Jekyll原生并没有提供相应的支持,为了让博客更cool,我们需要加入对标签的支持。

    首先,我们要在博客的内容中加入tag,即在你的markdown文档开始部分加入tags说明,比如,本文档最开始是这样的:

    1. ---
    2. layout: post
    3. title:  pages博客的配置以及标签的自动化
    4. tags: GitHub 自动化 标签 博客
    5. ---
    6. # github pages博客的配置以及标签的自动化

    配置标签页和组件

    我们要将标签聚合配置一个默认模板,在_layouts目录下,创建tagpage.html

    内容如下:

    1. ---
    2. layout: default
    3. ---
    4. "post">
    5. Tag: {{ page.tag }}

      • {% for post in site.tags[page.tag] %}
      •   
      • "{{ post.url }}">{{ post.title }} ({{ post.date |     date_to_string }})
    6.     {{ post.description }}
    7.   
  • {% endfor %}

  • {% include archives.html %}
  • 同时,为我们标签加入一个页面的组件,在_includes下创建archives.html

    内容如下:

    1. 标签

    2. {% capture temptags %}
    3.   {% for tag in site.tags %}
    4.     {{ tag[1].size | plus: 1000 }}#{{ tag[0] }}#{{ tag[1].size }}
    5.   {% endfor %}
    6. {% endcapture %}
    7. {% assign sortedtemptags = temptags | split:' ' | sort | reverse %}
    8. {% for temptag in sortedtemptags %}
    9.   {% assign tagitems = temptag | split: '#' %}
    10.   {% capture tagname %}{{ tagitems[1] }}{% endcapture %}
    11.   "/tag/{{ tagname }}">"highligher-rouge">{{ tagname    }}
    12. {% endfor %}

    生成标签索引页

    因为Jeykll整体内容组织是基于目录的,所需要按目录生成对应的tags,具体方式为,建立一个文件make-tag.py

    1. import glob
    2. import os
    3. post_dir = '_posts/'
    4. tag_dir = 'tag/'
    5. filenames = glob.glob(post_dir + '*md')
    6. total_tags = []
    7. for filename in filenames:
    8.     f = open(filename, 'r', encoding='utf8')
    9.     crawl = False
    10.     for line in f:
    11.         if crawl:
    12.             current_tags = line.strip().split()
    13.             if len(current_tags)>0  and   current_tags[0] == 'tags:':
    14.                 total_tags.extend(current_tags[1:])
    15.                 crawl = False
    16.                 break
    17.         if line.strip() == '---':
    18.             if not crawl:
    19.                 crawl = True
    20.             else:
    21.                 crawl = False
    22.                 break
    23.     f.close()
    24. total_tags = set(total_tags)
    25. old_tags = glob.glob(tag_dir + '*.md')
    26. for tag in old_tags:
    27.     os.remove(tag)
    28.     
    29. if not os.path.exists(tag_dir):
    30.     os.makedirs(tag_dir)
    31. for tag in total_tags:
    32.     tag_filename = tag_dir + tag + '.md'
    33.     f = open(tag_filename, 'a')
    34.     write_str = '---\nlayout: tagpage\ntitle: \"Tag: ' + tag + '\"\ntag: ' + tag + '\nrobots: noindex\n---\n'
    35.     f.write(write_str)
    36.     f.close()
    37. print("Tags generated, count", total_tags.__len__())

    可以简单看出,这个脚本的作用,就是遍历博客文档,生成./tag/TAG.md的文档。

    这样,可以在每次博客写完后,运行一下相应的脚本,即可。

    python make-tag.py

    让标签不在导航中显示

    我们现在对标签的配置已经完成了,但是有一个问题,就是所有的标签都会展示在页面的导航中,非常别扭,因此,需要改一下导航的生成。

    先将默认的模板copy到项目下:

    sudo mv   /Library/Ruby/Gems/2.6.0/gems/minima-2.5.1/_includes/header.html ./_includes

    打开header.html,找到下面内容(应该在19-26行):

    1. "trigger">
    2.   {%- for path in page_paths -%}
    3.     {%- assign my_page = site.pages | where: "path", path | first -%}
    4.     {%- if my_page.title -%}
    5.     "page-link" href="{{ my_page.url | relative_url }}">{{ my_page.title | escape }}
    6.     {%- endif -%}
    7.   {%- endfor -%}

    改为:

    1. "trigger">
    2.           {%- for path in page_paths -%}
    3.             {%- assign my_page = site.pages | where: "path", path | first -%}
    4.             {%- if my_page.title  -%}
    5.             {%- unless my_page.title contains "Tag" -%}
    6.             "page-link" href="{{ my_page.url | relative_url }}">{{ my_page.title | escape }}
    7.             {%- endunless -%}
    8.             {%- endif -%}
    9.           {%- endfor -%}
    10.         

    这回再刷新,已经看不到多余的内容了。

    集成到 GitHub Action中

    我们现在已经完成了标签的配置以及生成,但还是很别扭,因为:

    1. 1. 每次都要运行一下对应的脚本 python make-tag.py

    2. 2. 在 tag目录下生成很多冗余文件。

    对于有强迫症的你,肯定是接受不了的,那么,我们可以把标签生成的工作交给GitHub 的Action来完成。

    具体方式:

    1. 先直接把tag目录干掉&commit

    2. 进入项目的Action 页面,选择New Workflow

    49b1db9630cdf404217bf5e42606ecd1.jpeg

    3. 进入页面后,搜索pages

    4. 选择GitHub Pages Jeykll 下的Configure

    b024a2a385ae306b0f52b95e2942de67.jpeg

    5. 这时会跳转到如下页面:

    52f803f8b7fb69701907af6414d20414.jpeg

    6. 更改这个代码,在第29行后加入:   

       - name: Setup Python
         uses: actions/setup-python@v3
       - name: Generate Tags
         run:  python make-tag.py

    3b5adb0a6de204c49f7d1fcf1502f5ac.jpeg


    然后保存并提交

    7. 进入项目的 GitHub配置页面,在Pages标签下,把Build And Deployment下的Source选项从Branch改成GitHub Actions

    5f52764e2464dcd1da69784a8a1e167b.jpeg

    在这时,如果再有提交,就会运行我们新配置的action进行部署了。

    到此为止,算是大功告成。

    参考

    1. 1. GitHub 官方文档 https://docs.github.com/cn/pages

    2. 2. Jekyll官方文档 https://jekyllrb.com/

    3. 3. Long Qian : Jekyll Tags on Github Pages https://longqian.me/2017/02/09/github-jekyll-tag/

    4. 4. Jekyll的liquid脚本文档 https://shopify.github.io/liquid/

    5. 5. 转义,解决花括号在 Jekyll 被识别成 Liquid 代码的问题 https://blog.walterlv.com/post/jekyll/raw-in-jekyll.html

    6. 6. GitHub Actions https://docs.github.com/cn/actions

    关于老拐瘦

    中年争取不油不丧积极向上的码农一名

    咖啡,摄影,骑行,音乐

    样样通,样样松

    喜欢可以关注一下公众号 IT老拐瘦

    fb6706a2dc2d9e78b72b9019e597426f.jpeg


    目前个人博客长驻: yfge.github.io

  • 相关阅读:
    python将xml格式文件转成png或者pdf格式
    数据结构与算法
    BIO实战、NIO编程与直接内存、零拷贝深入剖析
    中远麒麟堡垒机tokensSQL注入漏洞
    EFCore学习笔记(8)——关系
    算法:轮转数组---循环取模运算
    云计算与ai人工智能对高防cdn的发展
    快速搭建springcloud项目
    金融租赁业务
    CrossOver 23.6 让Mac可以运行Windows程序的工具
  • 原文地址:https://blog.csdn.net/geyunfei_hit/article/details/127418642