本文の永久リンク HOWTO: AUR へのパッケージの提出方法 | Travis' Blog へようこそ。
最近、Rust で書かれた gpt を使用してコミットメッセージを生成するためのツールであるgptcommitを見つけました。基本的な原理は、git diff
の出力を gpt に送り、コミットメッセージとして使用できるテキストを生成することです。怠惰な人には非常に便利です。人間は本当に怠惰になりました😂
AUR(Arch User Repository)にはgptcommit-gitパッケージがありますが、バージョンは 0.1.16 で止まっているため、おそらくPKGBUILD
の問題により、バージョンを手動で更新する必要があります。
AUR にはgptcommit-bin
もなく、また将来的な簡単なバージョンアップデートのために、自分でパッケージを作成してアップロードし、コミュニティに微々たる貢献をすることにしました☺。
まず、正当なパッケージを作成してアップロードする方法を調べるために、最も信頼性の高い Arch Wiki を参照し、Arch パッケージングガイドライン1と Arch コミットガイドライン2を調べ、ChatGPT にアドバイスを求めましょう。
gptcommit の作者はリリースで、各プラットフォーム向けにコンパイル済みのバイナリファイルを提供しています。ダウンロードして解凍し、/usr/bin
ディレクトリに配置するだけで使用できます。非常に簡単なパッケージングプロセスです。以下は作成したPKGBUILD
ファイルです。作成した後、makepkg -Acs
コマンドを使用して、現在のディレクトリに tarball を生成し、sudo pacman -U <tarball>pkg.tar.zst
を使用してインストールを完了します。
# Maintainer: travismtg <[email protected]>
pkgname=gptcommit-bin
pkgver=0.5.8
pkgrel=1
pkgdesc="A git prepare-commit-msg hook for authoring commit messages with GPT-3."
arch=('any')
url='https://github.com/zurawiki/gptcommit'
license=('MIT')
depends=()
conflicts=('gptcommit-git' 'gptcommit')
source=('https://github.com/zurawiki/gptcommit/releases/download/v0.5.8/gptcommit-x86_64-unknown-linux-gnu.tar.gz')
sha256sums=('d0efe345dd4b598a8c06bd9ba7036ae4e148141deb606c64e612e8959273cedc')
package() {
cd "$srcdir"
mkdir -p "$pkgdir/usr/bin/"
tar zxvf gptcommit-x86_64-unknown-linux-gnu.tar.gz -C "$pkgdir/usr/bin/"
}
正常にインストールできることを確認したら、アップロードの準備ができます。
- まず、AUR アカウントを登録し、SSH の公開鍵を設定して自分自身を証明します。
- 次に、リポジトリを作成します。
git clone ssh://[email protected]/gptcommit-bin.git
を使用してリモートリポジトリを作成します(はい、クローンするだけでリポジトリが作成されます) - 作成した
PKGBUILD
ファイルをリポジトリに配置し、makepkg --printsrcinfo > .SRCINFO
を使用してパッケージの基本情報ファイルを生成します。 git add PKGBUILD .SRCINFO && git commit -m "v0.5.8"
を実行します。git push --set-upstream origin master
を実行してリモートにプッシュします。
ここまでで、公開したパッケージgptcommit-binがウェブページに表示されるようになりました。しかし、一度作成したので、さらに自動化して、新しいバージョンがあるたびに自動的に更新することにしましょう。新しいバージョンがあるたびにバージョン番号、ダウンロード URL、および sha256 情報を手動で変更するのは少し煩雑です。
#!/usr/bin/env bash
# Created by travismtg
# Thu Apr 27 11:08:31 PM CST 2023
# usage: ./update.sh /path/to/pkg
DES=$1 # パッケージのディレクトリ
cd $DES
VERSION_URL=`curl -s https://api.github.com/repos/zurawiki/gptcommit/releases/latest |\
jq -r '.tag_name as $version | .assets[] | select(.name | contains("linux-gnu")) | $version + " " + .browser_download_url'`
VERSION=$(echo $VERSION_URL | cut -d' ' -f1 | sed 's/v//')
CURRENT_VERSION=$(grep 'pkgver=' PKGBUILD | sed 's/pkgver=//')
echo latest version is $VERSION
echo current version is $CURRENT_VERSION
if [[ $VERSION == $CURRENT_VERSION ]]; then
echo exit
exit
fi
URL=`echo $VERSION_URL | cut -d' ' -f2`
POSTURL=$(echo $URL | sed 's/\//\\\//g')
TARGET=$(echo $URL | grep -o 'gptcommit-x86.*tar.gz')
wget $URL -O $TARGET
SUM=$(sha256sum $TARGET | cut -f1 -d' ')
sed -i 's/^source=(.*)/source=('"'"$POSTURL"'"')/' PKGBUILD
sed -i 's/^sha256sums=(.*)/sha256sums=('"'"$SUM"'"')/' PKGBUILD
sed -i 's/^pkgver=.*/pkgver='$VERSION'/' PKGBUILD
makepkg --printsrcinfo > .SRCINFO
# commit and push
git add PKGBUILD .SRCINFO
git commit -m "$VERSION"
git push
毎回./update.sh /path/to/pkg
を実行するだけで、パッケージファイルを更新できます。これらのファイルをサーバーに配置し、crontab
を設定して、毎朝 10 時にバージョンの更新をチェックするようにします。これにより、gptcommit パッケージの自動更新が実現されます。
本文はここで終了です。このプロセスで最も感じたことは、ChatGPT は本当に使いやすいということです。私は単に GitHub の特定のリポジトリの最新リリースを取得し、Linux のダウンロードリンクをフィルタリングする方法について尋ねるだけで、ChatGPT が GitHub API を素早く見つけ、jq
ルールを書いてくれました。もちろん、これらの情報はドキュメントを参照したり、Google で検索したりすれば簡単に見つけることができますが、ChatGPT は知識を得るための時間を短縮し、私が望んでいるものを個別に推論することができる、いつも飽きない素晴らしい先生です。