オレオレ Scoop Bucket を作ってみた

no extension

hymkor さんの

を見て「これならボクにもできそう」と思ったので作ってみた。

まずは,テンプレート・リポジトリの GitHub ページで “Use this template” → “Create a new repository” で一式を fork する。 既定ブランチが master なのでご注意を。

あとは README.md を適当に修正して bucket/ フォルダにマニフェスト・ファイル(*.json)を入れるだけ。

マニフェスト・ファイルはパッケージごとに作成する。 たとえば,拙作 gpgpdump ならファイル名を bucket/gpgpdump.json として,こんな感じに記述する。

{
    "version": "0.15.0",
    "description": "OpenPGP packet visualizer",
    "homepage": "https://github.com/goark/gpgpdump",
    "license": "Apache-2.0",
    "architecture": {
        "64bit": {
            "url": "https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_64bit.zip",
            "hash": "be818119dc650f245aa8665f1af155b9d14c17c70e617517e817d81acb244151"
        },
        "arm64": {
            "url": "https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_ARM64.zip",
            "hash": "73d999250dc4a03b2298aa88271a34db2ff1cd3013428243b2e28afaed95aa5e"
        }
    },
    "bin": "gpgpdump.exe",
    "checkver": "github",
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_64bit.zip"
            },
            "arm64": {
                "url": "https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_ARM64.zip"
            }
        }
    }
}

シングルバイナリなので簡単!

必要な数だけマニフェスト・ファイルができたら commit & push で GitHub に送る。 すると GitHub Actions が走り出すので,終わるまで待ってエラーが出なければ無問題である。

最終的にはこんな感じのリポジトリになった。

早速 Windows 環境で試してみよう。

まずは,既存の bucket に gpgpdump がないことを確認する。

$ scoop search gpgpdump
WARN  No matches found.

次に,作成したオレオレ buket を登録する。 そのまま GitHub リポジトリのパスを指示すれば OK。

$ scoop bucket add goark https://github.com/goark/scoop-bucket
Checking repo... OK
The goark bucket was added successfully.

うんうん。 ちなみに bucket 名は(名前が被らなければ)任意に指定できる1

この状態でもう一度 gpgpdump を探してみる。

$ scoop search gpgpdump
Results from local buckets...

Name     Version Source Binaries
----     ------- ------ --------
gpgpdump 0.15.0  goark

おー。 あるやないかい。 では実際にインストールして動作確認してみよう。

$ scoop install gpgpdump
Installing 'gpgpdump' (0.15.0) [64bit] from goark bucket
gpgpdump_0.15.0_Windows_64bit.zip (3.1 MB) [==================================================================] 100%
Checking hash of gpgpdump_0.15.0_Windows_64bit.zip ... ok.
Extracting gpgpdump_0.15.0_Windows_64bit.zip ... done.
Linking ~\scoop\apps\gpgpdump\current => ~\scoop\apps\gpgpdump\0.15.0
Creating shim for 'gpgpdump'.
'gpgpdump' (0.15.0) was installed successfully!

$ gpgpdump.exe version
gpgpdump v0.15.0
repository: https://github.com/goark/gpgpdump

よーし,うむうむ,よーし。

今のところ以下のツールを登録している。

  • gpgpdump - OpenPGP packet visualizer
  • depm - Visualize depndency packages and modules
  • gnkf - Network Kanji Filter by Golang
  • ml - Make Link with Markdown Format

問題は登録しているツールのバージョンを上げるたびに対応するマニフェスト・ファイルも更新しないといけないところかな。 手で直すのは手間なので,何らかのバッチ処理を考えないとな。

【2022-01-09 追記】make-scoop-manifest でマニフェスト・ファイルを生成する

これを使えばマニフェスト・ファイルが簡単に生成できるようだ。 ありがたや 🙇

私の場合は Usage-3 でいけそうかな2

Windows 用のバイナリは提供されているが,他のプラットフォーム用バイナリはないので,とりあえず以下のコマンドラインで試してみた。

$ go run github.com/hymkor/make-scoop-manifest@latest -D -g goark/gpgpdump
go: downloading github.com/hymkor/make-scoop-manifest v0.2.2
/tmp/go-build3806744147/b001/exe/make-scoop-manifest  for linux/amd64 by go1.19.4
Get: https://api.github.com/repos/goark/gpgpdump/releases
Download: https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_64bit.zip
Download: https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_ARM64.zip
Get: https://api.github.com/repos/goark/gpgpdump
{
    "version": "0.15.0",
    "description": "OpenPGP packet visualizer",
    "homepage": "https://github.com/goark/gpgpdump",
    "license": "Apache License 2.0",
    "architecture": {
        "64bit": {
            "url": "https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_64bit.zip",
            "hash": "be818119dc650f245aa8665f1af155b9d14c17c70e617517e817d81acb244151"
        },
        "arm64": {
            "url": "https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_ARM64.zip",
            "hash": "73d999250dc4a03b2298aa88271a34db2ff1cd3013428243b2e28afaed95aa5e"
        }
    },
    "bin": [
        "gpgpdump.exe"
    ],
    "checkver": "github",
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_64bit.zip"
            },
            "arm64": {
                "url": "https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_ARM64.zip"
            }
        }
    }
}

おー。 いけるいける。

というわけで,早速 Task 用の設定ファイルを書いて一括処理できるようにする。 こんな感じ。

version: '3'

tasks:
  default:
    deps: [depm, gnkf, gpgpdump, ml]

  depm:
    dir: bucket/
    deps: [build-make-scoop-manifest]
    cmds:
      - make-scoop-manifest -D -g goark/depm > depm.json
    generates:
      - depm.json

  gnkf:
    dir: bucket/
    deps: [build-make-scoop-manifest]
    cmds:
      - make-scoop-manifest -D -g goark/gnkf > gnkf.json
    generates:
      - gnkf.json

  gpgpdump:
    dir: bucket/
    deps: [build-make-scoop-manifest]
    cmds:
      - make-scoop-manifest -D -g goark/gpgpdump > gpgpdump.json
    generates:
      - gpgpdump.json

  ml:
    dir: bucket/
    deps: [build-make-scoop-manifest]
    cmds:
      - make-scoop-manifest -D -g goark/depm > ml.json
    generates:
      - ml.json

  build-make-scoop-manifest:
    desc: Build make-scoop-manifest command.
    run: once
    cmds:
      - go install github.com/hymkor/make-scoop-manifest@latest

もうちょっとスマートに書きたいが …まぁいいか。

これでバージョンアップの度に手書きで更新しなくてよくなった。 めでたし!

ブックマーク


  1. scoop bucket known で表示されるリストは公式(?)の bucket 名なので,それ以外の名前を使うのがいいだろう。 Bucket を削除する場合は scoop bucket rm <bucket name> でいける。 ↩︎

  2. 私は GoReleaser + GitHub Actions でバイナリを自動生成してしまうので,手元にバイナリはないのだ。 ↩︎