やりたいこと
GitHub上でtagを作ると、apkファイルがreleaseとしてアップロードされる。
apkを作成する人がいなくても、コード修正できて、GitHubでタグ作れればapkが取得できる。
イメージとしては下記のような感じ。
手順
circle.yml
にtagの設定を追加する
GitHubの推奨に従って、タグ名はv1.0.9
といった形を想定しています。
circle.yml
deployment:
release:
tag: /v[0-9]+(\.[0-9]+)*/
commands:
- ./gradlew assemble -PdisablePreDex
- ./scripts/release.sh app/build/outputs/apk/app-debug.apk app-debug.apk
- ./scripts/release.sh app/build/outputs/apk/app-release.apk app-release.apk
script/release.sh
を作成する
CircleCI上に、GITHUB_ACCESS_TOKEN
という名称で、GitHubのPersonal access tokenを設定しておく必要があります。
$1
はファイルパス、$2
にGitHub上で表示されるファイル名が設定される前提です。
script/release.sh
#!/usr/bin/env bash
sudo apt-get install jq
UPLOAD_URL=`curl -H "Authorization: token $GITHUB_ACCESS_TOKEN" https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/releases/tags/$CIRCLE_TAG | jq '.upload_url'`
UPLOAD_URL=`echo $UPLOAD_URL | sed -e 's/{?name,label}/?name=/g' | sed -e 's/"//g'`
curl --data-binary @$1 -H "Content-Type: application/zip" -H "Authorization: token $GITHUB_ACCESS_TOKEN" $UPLOAD_URL$2
まとめ
これで、またビルド職人の作業が減らせると思います。
シェルスクリプトの内容もそんなに凝ったものではないので、属人性も少ないと思います。