GitHub から最新バージョンの release の tar ball を持ってきて、展開して、ビルドしようとしたらビルドスクリプト内でバージョン情報の埋め込みに git
コマンドを使ってるが .git
が同梱されていないため、git
コマンドがこけてビルドできないというパターンに遭遇した場合の対処法についてまとめる。(滅多にない。)
具体例をあげると、以下のようなものである。
git rev-parse
でソースに埋め込むためのコミットハッシュを取り出しているが、当然ながら .git
がなければ動かず、そのあとの存在チェックで fatal になってしまい、ビルドができないという状況となる。
この例では代替案として commit_hash.txt
が事前にあれば、それを使うという分岐があるため、GitHub API からコミットハッシュを持ってきて、書き込んでおくことで .git
がなくても、ビルドできるようになる。
$ echo `curl --no-progress-meter -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ethereum/solidity/tags | jq ".[] | select(.name == \"v${PV}\") | .commit.sha" | cut -b 2-9` > commit_hash.txt
リポジトリのタグ一覧を取得する API を叩く。
すると以下のような JSON を取得できる。
[ { "name": "v0.8.4", "zipball_url": "https://api.github.com/repos/ethereum/solidity/zipball/refs/tags/v0.8.4", "tarball_url": "https://api.github.com/repos/ethereum/solidity/tarball/refs/tags/v0.8.4", "commit": { "sha": "c7e474f243fa6bd6d6c172118b95d52113b5fbad", "url": "https://api.github.com/repos/ethereum/solidity/commits/c7e474f243fa6bd6d6c172118b95d52113b5fbad" }, "node_id": "MDM6UmVmNDA4OTI4MTc6cmVmcy90YWdzL3YwLjguNA==" }, { "name": "v0.8.3", "zipball_url": "https://api.github.com/repos/ethereum/solidity/zipball/refs/tags/v0.8.3", "tarball_url": "https://api.github.com/repos/ethereum/solidity/tarball/refs/tags/v0.8.3", "commit": { "sha": "8d00100c4e9d211830a5dbf6a1f964d98648480d", "url": "https://api.github.com/repos/ethereum/solidity/commits/8d00100c4e9d211830a5dbf6a1f964d98648480d" }, "node_id": "MDM6UmVmNDA4OTI4MTc6cmVmcy90YWdzL3YwLjguMw==" }, : ]
この中から対応する tar ball のバージョンのコミットハッシュを jq
で取り出し、ファイルに書き込めばできあがりとなる。