之前一直是使用hexo的静态网站,同时部署到腾讯云cos,hexo有上传到cos的插件,hugo没有,于是利用了新出的github action功能,在网上抄到了代码就直接写上去了

文章前缀转换

这个地方其实还有点麻烦,我之前用的是solo blog,它可以导出hexo格式的markdown,头部格式和其他人的hexo有点不一样,在网上找到的转换脚本都不能用,于是只能改一下,最终找到一个js脚本,改了部分代码终于可以跑起来了。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
// yaml_to_toml.js
const readline = require('readline');
const fs = require('fs');
const os = require('os');
const moment = require('moment-timezone');  // 需要通过 npm install moment-timezone 来安装


const timezone = 'Asia/Shanghai';  // 时区
const src = 'hexo-post';  // hexo .md 文件源目录
const target = '../content/posts';  // 目标文件目录


// 开始转换
readDir();


// 遍历目录
function readDir() {
    // read all files in src
    fs.readdir(src, function(err, files) {
        files.map((filename) => {
            // get the file extension
            const extension = filename.substr(filename.lastIndexOf('.', filename.length));
            if (extension === '.md') {
              readFile(`${filename}`);
            }
        });
    });

}


function readFile(filename) {
  fs.readFile(`${src}/${filename}`, { encoding: 'utf8' }, function(err, data) {
      if (err) {
          return console.log('err: ', err);
      }

      const content = data.split('---');
      const head = content[0].split('\n');
      // console.log('head: ', head);

      let newHead = head.map((item, index) => {
        // console.log('slpitHead: ', slpitHead(item, index, head));
        return slpitHead(item, index, head);
      });
      newHead = newHead.filter((item) => {return item;});
      // console.log('newHead: ', newHead);
      const newContent = `+++${os.EOL}${newHead.join(os.EOL)}${os.EOL}${os.EOL}+++${os.EOL}${content[1]}`;
      fs.writeFile(`${target}/${filename}`, newContent, {
          encoding: 'utf8'
      }, function(err) {
          if (err) {
            throw err;
          }
          console.log(`${filename}  生成成功!`);
      });
  });
}



function slpitHead(item, index, head) {
  // title
  if (item.indexOf('title:') !== -1) {
    return `title = "${item.split('title:')[1].trim()}"`;
  }

  // date
  if (item.indexOf('date:') !== -1) {
    // console.log((moment.tz(item.split('date:')[1], timezone)).format());
    let hexo_date = item.split('date:')[1];
    hexo_date = hexo_date.replace(' ', '').replace('\'',"").replace('\'',"");
    return `date = "${moment.tz(hexo_date, timezone).format()}"`;
  }

  // tags
  if (item.indexOf('tags:') !== -1) {
    const tags = [];
    let tags0 = item.split('tags:')[1].replace(' ', '').replace('\[', '').replace('\]', '').split(", ");
    for (let i=0; i<tags0.length; i++) {
      tags.push(tags0[i]);
    }
    return `tags = ${JSON.stringify(tags)}`;
  }

  // categories
  if (item.indexOf('categories:') !== -1) {
    const categories = [];
    for (let i=index+1; i<head.length; i++) {
      if (head[i].indexOf('-') !== -1) {
        categories.push(head[i].split('-')[1].trim());
      } else {
        break;
      }
    }
    // console.log('categories: ', categories);
    return `categories = ${JSON.stringify(categories)}`;
  }

  return false;
}

使用github action部署到cos

这个地方就是原封不动抄别人的代码了。出处,由于代码里面会包含自己的部署密钥appkey,我就把托管在github上的hugo博客项目改成私有的了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
name: Deloy to COS

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Set up Go
      uses: actions/setup-go@v1.0.0
      with:
        version: 1.13
    - name: Install Hugo
      run: |
        export GOPATH=$HOME
        mkdir $HOME/src
        cd $HOME/src
        git clone https://github.com/gohugoio/hugo.git
        cd hugo
        go install
    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.6
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
    - name: Install coscmd
      run: |
        pip install coscmd
    - name: deploy
      run: |
        $HOME/bin/hugo
        coscmd config -a **腾讯云AccessId** -s **腾讯云SecretKey** -b **桶名称** -r **桶地区** -m 10
        coscmd upload -r -s public/ /