人生100年!生涯エンジニア人生!

楽しいエンジニア人生!

雰囲気でWerckerを使う #技書博 #技術書典 #reviewstarter

TL;DR

自分のMacBook Proは年代物で非力です、DockerからRe:View形式のファイルをPDFファイルにするのも一苦労です。
どっかのサーバーで勝手にやってくれると助かりますよね。
はい、あります!雰囲気でやってみました!CIツールとしてWerckerを使うことにしました。

準備

Dropboxに生成されたPDFをコピーしたいので、Dropboxトークンを取得します。

  1. DropboxにログインしてからDropboxのDevelopersに行き、Create appsを選択します。
    f:id:hideaki_kawahara:20190626113031p:plain

  2. この画面が出ます。
    f:id:hideaki_kawahara:20190626113057p:plain

  3. Choose an APIは「Dropbox API」で、Choose the type of access you needは「Full Dropbox」を選択します、あとはアプリ名を入れてCreate appsを押下します。
    f:id:hideaki_kawahara:20190626113112p:plain

  4. 次の画面では「Generated access token」をクリックして出てきたトークンをコピーします。
    f:id:hideaki_kawahara:20190626113142p:plain

  5. Werckerに行きGitHubアカウントで認証して、リポジトリを選んでからEnvタブを選んで、DROPBOX_TOKENという変数名を入れて、先ほどコピーしたトークンを入力します、念の為Protectedをチェックしてから、Addを押下します。
    f:id:hideaki_kawahara:20190626113215p:plain

Gitに追加するもの

  1. Werckerを動かす為の設定ファイル「wercker.yml」
  2. 表紙のPDFファイルと原稿ファイルを合体させるスクリプト「CombinePDF.rb」
  3. 表紙のPDFファイル「cover.pdf」
  4. Werckerで作成されたPDFファイルをDropboxにコピーするShellスクリプト「deploy.sh」

wercker.yml

box: kauplan/review2.5

build:
  steps:
    - script:
        name: Build PDF
        code: |
          rake clean pdf
          ruby CombinePDF.rb
          cp Clean-mailSettings2.pdf ${WERCKER_REPORT_ARTIFACTS_DIR}/
          bash deploy.sh

WerckerはboxというセクションでDocker Hubにあるイメージを取得して実行できるので、そこにDockerイメージを指定します。
今回はRe:View Starterを使ったのでkauplan/review2.5を使いました。
buildセクションに実行したいスクリプトを用意します。
code に雰囲気でコードを書きました、それが実行されます。

kauplan.org

CombinePDF.rb

require "combine_pdf"
pdf = CombinePDF.new
pdf << CombinePDF.load("cover.pdf")
pdf << CombinePDF.load("Clean-mailSettings.pdf")
pdf.save "Clean-mailSettings2.pdf"

表紙はPDFファイルで別で用意しようと思ったのと、Re:View StarterのDockerイメージにはcombine_pdfが入っていたので、これを雑に使ってPDFファイルの結合して、それを最終PDFファイルとしました。

deploy.sh

set -eux

export TZ="Asia/Tokyo"
TIMESTAMP=$(date "+%Y%m%d-%H%M%S")
TARGET="Clean-mailSettings2.pdf"
FILENAME=$(basename $TARGET)
curl -X POST -H "Authorization: Bearer ${DROPBOX_TOKEN}" \
-D - -H "Dropbox-API-Arg: {\"path\": \"/Clean-mailSettings/${FILENAME#.pdf}-${TIMESTAMP}.pdf\",\"mode\": \"overwrite\",\"mute\": false}" \
  -H "Content-Type: application/octet-stream" --data-binary @${TARGET} https://content.dropboxapi.com/2/files/upload

このShellスクリプトで、PDFファイルをDropboxにコピーしてます。

処理結果

GitHubにpushするとWerckerが動きます。
buildセクションのスクリプトが実行され、buildが成功するとWerckerはこんな感じになります。
f:id:hideaki_kawahara:20190626113232p:plain

Dropboxにコピーされるので、そのまま見るでもダウンロードして見るのも簡単です。
f:id:hideaki_kawahara:20190628212040p:plain

謝辞

Re:View Starterは初期設定を簡単にやってくれるのでとても楽です、感謝しております。
kauplan.org