2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitHub にプッシュした時に .org ファイルに書いたシェルスクリプトをファイル出力して自動コミットさせる

Last updated at Posted at 2020-10-31

表題まま。

覚えた Tips や備忘録のような一言メモ(ツイートみたいなやつ)を Org Mode で書いて、プライベートリポジトリで管理していたりするリポジトリがあります。

.org ファイルに自分用のコマンドをシェルスクリプトで書いてある部分があって、シェルスクリプトの内容を書き換えたら手動でファイル出力して、リポジトリに追加したりしていました。

.org ファイルの中のシェルスクリプトの書き換えで満足してしまって、ファイル出力するのを忘れることがありそうだし、単に面倒くさいということもあって、これを自動化してみた試みについての話です。

README.org

README.org というファイルにいくつか自分用のシェルコマンドを書いてあります。

一言メモは投稿日時と投稿内容だけが保存されているようなもので、勤務中に org-capture して蓄積した一言メモを、退勤時に一回だけコミットして、GitHub にプッシュしておき、後でスマホから見たり編集したりできるように 1 しているだけなので、いちいちコミットメッセージとかつけるようなものではありません。
なので、退勤時に一発コマンドを叩けば、適当なコミットメッセージで今ある差分すべてをコミットしてプッシュしてくれるようなシェルスクリプトが README.org に記述されています。

以下のような感じです。

* GitHub に同期するコマンド

  日常的には以下のスクリプトで commit & push する。

  #+begin_src shell :tangle bin/upload :tangle-mode (identity #o755) :shebang #!/bin/bash
    cd $(dirname $(realpath $0))
    git commit -am "autocommit: $(TZ=Asia/Tokyo date -Iseconds)"
    git push
  #+end_src

上記をタングルする(org-babel-tangle でファイル出力するの意)と、Org Babel のヘッダに記載されているとおり、パーミッション 755 で bin/upload というファイルが生成されます。

GitHub Actions

上記以外にも README.org にはファイル出力したいコード片がいくつかあります。コード片を書き換えた時にファイル出力を忘れることを防止したい、そもそも楽したいということで、下記の GitHub Actions で自動化したという話です。

コード片の変更によって出力されるファイル内容が変われば、それが差分となって GitHub アクションが勝手に出力されたファイルをリポジトリに追加してくれるようになります。

name: tangle

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up Emacs
        uses: purcell/setup-emacs@v3.0
        with:
          version: 27.1
      - name: Tangle
        run: emacs -Q --batch --eval "(progn (require 'ob-tangle) (with-current-buffer (find-file-noselect \"./README.org\") (org-babel-tangle)))"
      - name: Git Auto Commit
        uses: stefanzweifel/git-auto-commit-action@v4.7.2
        with:
          commit_message: "[自動コミット] GitHub Actions がタングルした"

すでに世に出回っているアクションの組み合わせで事足りました。

Emacs をセットアップしてくれる Set up Emacs アクションを使ったのと、一連のステップでリポジトリに生じた差分を自動コミットしたりできる Git Auto Commit アクションを使わせてもらいました。

自分で書かなきゃいけなかった箇所は実質、Emacs を使って README.org に記載されているコード片をタングルする所だけですが、これも公式ドキュメントの Batch Execution という項目にやり方が載っていました。

ということでたいした苦労もせずに自動化できてしまい、先人の皆様ありがとうございます :bow: という気持ちです。

現場からは以上です。Happy Org Babel !!

  1. Termux に GitHub の Git リポジトリをクローンして、Orgzly のローカルリポジトリに割り当ています。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?