Githubにpushすると，自動でDoxygenドキュメントを生成して，Herokuへ静的ページとしてdeploy．

このポスト: [自動生成ドキュメントを無料で Web 上で最新に保つ（Wercker + Doxygen + Heroku）](http://qiita.com/iwiwi/items/13e57b91e664b29718eb)の通りにやろうとしたら，2016年頃からWercherの仕様が変わったようで，そのままでは実現できなかったので対応してみた．

## 実現すること
Githubにpushされると自動でDoxygenドキュメントが生成．生成されたドキュメントをHerokuへ静的ページとしてdeployして参照できるようにする．

## 使用するサービス

* Github
* Wercker
* DockerHub
* Heroku

##方法
### Dockerイメージの作成
Werckerの仕様変更により，boxとしてwercker-box.ymlが使用できなくなり，代わりにDocker imageを使用する必要がある．

DockerでWerckerの処理を実行するための環境を構築し，DockerHubに置く．既に作成されたimageを使用する場合はこのステップは飛ばす．

Dockerで[元ポストで使われている](http://qiita.com/iwiwi/items/13e57b91e664b29718eb)wercker-boxと同じ環境を構築して，DockerHubにpushする．

`docker commit`する際のイメージ名は，`[自分のDockerHubユーザID]/[任意]`とする．しないと`docker push`時にエラーが出る．

私が作成したイメージ: [fiftystorm/box2](https://hub.docker.com/r/fiftystorm/box2/)

### Doxyfileの作成
私の場合，デフォルトの状態からの変更点は以下のとおり．

```Doxyfile
PROJECT_NAME           = [プロジェクト名]
OUTPUT_LANGUAGE        = Japanese
FILE_PATTERNS          = [ソースファイルの拡張子]
SOURCE_BROWSER         = YES
ALPHABETICAL_INDEX     = YES
EXTRACT_ALL            = YES
GENERATE_LATEX         = NO
HAVE_DOT               = YES
DOT_IMAGE_FORMAT       = jpg
DOT_PATH               = /usr/bin
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
```

あとは，ソースファイルに日本語が含まれる場合，文字化けしないように，`HOGE_ENCODING =` `UTF-8` or `CP932`(Shift-JIS)に気をつける．

作成したDoxyfileは，ドキュメント化するソースファイルの入ったリポジトリに放り込む．

### Werckerアプリケーションの作成
ドキュメント化したいGithubのリポジトリに紐付ける．

### wercker.ymlの作成
```wercker.yml
box: fiftystorm/box2:1.3
build:
  steps:
    - script:
        name: document
        code: |
          doxygen

deploy:
  steps:
    - script:
        name: preparation
        code: |
          cp -r html/* /heroku-static-provider-master/public/
    - heroku-deploy:
        install-toolbelt: true
        key: $HEROKU_KEY
        key-name: HEROKU_KEY_PAIR
        user: $HEROKU_USER
        app-name: $APP_NAME
        source_dir: /heroku-static-provider-master/
```
wercker.yml内で，[元ポスト](http://qiita.com/iwiwi/items/13e57b91e664b29718eb)ではパッケージのインストールなどが手順に含まれていたが，大半はDocker imageを作成する際に含めてしまった．

編集したwercker.ymlはDoxyfile同様，リポジトリに入れてpushしておく．

### Werckerでの設定
#### pipelineの追加
Workflowsタブのページを見ると，この時点ではWorkflowにbuildしか存在しないはずである．

同ページ下部の`Add new pipeline`から，deployのpipelineを追加する．

* name: `deploy`
* YML Pipeline name: `deploy`
* Hook type: `Default`を選択

Environment variablesとして以下を作成．

* HEROKU_KEY: `Heroku API key の文字列`（HerokuのAccount settingsから取得可能）
* HEROKU_USER: `Herokuユーザー名`
* APP_NAME: `Herokuで作成したアプリケーション名`（あらかじめHerokuで作成しておく）

#### 作成したpipelineをWorkflowに追加する
上で追加したdeployのpipelineを，buildの後ろの+ボタンから追加する．

### ドキュメントページの作成
ドキュメント化したいソースファイルの入ったリポジトリにpushすると，`http://[Herokuアプリケーション名].heroku.com`にページが現れる．

発生したエラーはWerckerのRunsタブのページで詳しく確認できるので，エラーが発生した場合はそちらを参照して問題点を1つずつ潰していく．

## Werckerについて
* 良いところ:
    * CIサービスとしては珍しく，Githubのプライベートリポジトリに対しても無料で使える．
* 悪いところ:
    * 最近仕様が変わったようなので参考にできるものが少ない．
    * 今後も同じ仕様で使い続けられるとは限らない．
    * 今後も無料で使い続けられるとは限らない．

## 参考
### 公式
* [wercker.com/quickstarts/deployment/herok](http://devcenter.wercker.com/quickstarts/deployment/heroku.html)
* [github.com/wercker/step-heroku-deploy](https://github.com/wercker/step-heroku-deploy)

### 非公式
* [自動生成ドキュメントを無料で Web 上で最新に保つ（Wercker + Doxygen + Heroku）](http://qiita.com/iwiwi/items/13e57b91e664b29718eb)
* [werckerがいつの間にかDockerをサポートしていたので使ってみた。](http://tech-gym.com/2016/04/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC/1715.html)
* [Bitbucketで管理しているRailsプロジェクトを新しくなったWerckerを通じてHerokuにデプロイしてみた](http://uchinoinu.hatenablog.jp/entry/2016/06/15/090431)

## 今後
* ユーザ認証を設けてログインなどしないと参照できないようにする．
* pushをきっかけに，自動テストも実行されるようにする．