GitHub APIでリポジトリにファイルをコミットするコマンドを作った
GitHub APIを利用してリポジトリにファイルをコミットするコマンド ghcp
を作りました。シングルバイナリでgitコマンドに依存しないため、リリースなどでCIからリポジトリのファイルを書き換えたい場合に便利です。
使い方
GitHub ReleasesもしくはHomebrewからインストールできます。
# GitHub Releases curl -L -o /usr/local/bin/ghcp https://github.com/int128/ghcp/releases/download/v1.3.0/ghcp_linux_amd64 # Homebrew brew tap int128/ghcp brew install ghcp # Go go get github.com/int128/ghcp
あらかじめGitHubの設定ページからトークンを取得して $GITHUB_TOKEN
に設定しておく必要があります。
基本的な使い方は以下になります。
デフォルトブランチ(通常はmaster)にファイルをコミットする:
ghcp -u YOUR -r REPO -m MESSAGE files
指定したブランチにファイルをコミットする:
ghcp -u YOUR -r REPO -b BRANCH -m MESSAGE files
デフォルトブランチから新しいブランチを作成して、ファイルをコミットする:
ghcp -u YOUR -r REPO -B BRANCH -m MESSAGE files
指定した親ブランチから新しいブランチを作成して、ファイルをコミットする:
ghcp -u YOUR -r REPO -B BRANCH --parent PARENT -m MESSAGE files
応用例
GitHub Pagesへのリリース
CIでビルドしたファイルをGitHub Pagesにリリースする場合、これまでは git commit
や git push
を駆使したスクリプトを書く必要がありましたが、ghcpを使うと以下の1コマンドでリリースできます。
ghcp -u int128 -r sandbox -b gh-pages -m "Example commit" index.html
Homebrew tapリポジトリへのリリース
tapリポジトリにformulaをリリースする場合もghcpを使うと簡単に実現できます。
# formulaを生成する cat > hello.rb <<EOF class Hello < Formula desc "Your awesome application" homepage "https://github.com/YOUR/hello" url "https://github.com/YOUR/hello/releases/download/v1.0.0/hello_darwin_amd64" version "v1.0.0" sha256 "$(shasum -a 256 -b hello | cut -f1 -d' ')" def install bin.install "hello_darwin_amd64" => "hello" end test do system "#{bin}/hello -h" end end EOF # tapリポジトリにコピー ghcp -u int128 -r homebrew-sandbox -m v1.0.0 hello.rb
バージョン文字列を書き換える
READMEやビルドスクリプトなどのバージョン文字列を書き換える用途にも使えます。CIで新バージョンをテストする場合に便利ですね。
# substitute version string in files sed -i -e "s/version '[0-9.]*'/version '$TAG'/g" README.md build.gradle # commit the changes to a new branch ghcp -u YOUR -r REPO -B bump-v1.1.0 -m v1.1.0 README.md build.gradle
まとめ
詳しい使い方は https://github.com/int128/ghcp を参照してください。