Intro
MELPAのレビューが遅い。
MELPAのメンテナの方には感謝してしきれないが、実際のところ、レシピ追加PRを出して2週間から3週間音沙汰ないまま放置されたり、先方のレビューを反映して修正しても、そこから2週間、3週間待たされることがままあり、ストレスを抱えていました。
私はあまりinit.elを大きくしたくなく、ある程度の大きさになるとパッケージで切りだして (leaf hoge)
で簡単にアクティベートしたいと考えているため、MELPAに入れてもらえないと el-get
で取ってこないといけませんでした。
ここでさらに問題があり、 el-get
は package
との相性が悪く、微妙な評価タイミングの違いがとても重要になります。
init.elを自分で全てコントロールしていたとしても、おまじないの部分が増えるし、leaf-managerで自動管理している場合は原理的に不可能でした。
そのためMELPAっぽく、さらにレシピの追加を自分でコントロールできるアーカイブが必要となり、今回、celpa.conao3.comをデプロイしました。
MELPAの仕組み
MELPAは単に利用するもので、自分でMELPAを作りたい場合、どこから手をつけたら良いか分かりませんでした。
ただ、takaxpさんがwikiを翻訳して下さっており、この通り進めればなんとかなりました。
もちろんwiki(Custom Melpa Archive, Melpa and package build)も参照しました。
MELPAソースの修正
レシピの削除
MELPAのクローンを作ろうとしているわけではないので、MELPAに既に登録されているレシピは必要ありません。 全部削除してしまいます。
レシピの追加
欲しいパッケージのレシピをおもむろに追加します。もちろんMELPAの形式と一緒のものです。
サーバーの用意
いい感じのサーバーとドメインを用意し、rsyncでよしなに同期できるようにします。 その話については「Archのrsyncで転送できないときに確認すること」に書きました。
index.htmlの修正
いい感じにindex.htmlを修正します。 おそらくjsonが足らない(CELPAではダウンロード数の記録はしてない)らしく、MELPAに付属しているjavascriptが動きません。
適当にjsを書いたり、リンクを修正したりします。
GitHub Actionsの設定ファイル追加
GitHub Actionsで30分ごとにビルドが走るようにします。
name: Main workflow
on:
push:
branches:
- master
pull_request:
branches:
- master
schedule:
- cron: '*/30 * * * *'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
emacs_version:
- '26.3'
steps:
- uses: actions/checkout@v1
- uses: actions/cache@v1
with:
path: working
key: ${{ runner.os }}-working
- uses: actions/setup-python@v1.1.1
- uses: purcell/setup-emacs@master
with:
version: ${{ matrix.emacs_version }}
- uses: conao3/setup-cask@master
- name: Build
run: |
git status
make add-package-build-remote
make pull-package-build
make
- name: Install SSH key
if: github.ref == 'refs/heads/master'
uses: shimataro/ssh-key-action@v1
with:
private-key: ${{ secrets.SSH_KEY }}
public-key: ${{ secrets.SSH_KEY_PUBLIC }}
known-hosts: ${{ secrets.KNOWN_HOSTS }}
- name: Deploy
if: github.ref == 'refs/heads/master'
run: |
rsync -av -e 'ssh' --delete --exclude=.git --exclude=working ./ conao3@conao3.sakura.ne.jp::www/celpa/
まとめ
振り返ってみるとMELPAをCELPAとして動かせるように修正するのは簡単でした。
やはりミスが許されず、時間がかかるのは秘密鍵/権限回りで、その部分で半分以上の時間を費しました。
レシピを直接pushできるというのはMELPAを使っていた頃には考えられない快適さです。
ぜひみなさんもオレオレMELPAをデプロイして、package.elだけでパッケージを管理できるようにしましょう!