blogTemplate icon indicating copy to clipboard operation
blogTemplate copied to clipboard

dumi之github pages发布小记

Open txp1035 opened this issue 5 years ago • 0 comments

dumi之github pages发布小记

背景

最近有包开发需求,于是用了次dumi。有脚手架搭建还是很方便的,很快也能成功运行了,然后我开始对脚手架进行修改已满足发包需求。

dumi文档发布脚本


set -e
shopt -s extglob

TEMP_PATH="docs/.temp"

# build docs
npm run doc:build

# prepare deploy
mkdir $TEMP_PATH
cd $TEMP_PATH
git init
git pull [email protected]:umijs/dumi.git gh-pages
cp -r ../../dist/* .

# commit and push changes
git add -A
git commit --am -m "build: deploy documentation"
git push -f [email protected]:umijs/dumi.git master:gh-pages

# clean
cd -
rm -rf $TEMP_PATH

整体来说思路很清晰:构建文档包->生成临时目录->初始化git->拉取gh-pages分支到目录->拷贝文档静态文件到临时目录->提交并推送到gh-pages分支->清理临时目录

在dumi脚手架上使用

按照dumi照抄了一份,在自己的包里准备发布一次文档到gh-pages,很快便发现了问题。

由于我的项目里没有gh-pages分支,所以在拉取的时候出现了报错。

于是我通过github基于master新建了分支gh-pages,通过脚本进行文档部署,但是除了文档静态文件还有master上面的代码,于是便走了一条不归路。

我首先想到的就是在复制文件进来前对文件目录清理一遍。

rm -rf *:这条命令执行下来只能删除隐藏文件(.开头的文件)以外的文件。

rm -rf .*:这样是可以把隐藏文件也删掉但是.git也被删掉了。

find . -not -name ".git" -exec rm -rf {} \;:这样是可以.git以外的文件,但是会提示'.'、‘..'目录不允许删除。

最终解决命令find . -not -name ".git" -not -name "." -not -name ".." -exec rm -rf {} \;

终于解决了排除.git文件删除其他文件的问题。但是悲剧的我发现我为什么要去拉代码呢,我直接上传就好了呀,部署文档的提交记录我又不需要关注,直接推送代码还能解决没有分支的问题。所以最后脚本更改如下:

set -e
shopt -s extglob

TEMP_PATH="docs/.temp"

# build docs
npm run docs:build

# prepare deploy
mkdir $TEMP_PATH
cd $TEMP_PATH
git init
cp -r ../../dist/* .

# commit and push changes
git add .
git commit -m "build: deploy documentation"
git push -f https://github.com/xxx.git master:gh-pages

# clean
cd -
rm -rf $TEMP_PATH

总结

文档发布思路:构建doc静态文件->创建临时目录->初始化git->复制静态文件到临时目录->提交并推送到gh-pages分支->删除临时目录

补充

直接使用workflows动态发布

name: deploy to gh-pages
on:
  push:
    branches:
      - master # default branch
jobs:
  deploy:
    name: deploy
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Install and Build
        run: |
          npm install
          npm run docs:build
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.ACTION_TOKEN }}
          publish_dir: ./dist

txp1035 avatar Jun 04 '20 08:06 txp1035