読者です 読者をやめる 読者になる 読者になる

Hiroto's diary

プログラミング関連を書くかも

Travis CIでApiGenを使ってAPIドキュメントを自動生成してGitHub Pagesで公開する

Develop API PHP CI

Travis CI上でApiGenを使ってドキュメントを自動生成してGitHub Pagesでホストして公開する方法。メモ書き程度に書いておきます。

実際に作ったのはこれ

https://hiroto-k.github.io/StringBuilder/

参考

github.com

gh-pagesブランチを切る

先にgh-pagesブランチを切って適当なコミットをしてpushしておく。

git symbolic-ref HEAD refs/heads/gh-pages
rm .git/index
git clean -fdx
echo "GitHub Page" > index.html
git add .
git commit -m "Initial commit"
git push origin gh-pages

Travis CIをセットする

.travis.ymlは既に有るものとします。

APIトークンをcurlで取得する。コマンドを実行するとパスワードの入力を求められるのでGitHubのアカウントのパスワードを入力する。

curl -X POST -u <ユーザー名> -H "Content-Type: application/json" -d "{\"scopes\":[\"public_repo\"],\"note\":\"token for pushing from travis\"}" https://api.github.com/authorizations

実行するとJSONが返ってくるのでJSONの中のtokenをメモしておく

次にGitHub公式のTravisクライアントを使ってTravis CIの環境変数を暗号化する。クライアントが無い場合はgem install travisを実行してインストール。

以下のコマンドを実行して暗号化キーを取得する。ユーザー名、リポジトリ、トークンは置き換えてください。トークンはさっきメモしたトークンを使います。

travis encrypt -r <ユーザー名>/<リポジトリ> GH_TOKEN=<トークン>

取得できたら.travis.ymlに書き込む。

env :
  global :
    secure : 暗号化キー

ドキュメントを自動生成するシェルスクリプトを書く

CIに成功した場合のみドキュメントを生成する。

.travis.yml

after_success:
  - bash .ci/generate-api.sh

2016-09-28 生成スクリプトを書き換え。


.ci/generate-api.sh

# PHP7.0で、ブランチがmasterで、プルリクエストでない時のみ実行。
if [ $TRAVIS_PHP_VERSION = '7.0' ] && [ $TRAVIS_BRANCH = 'master' ] && [ $TRAVIS_PULL_REQUEST = 'false' ];then

  # ApiGen.pharを取得
  wget http://www.apigen.org/apigen.phar

  # ドキュメントを生成。オプションは自分で
  yes | php apigen.phar generate -s src -d ../docs

  # Gitを設定
  git config --global user.email "自分のメールアドレス"
  git config --global user.name "自分のユーザー名"

  # Githubからclone
  git clone https://${GH_TOKEN}@github.com/ユーザー名/リポジトリ名 ../gh-pages --branch gh-pages > /dev/null

  # 生成したファイルをコピー
  \cp -f -r ../docs/* ../gh-pages

  # 変更がある場合のみコミットしてpush
  cd ../gh-pages
  git add .
  d=`date +"%Y/%m/%d %k:%M:%S"`
  git diff --cached --exit-code --quiet || git commit -m "Document update at ${d}"
  git push origin gh-pages -fq > /dev/null
fi