てっくすてーしょん

圧倒的に楽しく働き、圧倒的に成長したいwebエンジニアの雑記

GitHub Actionを使って、Markdownで書いた職務経歴書を自動でPDFにして出力しておく

今回は、GitHub Actionを使って、Markdownで書いた職務経歴書を自動でPDFにして出力しておく設定をしていきます。

職務経歴書をGitHubで管理する記事はこちら
www.techstation.jp

GitHub Actionsを触ってみる

まずは、GitHub Actionsのサンプルを触っていきたいと思います。
help.github.com

リポジトリのTOP画面に、Actionsというタブがあります。
f:id:itoaki0417:20200412202943p:plain

クリックするとActionのGet start画面が表示されます。
workflowを設定するとこの画面に実行履歴が表示されます。

では、「Sample workflow」からworkflowを作成していきます。
f:id:itoaki0417:20200412202825p:plain

ymlファイルの編集画面になります。
このサンプルのymlですが、masterにpushすると、workflowが走るようになっているみたいです。

on:
  push:
    branches: [ master ]

とりあえず、workflowが動くことを確認してみたいので、Start commitでcommitしてしまいます。

f:id:itoaki0417:20200412203450p:plain

無事、workflowが実行されました!

f:id:itoaki0417:20200412203630p:plain

コミットしたymlファイルには、「Hello, world!」とか、「Add other ......」とかをecho出力する記述がありました。
なので、きちんと出力されているかを確認していきます。
リンクを辿って詳細をみていきます。
f:id:itoaki0417:20200412203904p:plain

きちんとechoで文言が出力されていますね。
さて、サンプルの確認もできたので、どんどん修正していこうと思います。

workflowの構成

今回の構成を構築するにあたり、下記のサイトを大いに参考にさせていただきました。

www.hands-lab.com

kic-yuuki.hatenablog.com

結果、下記のようなworkflowになりました。

# This is a basic workflow to help you get started with Actions

name: Create PDF

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
    - uses: actions/checkout@v2

    # node.jsのセットアップ
    - name: Use Node.js 10.x
      uses: actions/setup-node@v1
      with:
        node-version: 10.x

    # markdown-pdfをインストールしPDFに変換
    - name: Create PDF
      run: |
        npm -g install markdown-pdf
        markdown-pdf resume.md

    # workflowの成果物としてPDFをアップロードしておく
    - uses: actions/upload-artifact@v1
      with:
        name: create-pdf
        path: ./resume.pdf

これくらいの処理であれば、スッキリかけてとても良いですね。

実行結果

成功!
f:id:itoaki0417:20200412210849p:plain

そしてきちんとPDFもアップロードされていました!
f:id:itoaki0417:20200412210955p:plain

slackにも通知したい

せっかくなので、実行されたら結果をslackに通知するようにしましょう。
理由は特にありませんが、CIは回したらslackに通知しておくものと先生がいってました。
今回は、私が個人開発用に使用している個人slackに通知を飛ばします。

あらかじめ、slackのwebhookURLを取得し、リポジトリのSecretsに登録しておきます。
f:id:itoaki0417:20200412222250p:plain

さらにymlファイルに以下の記述を追記しておきます。
通知するためのライブラリはこちらを使用させていただきました。

    # Slackへ通知
    - name: Notify Result to Slack
      uses: 8398a7/action-slack@v3
      if: always()
      with:
        status: ${{ job.status }}
        job_name: '職務経歴書のPDFが作成されました!'
        icon_emoji: ':octocat:'
        channel: '#integration'
        fields: repo,message,commit,author,action,eventName,ref,workflow # selectable (default: repo,message)
      env:
        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required

すると、こんな感じで通知がきました!
いくつか設定が聞いてなさそうですが、一旦スルーしちゃいます。
f:id:itoaki0417:20200412222419p:plain

まとめます

GitHub Actionsとっても便利ですね。
一応、利用しているプランごとに制限があるようなのですが、現状では特にきにする必要はありませんでした。

今回で、職務経歴書をCIするための基盤が完成しました。
次回以降で、校正ツールによるCIなども入れていきたいと思います。

今回は以上です。