LoginSignup
21
11

More than 3 years have passed since last update.

HomebrewでプライベートなGitHubリポジトリのReleaseページから社内ツールを配布する

Last updated at Posted at 2017-02-04

背景

GoでCLIツールを書いてると、ビルド済みのバイナリをどうやって配布するのか問題がある。
一番手軽なのはGitHubのReleaseページにリリース物を添付ファイルとしてアップロードしておいて、curlのワンライナーでダウンロードしてもらうという方法。

でも、privateなリポジトリだとこの方法はGitHubの認証を超えられなくて使えない。
社内向けのツールなどprivateなリポジトリに置いたものも配布したいので、これなんとかならんかなぁと思って試行錯誤した結果、以前curl+jqでダウンロードするワンライナーを編み出した。

privateなGitHub Releaseページのリリース物をcurl+jqでダウンロードするワンライナー

でも、ワンライナーがすごい長いので、配布の敷居を下げるためにHomebrewのオレオレなbrew tapで配布できないかなぁと思って、さらに改良を加えた結果、brewのダウンロード処理をカスタマイズしてインストールすることに成功した。
これはみんなに有用だろうと思い、brew本体に機能追加のプルリクエストを送り、先日めでたくマージされた。

New feature: Allow download from private GitHub repository

この機能は現在stableブランチにも入り、みんな使えるようになっているので、使い方を説明しておこうと思う。

使い方

そもそもの前提として、publicなリポジトリで独自のbrew tapを作って自作ツールを配布する方法は以前書いたので、publicな場合の方法を知らない場合は、以下を参照。タイトルにGolangって入ってるけど、別にGolangじゃなくても使える。

Golangで書いたCLIツールのビルド済みバイナリをbrew tapでインストールできるようにする

privateなGitHubリポジトリからダウンロードしたい場合は、ダウンロードurlの末尾にオプション指定として :using => GitHubPrivateRepositoryReleaseDownloadStrategy というダウンロード方法の指定を書く。

以下では yourcompany というOrgの hoge というツールを配布する想定で説明する。
このツールは https://github.com/yourcompany/hoge というprivateなGitHubリポジトリのReleaseページにビルド済みのバイナリがアップロードされている。

このツールをbrewでダウンロードしてインストールするには、
以下のような Formula用の hoge.rb を作成し、これを https://github.com/yourcompany/homebrew-tap というプライベートなGitHubリポジトリに配置する。

hoge.rb
require "formula"

class Hoge < Formula
  homepage "https://github.com/yourcompany/hoge"
  url "https://github.com/yourcompany/hoge/releases/download/v0.1.0/hoge_v0.1.0_darwin_amd64.tar.gz", :using => GitHubPrivateRepositoryReleaseDownloadStrategy
  sha256 "6de411ff3e4b1658a413dd6181fcXXXXXXXXXXXXXXXXXXXX"
  head "https://github.com/yourcompany/hoge.git"
  version "0.1.0"

  def install
    bin.install "hoge"
  end
end

このようなprivateな独自brew tapを使う場合は、 brew tap コマンドに リポジトリパスをgitプロトコルで指定すると、gitの認証でprivateなtapも使えるようになる。

$ brew tap yourcompany/tap git@github.com:yourcompany/homebrew-tap.git

実際にhogeをインストールするには、 https://github.com/yourcompany/hoge からリリース物をダウンロードする必要がある。というわけで、このリポジトリにアクセス可能なGitHubのパーソナルアクセストークンを HOMEBREW_GITHUB_API_TOKEN という環境変数でexportしておく必要がある。

$ export HOMEBREW_GITHUB_API_TOKEN=xxx

この状態で、brew installすると、hogeがインストールできる。

$ brew install hoge

やったね :beer:

(補足: brew tapをgitプロトコルではなくhttpsでAPIトークンで認証する場合は https://$HOMEBREW_GITHUB_API_TOKEN@github.com/yourcompany/homebrew-tap.git とすることもできる)

まとめ

HomebrewでプライベートなGitHubリポジトリのReleaseページからダウンロードしてきてbrew installできるようになった。これで、社内ツールが配布し放題ですね。

追記:2019/07/05

残念ながらGitHubPrivateRepositoryReleaseDownloadStrategyは、あんまり使われてないからか(?)、Homebrewのv2系でbrew本体から削除されてしまったようです。悲しい :cry:
https://github.com/Homebrew/brew/pull/5598

一応Strategyの定義をコピペしてFormulaに読み込ませれば使えるようなので、現時点のbrewの最新版v2.1.6で動くコードをGistに貼っておきました。使いたい人はこちらをコピペしてFormulaで読み込ませてご利用下さい。(今後Strategyのインターフェースが変わったりすると、また壊れるかもしれないですが)

Using GitHubPrivateRepositoryReleaseDownloadStrategy removed in brew v2

21
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
11