GitHub Actions で Github Pages を更新する方法

github actions でビルドした内容で github pages で公開しているサイトを更新する方法をメモ。

環境+要件

  • github 上のパブリックリポジトリである
  • gh-pages ブランチを github pages として公開したい
  • gh-pages ブランチの中身を一部だけ差し替えたい(各リリースの内容をまとめて公開したい)
  • master への push の時のみ公開するページを更新したい

案1: github-push-action

github token を使って簡単に git push してくれる action。簡単に使えるし単機能でよいが、以下の理由で今回は使えなかった。

So while you can push to the `gh-pages` branch using the `GITHUB_TOKEN`, it won't spawn a GitHub Pages build.
You'll need to create a personal access token and supply it to your GitHub Action as a secret.

https://github.community/t5/GitHub-Actions/Github-action-not-triggering-gh-pages-upon-push/m-p/26869/highlight/true#M301

↑のスレッドの内容(でかつ私の環境で再現した事項)をまとめると、
GitHub Actions から `GITHUB_TOKEN` で push するとパブリックリポジトリGitHub Pages のビルドが動かない

案2: actions-gh-pages

案1 の引用先で薦められてた github pages 専用 action。
なにやらいろいろ出来るようだけどブランチ全体のコンテンツを上書きしてしまうので使えなかった。

採用案

自力で personal access token を使って push すればよい。

..
jobs:
  ..
  publish:
    name: publish to github pages
    runs-on: ubuntu-18.04
    needs: build     # ビルドの後に実行
    # master への push の時のみ動作
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    steps:
      - uses: actions/checkout@v1
        with:
          ref: gh-pages
          fetch-depth: 1
      - uses: actions/download-artifact@v1
        with:
          name: artifact
      - name: Commit artifact
        run: |
          git config user.email "admin@example.com"
          git config user.name "Github Action Bot"
          git add .    # artifact を追加(実際はコンテンツの一部を上書き)
          if ! (git diff --quiet && git diff --staged --quiet); then
            git commit -m "Add: changes ($GITHUB_SHA)"    # ハッシュをメモってコミット
          fi
      - name: Push to gh-pages branch
        env:
          PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}    # personal access token を使う
          PUBLISH_BRANCH: gh-pages
        run: |
          git push https://<githubユーザ>:${PERSONAL_TOKEN}@github.com/<githubユーザ>/<リポジトリ>

Github Actions を勉強した

今後覚えざるを得なさそうだったのでリポジトリを作ったついでに Github Actions を勉強して使ってみました。
勘や常識(を出来るだけ)無しに公式ドキュメントに書いてある内容のみで理解することを目標にしましたが、ちょっとつらかった。

とりあえずビルドは動かせるようになったしあまり深入りしないようにしよう。。。

coqdocを使った

coqdocを初めて使ってみました。

はじめは company-coq のスタイルに合わせて見出しとか書いてましたが、なんとなく気が向いたので公式(documenting-coq-files-with-coqdoc )の方を確認してみたのでした。

目的はcoqスクリプトの(主にコメントの)整形スタイルを妥当なモノに統一することなので出力はどうでもいいんですが、…デフォルトはあまりかっこよくないですね :p

今のところ単一ファイルなのでコマンドは:

$ coqdoc --utf8 hoge.v

これだけ。

静的コード解析の会#9

(会場と日程を変更しました) #静的コード解析の会 第9回 - connpass に行ってきました。今回も何らかの発表は出来ず。
どこかで宣伝したらしく、前回から人数が大幅に増えて14~5人くらいの参加者でした。

参加者の傾向としては:

  • なぜかIsabelle使いが多い。
  • モデル検査勢が(人数的に)優勢。
  • 他は各々の好みでいろいろ。

といった感じでした。

RustでマルチスレッドWebサーバを作る例を写経

Final Project: Building a Multithreaded Web Server - The Rust Programming Languageを写経した。
標準ライブラリのみを使って簡単なマルチスレッドWebサーバを書く例。
スレッドプールを作ってacceptするたびに「htmlを応答する関数」をJobとしてチャンネルで配る。

最終的にちゃんと各Workerスレッドを終了させるところまで作る。

思ったよりかなり簡単に書けてしまった印象。設計がいいからだろうか?

歯が痛くて倒れていた

8月中旬頃、突然奥歯(の中の神経)に激痛が起こりました(結局明確な原因は不明)。
2週間くらいしてようやく普通の生活が出来るようになりました。あまりに酷い状態だったので書き留めておきます。


どんな状態だったかというと:

  • 常に痛い。何もして無くても神経が痛い。でも痛くてじっとしてもいられないので家の中を徘徊し続けた。ただし歩いても痛い。詰みじゃん。
  • 食べられない。4日間くらいお茶とポカリだけで生きていた。痛い以外の感情がないからか空腹感全くは感じない。今にして思うとちょっとやばいな。
  • 痛み止めが効いている間は大体普通の生活が出来る。ただし効果は4〜5時間で切れ、かつ1日3錠までなので、任意の9時間(24 - (5 * 3))はのたうち回ることが確定。朝4時から5時間くらいうろうろし続けるのは心折れそうだった。
  • 寝られない。痛いと寝られないんですね。初めて知りました。心配しなくても起きる方も痛み止めが切れる時刻にちゃんと起きます。人体って凄いね(^q^)。


他:
症状が出たのがコミケ直後だったので、会社でコミケで調子のってぶっ倒れたヤツみたいな扱いだったのが悲しかった。
原因はよく分からないから無関係という主張も出来ないんだけど…。