Zennでアドベントカレンダーを行うためのGitHub Actions
2020年は Zenn のアドベントカレンダー機能のリリースが間に合わなそうだ。
アドベンドカレンダーはWikipedia[1]によると
- インターネット上などで、12月の1日から25日までに、特定のテーマに沿って毎日ブログなどに記事を投稿していくという企画
- 複数人実施の場合は、カレンダーを管理するサイトを軸にある程度の範囲(プログラミング言語や使用する技術など)を決めて参加者を募り、順に投稿を行うというスタイルが多い。
つまり、アドベンドカレンダーは 記事投稿先だけあれば実施 できる 。Zennでもアドベンドカレンダー目次記事のようなものを作り、 勝手に アドベンドカレンダーを実施することはできるだろう。
Zennで、一人アドベンドカレンダーに挑戦したいと考えたが、その際に面倒だと感じることは、
毎日、記事を公開する操作をしなければならない ことだ。
つまり、事前に記事を書いておき、公開をスケジューリングする 機能が一番必要だ。
GitHubリポジトリでZennのコンテンツを管理 していれば、GitHubActionsの on.schedule
[2] で実現できそうなのでやってみた。
なお、公開用ブランチへのマージする設定の記載は Github Actions でブランチの操作を行う - RitoLabo を参考にさせていただきました。
GitHub Actionsで記事公開をスケジューリングする
日付毎に、公開する記事を書くブランチを用意する。
今回は、アドベンドカレンダー用なので、 adcal-1
~ adcal-25
というブランチを用意する。
25ブランチだけなので、コマンドで作成し、GitHubにもpushしておく。
git checkout -b adcal-1 && git push --set-upstream origin adcal-1
git checkout -b adcal-2 && git push --set-upstream origin adcal-2
git checkout -b adcal-3 && git push --set-upstream origin adcal-3
git checkout -b adcal-4 && git push --set-upstream origin adcal-4
git checkout -b adcal-5 && git push --set-upstream origin adcal-5
git checkout -b adcal-6 && git push --set-upstream origin adcal-6
git checkout -b adcal-7 && git push --set-upstream origin adcal-7
git checkout -b adcal-8 && git push --set-upstream origin adcal-8
git checkout -b adcal-9 && git push --set-upstream origin adcal-9
git checkout -b adcal-10 && git push --set-upstream origin adcal-10
git checkout -b adcal-11 && git push --set-upstream origin adcal-11
git checkout -b adcal-12 && git push --set-upstream origin adcal-12
git checkout -b adcal-13 && git push --set-upstream origin adcal-13
git checkout -b adcal-14 && git push --set-upstream origin adcal-14
git checkout -b adcal-15 && git push --set-upstream origin adcal-15
git checkout -b adcal-16 && git push --set-upstream origin adcal-16
git checkout -b adcal-17 && git push --set-upstream origin adcal-17
git checkout -b adcal-18 && git push --set-upstream origin adcal-18
git checkout -b adcal-19 && git push --set-upstream origin adcal-19
git checkout -b adcal-20 && git push --set-upstream origin adcal-20
git checkout -b adcal-21 && git push --set-upstream origin adcal-21
git checkout -b adcal-22 && git push --set-upstream origin adcal-22
git checkout -b adcal-23 && git push --set-upstream origin adcal-23
git checkout -b adcal-24 && git push --set-upstream origin adcal-24
git checkout -b adcal-25 && git push --set-upstream origin adcal-25
ブランチをマージして、公開用ブランチにpushするワークフローを作成する。
GitHub Actions(1日目と2日目)は以下の通り。
name: adcal-1
on:
schedule:
# 12/1 の 7:00 (JST) に処理を実行する。(UTC の 22:00 は JST だと翌日の 7:00)
- cron: '0 22 30 11 *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: merge adcal branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.name j5c8k6m8
git config user.email j5c8k6m8@gmail.com
git merge -m "Merge branch for Advent calendar" origin/adcal-1
- name: push default branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: git push origin zenn
name: adcal-2
on:
schedule:
# 12/2 の 7:00 (JST) に処理を実行する。(UTC の 22:00 は JST だと翌日の 7:00)
- cron: '0 22 1 12 *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: merge adcal branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.name j5c8k6m8
git config user.email j5c8k6m8@gmail.com
git merge -m "Merge branch for Advent calendar" origin/adcal-2
- name: push default branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: git push origin zenn
これも、日付を変えて、1~25まで準備すれば準備は完了[3]。
あとは、公開したい日付に合わせたブランチで 記事/本 を書いてpushしておけばOK。
GitHub + Zennのみで完結(ブラウザのみでも実施できる)するところがいい。
公開リポジトリの場合は、ブランチを見れば公開前の情報が見えてしまうのは仕方ない。
さいごに
Zennでは本が書けるので、 毎日チャプターの内容が公開されていく本 を書いてみようかと思っている。
1~25までworkflowを作らずに、実行時の時間から判断するなどもう少しworkflowを賢くすることも考えたが、来年はアドベントカレンダー機能がリリースされているだろうし、普段使いのアイディアも現状はないので、まずはYAGNIで。
Discussion