Github ActionsでREADMEにおみくじを作った

作成: 2021年03月30日

更新: 2021年03月30日

おみくじ

Githubのユーザーページで毎日変わるおみくじを作りました.

bana118 (banatech)

omikuji.gif

作り方

Githubではユーザーネームと同名のリポジトリのREADME.mdがユーザーページに表示されるようになっています.

プロフィールの README を管理する - GitHub Docs

これとGithub Actionsを利用して毎日結果の変わるおみくじを作りました.

README.mdは以下のようになっています.

README.md# Hello!

Welcome to my page!

- [My Works⭐](https://banatech.net)
- [My Blog✒](https://banatech.net/blog)

# Omikuji
Your fortune for today!

<!-- Omikuji Start -->
![omikuji](gif/anim1.gif)
<!-- Omikuji End -->

<!-- Omikuji Start --><!-- Omikuji End -->で囲まれた部分を以下のPythonスクリプトでランダムに書き換えています.

import pathlib, re, random

def update_readme(gif_name):
    root = pathlib.Path(__file__).parent.resolve()
    readme = root / "README.md"
    with open(readme) as f:
        old = f.read()
    s1 = "<!-- Omikuji Start -->\n!\[omikuji\]\(gif/(.*)\)\n<!-- Omikuji End -->"
    s2 = f"<!-- Omikuji Start -->\n![omikuji](gif/{gif_name})\n<!-- Omikuji End -->"
    new = re.sub(s1, s2, old)
    with open(readme,"w") as f:
        f.write(new)

v = random.randint(1, 100)

if v <= 30:
    update_readme("anim1.gif")
elif v > 30 and v <= 80:
    update_readme("anim2.gif")
elif v >= 80 and v < 99:
    update_readme("anim3.gif")
else:
    update_readme("anim4.gif")

そしてこのPythonスクリプトを以下のGithub Actionsで1日1回動かし,README.mdの変更をcommit, pushしています.

name: Update Github README
on:
  schedule:
    - cron: '0 15 * * *'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Check out repo
        uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.8
      - name: Update README
        run: |-
          python omikuji.py
          cat README.md
      - name: Commit and push if changed
        run: |-
          git diff
          git config --global user.name "Omikuji Bot"
          git add -A
          git commit -m "Update Omikuji" || exit 0
          git push

感想

abhisheknaiidu/awesome-github-profile-readme: 😎 A curated list of awesome Github Profile READMEs 📝にawesomeなREADMEがリストアップされているのでこれらも参考にしてもう少しおしゃれにしたい.