Skip to content

Instantly share code, notes, and snippets.

@junk-labs
Last active November 2, 2016 23:47
Show Gist options
  • Save junk-labs/8ba93af50dca7ed45c0c0da361219bcd to your computer and use it in GitHub Desktop.
Save junk-labs/8ba93af50dca7ed45c0c0da361219bcd to your computer and use it in GitHub Desktop.
#!/bin/bash
# YOUR_ACCESS_TOKEN には https://www.pushbullet.com/#settings/account から取得したトークンを使用
PUSHBULLET_TOKEN=YOUR_ACCESS_TOKEN
# CCacheを使う
export USE_CCACHE=1
workdir=`pwd`
mkdir -p $workdir/log/success $workdir/log/fail $workdir/rom
# オプションを処理
while getopts tpsc OPT
do
case $OPT in
"t" ) FLG_TWEET="TRUE" ;;
"p" ) FLG_PUSHBULLET="TRUE" ;;
"s" ) FLG_SYNC="TRUE" ;;
"c" ) FLG_CLEAN="TRUE" ;;
esac
done
# 引数からオプション部分を切り捨てる。
shift `expr $OPTIND - 1`
# 実行時の引数が正しいかチェック
if [ $# -ne 2 ]; then
echo "Usage: $CMDNAME [-tpsc] [builddir] [target]" 1>&2
echo "-t ツイート可否 -p PUSHBULLET可否 -s repo sync可否 -c make clean可否" 1>&2
echo "ログは自動的に記録されます。" 1>&2
exit 1
fi
builddir=$1
device=$2
cd $builddir
# repo sync
if [ "$FLG_SYNC" = "TRUE" ]; then
repo sync -j8 -c -f --force-sync --no-clone-bundle
echo -e "\n"
fi
# make clean
if [ "$FLG_CLEAN" = "TRUE" ]; then
make clean
echo -e "\n"
fi
buildtype=`basename $builddir`
# 現在日時取得、ログのファイル名設定
starttime=$(date '+%Y/%m/%d %T')
filetime=$(date '+%Y-%m-%d_%H-%M-%S')
filename="${filetime}_${buildtype}_${device}.log"
# CMやRRの場合、吐き出すzipのファイル名はUTC基準での日付なので注意
zipdate=$(date -u '+%Y%m%d')
#ccache
if [ $USE_CCACHE -eq 1 ]; then
prebuilts/misc/linux-x86/ccache/ccache -M 50G
echo -e "\n"
fi
source build/envsetup.sh
breakfast $device
# ディレクトリ名からツイート用のROM情報の設定をする
if [ $buildtype = cyanogenmod ]; then
source="CyanogenMod 13.0"
short="CM13"
zipname="cm-$(get_build_var CM_VERSION)"
elif [ $buildtype = rr ]; then
vernum=$(get_build_var PRODUCT_VERSION)
source="ResurrectionRemix v${vernum}"
short="RR v${vernum}"
zipname=$(get_build_var CM_VERSION)
else
# 一応対処するけど他ROMについては上記を参考にちゃんと書いてもらわないと後がめんどい
source=$buildtype
short="${source}"
zipname="*"
fi
# 開始時のツイート
if [ "$FLG_TWEET" = "TRUE" ]; then
twstart=$(echo -e "${device} 向け ${source} のビルドを開始します。 \n\n$starttime #madokaBuild")
perl ~/oysttyer/oysttyer.pl -ssl -status="$twstart"
fi
# ビルド
mka bacon 2>&1 | tee "$workdir/log/$filename"
if [ $(echo ${PIPESTATUS[0]}) -eq 0 ]; then
ans=1
statusdir="success"
endstr=$(tail -n 3 "$workdir/log/$filename" | tr -d '\n' | sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' | sed 's/#//g' | sed 's/make completed successfully//g' | sed 's/^[ ]*//g')
statustw="${zipname} のビルドに成功しました!"
else
ans=0
statusdir="fail"
endstr=$(tail -n 3 "$workdir/log/$filename" | tr -d '\n' | sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' | sed 's/#//g' | sed 's/make failed to build some targets//g' | sed 's/^[ ]*//g')
statustw="${device} 向け ${source} のビルドに失敗しました…"
fi
cd $workdir
echo -e "\n"
# 結果のツイート
if [ "$FLG_TWEET" = "TRUE" ]; then
endtime=$(date '+%Y/%m/%d %H:%M:%S')
twfinish=$(echo -e "$statustw\n\n$endstr\n\n$endtime #madokaBuild")
perl ~/oysttyer/oysttyer.pl -ssl -status="$twfinish" -autosplit=cut
fi
# Pushbullet APIを使ってプッシュ通知も投げる。文言は適当に
if [ "$FLG_PUSHBULLET" = "TRUE" ]; then
pbtitle=$(echo -e "${statusdir}: Build ${short} for ${device}")
pbbody=$(cat -v "log/$filename" | tail -n 3 | tr -d '\n' | cut -d "#" -f 5-5 | cut -c 2-)
curl -u ${PUSHBULLET_TOKEN}: -X POST \
https://api.pushbullet.com/v2/pushes \
--header "Content-Type: application/json" \
--data-binary "{\"type\": \"note\", \"title\": \"${pbtitle}\", \"body\": \"${pbbody}\"}"
fi
# ログ移す
mv -v $workdir/log/$filename $workdir/log/$statusdir/
echo -e "\n"
# ビルドが成功してれば ~/rom に移動しておく
if [ $ans -eq 1 ]; then
mkdir -p $workdir/rom/$device
mv -v --backup=t $builddir/out/target/product/$device/${zipname}.zip $workdir/rom/$device/${zipname}.zip
mv -v --backup=t $builddir/out/target/product/$device/${zipname}.zip.md5sum $workdir/rom/$device/${zipname}.zip.md5sum
echo -e "\n"
fi
@junk-labs
Copy link
Author

ほたさんが作成された https://github.com/lindwurm/madoka を改造

  • コマンドライン引数のうち、0か1で決める引数をオプション扱いに変更
  • ccacheを使えるように変更
  • カレントディレクトリに各ディレクトリを作成するように変更

カレントディレクトリにrrソースツリーが有ると仮定した場合
$ madoka.sh rr dlxj
だけで一通りビルド出来ます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment