wharfy 0.19.0 — 手元の資格情報を CI へ、配った先は実体で確認

手元の資格情報を、そのまま CI に渡せます

wharfy auth <kind> --print は、預けた資格情報を wharfy 自身が読むのと同じ経路で解いて出します。

wharfy auth fury --print | gh secret set PACKAGE_REPO_TOKEN

キーチェーンに入っている値は、取り出してそのまま使えるとは限りません。保存の都合で包まれた形に なっていることがあり、それを CI のシークレットに登録すると、何も言わずに 401 になります。 トークンが違うのかアカウント名が違うのかも分からないまま、原因を探すことになります。

標準出力に出るのは値だけです。それ以外の表示は標準エラーへ回すので、パイプに混ざりません。 --json とは併用できません。プログラムから読める出力に秘密を載せると、それを読むエージェントの 文脈に残ります。

wharfy secrets は、runner に要るツールも言います

トークンが揃っていても、runner にビルドのツールが無ければ落ちます。何を入れるかも secrets が出します。

$ wharfy secrets
tools wharfy shells out to (they must be on PATH wherever wharfy runs):
  ✗ goreleaser               cross-compile, archive and package the Go build path — build / release / publish shell out to it (BYO inputs, prebuilt: / bundle:, do not need it)
    go install github.com/goreleaser/goreleaser/v2@latest   # or: uses: goreleaser/goreleaser-action@v6 with: {install-only: true}

持ち込みバイナリ(prebuilt: / bundle:)で配るなら要りません。それも含めて判定します。

上げただけで配れていない apt / rpm を、publish が見つけます

アップロードが成功しても、利用者がまだ入れられないことがあります。しかも応答は 200 なので、 配布者からは見えません。

起きること 見え方
hosted repo の索引生成に数分かかる しばらく 404。待てば直る
fury は受け取ったパッケージを既定で非公開として扱う ダッシュボードで公開に切り替えるまで、永久に配れない

publish は書いた直後に公開側の索引を引き、そのバージョンが出ていなければ pkg_not_indexed で警告します。 アップロード自体は成功しているので、失敗にはしません。verify も、apt/rpm でパッケージが 見つからないときは「壊れた」ではなく「索引待ち、あるいは非公開のまま」を先に言います。

ローカルの記録が無くても verify できます

verify は配った記録(.wharfy/state.json)を基点にしていました。記録はローカルの生成物なので、 別のジョブにも、まっさらな clone にも渡りません。checkout して verify を叩くだけの workflow は、 ほとんどのチャネルが skipped に落ちて、実質何も確かめられませんでした。

確かめるバージョンの決め方が、記録に限らず順に落ちるようになりました。

基点
1 --version <v> で名指し
2 そのチャネルの publish 記録
3 チャネルの実体(GitHub Release の最新)
4 git の直近タグ

記録が無くても、HEAD がタグより進んでいても、配ったバージョンを確かめられます。

$ wharfy verify
✓ verified homebrew; partial releases, script, goinstall, apt, rpm; skipped scoop

直したこと

入れ方

brew upgrade wharfy / scoop update wharfy / go install github.com/ShiroDoromoto/wharfy/cmd/wharfy@latest。Linux は apt / yum リポジトリから。