BoxenのPuppetfileを更新する 泥臭編

森裕介(プログラマー)
無念

Boxen便利ですね。新しいマシンを弄るたびすぐに環境を作れるのはありがたい限りです。

そんなBoxenですがPuppetfileの定義更新が多少めんどくさいですよね。

github "boxen", "3.3.6"
# Core modules for a basic development environment. You can replace
# some/most of these if you want, but it's not recommended.
github "dnsmasq", "1.0.1"
github "foreman", "1.1.0"
github "gcc", "2.0.100"
github "git", "1.3.7"
github "go", "2.0.1"
github "homebrew", "1.6.0"

特にこのへんのgithubのレポジトリを確認するやつです。 GitHubの特定レポジトリのreleasesを参照してなにが最新なのか確認して…。めんどくさい。

で、ワンライナーでrelease一覧を作ってごまかしてました。

for p in $(grep 'github ' [Puppetfileのパス] | awk '{print $2}' | sed -e 's/[",]//g' | tr '\n' ' '); do
echo $p
url="https://api.github.com/repos/boxen/puppet-${p}/releases"
curl -s $url | grep "tag_name" | sort -r | head -3
echo
# API制限に引っかからないように待機する
sleep 60
done

我ながら見事に泥臭ですね。実行するとこんなかんじになります。

boxen
"tag_name": "3.4.2",
"tag_name": "3.4.1",
"tag_name": "3.4.0",
dnsmasq
"tag_name": "1.0.1",
"tag_name": "0.2.1",
gcc
"tag_name": "0.0.2",
"tag_name": "0.0.1",

最低限のtag_nameだけわかればいいやというやっつけなのでそれなりの情報しか表示してません。上記ワンライナーの問題点は

  • tagの名前しかわからないのでどんな更新が入ったのかわからない
  • :repo指定されている場合に情報を取得できない
  • API制限に怒られないように怯えながらコマンド叩く必要がある

こんなところでしょうか。さてどうしたものか。

次回につづきます。