cangoxina

生産性向上見習いのブログ的な何かです

GitHub Actionsの歴史(2021/12/1 更新)

# はじめに

GitHub Changelog を元に、GitHub Actions がどのように更新されていったかを簡単にまとめました。

あまり深いところまでは書いてないので、気になった変更があったら各自調べてください(もっと色々書きたかったけど時間なかった)。

わりと雑に作ったので漏れや間違いがあったらコメントとか下さい。

2021/12/01 までの情報をもとにこの記事は書かれています。

この記事は GitHub Actions Advent Calendar 2021 の 1 日目の記事です 🎅🎂


目次


# 歴史

まず、GitHub Changelog をひたすら目 grep して Actions に関わる変更をリスト化し、Zenn のスクラップ(GitHub Actionsの歴史を調査)にまとめました。

そして、その中でも特にエンドユーザに関係ありそうな変更をピックアップしてこの記事に載っけています。

各トピックに貼られているラベルの説明

ラベル名 説明
FEATURE🚀 新しい機能
BRAKING CHANGE💥 破壊的な変更
SECURITY🔒 セキュリティ向上などセキュリティが理由の変更
PW💪 Productivity Weekly に詳細を書いたトピック

各カテゴリの説明

カテゴリ 説明
System GitHubのシステム面での変更(わりとおおざっぱなくくりです)
Workflow ワークフロー関係に関する変更
Action アクションに関する変更。公式アクション*1含む
Environments Enviromnents 機能に関する変更
Runner ランナーの仕様に関する変更。GitHub-hosted runner は GitHub が提供するランナー。Self-hosted runner はセルフホストランナー。
API Actions を操作する API に関する変更
Management 監査や料金、機能の制限などに関わる変更
WebUI ワークフロー一覧の見た目や検索など、主に WebUI に関する変更

## 発表 〜 正式リリース(2018/10 〜 2019/11)

GitHub Actions は 2018 年 10 月に GitHub Universe2018 で発表されました。当時は limited public beta ということで、選ばれしもののみが利用できていたようです。

現在の GitHub Actions は YAML でワークフローの記述を行いますが、発表された当時は GUI 上でのワークフロー構築または HCL(HashiCorp Configuration Language) を使ってワークフローを記述できました(参考:GitHub Actions 入門 - 生産性向上ブログGitHub Actions で遊ぶ | matsub)。また、ジョブは Docker コンテナ上での実行のみがサポートされており、Docker イメージを用意する必要がありました。

発表から約半年は音沙汰がなく、2019 年 8 月に新バージョンが発表されます。何がどう変更されたかはもはや公式ドキュメントから見つけられなかったのですが、新 GitHub Actions 入門 - 生産性向上ブログ によると、新バージョンで YAML が使えるようになったことがわかります(HCL が非推奨となることもこの時点で判明していたようです)。

改めて、旧 GitHub Actions と比べて大きく以下の変更がありました。

その後実際に HCL が非推奨を通り越して停止されることが Changelog で広く発表されます。発表が 9/17、停止が 9/30 なので既に本格利用していたところにとってはなかなか大変だったことでしょう。

YAML を利用する GitHub Actions が登場してから正式リリースまでも多数の変更が行われています。正式リリース前なので、大きな変更(BRAKING CHANGES 相当)だけピックアップします。

そして、2019 年 11 月 11 日に GitHub Actions が正式リリースされました。発表から約 1 年でした。正式にリリースされたことで、全てのリポジトリで利用可能になりました。

当時の記事とかはこちら

## 2020

### 1Q + α

ここからは四半期ごとの変更を書いていきます(正直リリース前ほど書くことはないです)。

正式リリースから 2020/1Q の間にあった Changelog を以下にまとめています。`actions/runner リポジトリは今でこそランナー自体の仕様を確認するために見にいくことがありますが、当時はまだ公開されてなかったんですね。API が生えたのもこの頃なので、色々なツールとの連携やセルフホストランナー登録の自動化などが捗ったことでしょう。

当時の記事とかはこちら

#### Workflow

#### Action

#### Runner

##### GitHub-hosted runner
##### Self-hosted runner

#### API

#### WebUI

### 2Q

2020/2Q にあった Changelog を以下にまとめています。

1Q と比べて圧倒的に FEATURE🚀 が多いですね。この頃で嬉しかったのはやはりワークフロー周りの変更でしょうか。デフォルトのシェルやワーキングディレクトリーを設定できたり、ジョブ間でのパラメータ引き渡しが簡単になったり、fromJSON が追加されたりと、高度なことを簡単に描けるようになりました。公式アクションの使い勝手も向上し、体験が良くしてきている印象です。

当時の記事とかはこちら

#### System

#### Workflow

#### Action

#### Runner

##### Self-hosted runner

#### API

#### Management

#### WebUI

### 3Q

2020/3Q にあった Changelog を以下にまとめています。

特にワークフローを手動実行できる workflow_dispatch はとにかく嬉しかったです。重いワークフローは手動実行したいから手動実行がない GitHub Actions には移行出来ないというところも多かったのではないでしょうか。また、composite action が登場したのもこのころです。それまでは JavaScript でやるか Docker でやるかしかなかったので、結構ハードルが高かったです。

当時の記事とかはこちら

#### Workflow

#### Action

#### Runner

##### Self-hosted runner

#### API

#### Management

#### WebUI

### 4Q

2020/4Q にあった Changelog を以下にまとめています。

大きな BRAKING CHANGE として set-envadd-path の廃止がありました。多くのユーザが対応を必要とされた BRAKING CHANGE はこれが初めてではないでしょうか。

ワークフローの可視化もこの時期です。複雑にジョブが絡み合う大規模ワークフローになってくるとジョブの依存関係がもう何が何だかわからなくなってくるので、可視化は必須でした。

そして新しい概念として Environments が登場しました。環境ごとにシークレットや承認者を切り替えられます。例えば環境ごとのシークレットを用意して別の名前をつける、内部で切り替えるなどをしなくてもよくなりましたし、権限のある人だけが本番環境にデプロイできるようにもなりました。楽になって安全性も増す良い機能です。

当時の記事とかはこちら

#### System

#### Workflow

#### Action

#### Environments

  • FEATURE🚀: Environments が登場その後 GA)。environment ごとにシークレットを用意して切り替えたり、ジョブ実行に必要な承認ができるレビュワーを指定できるようになったり。

#### Runner

##### GitHub-hosted runner
##### Self-hosted runner

#### Management

#### WebUI

## 2021

### 1Q

2021/1Q にあった Changelog を以下にまとめています。

いよいよ GitHub Enterprise Server ことオンプレ版 GitHubGitHub Actions が使えるようになりました。ただしセルフホストランナーを建てる必要があります。そうだとしても GHES 勢待望の更新でした。

Dependabot のプルリクエストによってトリガーされるワークフローで使える GITHUB_TOKENパーミッションread-only になりました。また、シークレットが読めなくなりました。この頃はサプライチェーン攻撃が話題になっていた覚えがあります。この変更によって各所では Dependabot によるプルリクが Check を通らなくなってマージできなくなる事件が相次ぎました*2*3(訳あって write なパーミッションが必要なワークフローにかぎる)。

当時の記事とかはこちら

#### System

#### Action

#### Environments

#### Runner

##### GitHub-hosted runner

#### Management

### 2Q

2021/2Q にあった Changelog を以下にまとめています。

ワークフロー/ジョブの同時実行を制限できるようになりました。デプロイなどの同時に動くとまずいワークフロー/ジョブは同時実行したくないので、待望の機能でした。

今まで同一リポジトリの PR だと read/write となっていた、GITHUB_TOKENパーミッションをスコープごとに細かく変更できるようになりました。必要な権限のみを渡すことで安全性を高められます。ただし、互換性のためかデフォルトはほぼ全てのスコープで read/write です。個人的にはデフォルト read-only を基本としてほしいです*4

外部からの初回プルリクエストに対してワークフローが自動で実行されなくなる変更がありました。これはその頃?に GitHub Actions を悪用した仮想通貨マイニングが問題になってたからです。プールが枯渇して善良なユーザが困るだけでなく、PR を送ってきた fork 先ユーザに責任があるはずですが、fork 元ユーザの責任となってしまうといったことも当時起こっていました。承認が必要になり、ちょっと面倒にはなりましたが、それだけで仮想通貨マイニングを予防できるようになったのでコスパの良い変更だと思いました。

当時の記事とかはこちら

#### System

#### Workflow

#### Action

#### Runner

##### GitHub-hosted runner

#### API

#### Manegement

### 3Q

2021/3Q にあった Changelog を以下にまとめています。

セルフホストランナーを使い捨てできるようになりました。セルフホストランナーはジョブを走らせるごとに環境をクリーンにしてくれません*5。ワークフローを冪等に保つため、クリーンアップ処理を入れる必要がありました。セキュリティの観点から、Organization やリポジトリごとにランナーを用意する必要もありました。ジョブを実行したらそのまま登録解除すれば良いのでは?となりますが、仕様上それができないようになっていました。3Q でとうとう使い捨てできるオプションが追加され、こういった煩わしさから解放されました。これはセルフホストランナー勢にとって待望の機能でした。

composite action でとうとう他のアクションを呼び出せるようになりました。それまでは uses が使えなかったので再利用性が乏しかったです。これにより同じような uses をたくさん書かなくても良くなりました。革命でした。

actions/setup-* アクションにキャッシュ機能が生え始めました。言語や環境ごとにキャッシュする内容は大体似通っているので、似たような actions/cache を毎回書くのは正直おっくうでした。actions/setup-node を皮切りに各 setup 系アクションにキャッシュ機構が追加されていきます。楽になりました。

当時の記事とかはこちら

#### System

#### Action

#### Runner

##### GitHub-hosted runner
##### Self-hosted runner

#### API

#### Management

#### WebUI

### 4Q

2021/4Q にあった Changelog を以下にまとめています。

OpenID Connect を利用できるようになりました。これにより、対応クラウドサービスのシークレットを GitHub 上に保存しなくても良くなりました。セキュリティが向上するだけでなくシークレットのローテーションもしなくてよくなりとても良いです。

ワークフローをワークフローから呼び出せるようになりました。ジョブ単位ではアクションを利用すればよかったのですが、ワークフロー単位での再利用はそれまでできませんでした。大規模プロジェクトでは必要となりうる機能です。

2021/1Q に Dependabot によるワークフローで使える GITHUB_TOKEN が read-only になってしまい、回避がめんどかったのです。しかし、2021/4Q で Dependabot によるワークフローが、ワークフロー内の permission を尊重するようになりました。また、Dependabot もアクセス可能なシークレットを設定できるようになりました。これらによってようやくまともに Dependabot * Actions を使えるようになりました(セキュリティの強度は落ちてしまいますが...)。

当時の記事とかはこちら

#### System

#### Workflow

#### Action

#### Management

## 2022

### 1Q

2022/1Q に起こる予定の Changelog も書いておきます。

#### Runner

##### GitHub-hosted runner

# おわりに

GitHub Actions、もう長いこと付き合ってきたつもりでしたが、案外 2019 年中旬に今の形になってたので、まだ 2 年半くらいしか経っていないことに結構驚きました。そうか...まだ 2 年半なのか。

初期の頃はワークフロー可視化がなかったり、手動実行ができなかったり、composite action から composite action が呼び出せなかったり、ジョブの同時実行を制限できなかったりと、大規模プロジェクトでの利用はまだまだ難しそうとか思っていました。が、それらの機能はあっという間に実装されていきました。今回調べてみて改めて機能追加の頻度に驚きました。

それでもまだまだ欲しい機能がたくさんあります。

これらは github/roadmap にすでに登録されているので、そのうち実装される予定です。楽しみですね。

今回、とりあえず登場から 2021/12/01 までの GitHub Actions の変更をリストアップしました。

気が向いたらまた更新するかもしれません。

*1:actions/cache や actions/setup-node などの actions organization 配下のアクション。

*2:Dependabot PRs and Workflow Secrets - Code to Cloud / GitHub Actions - GitHub Support Community

*3:Dependabot が起動する GitHub Actions Workflow から write 権限が無くなった件

*4: 一応リポジトリごと、Org ごとに一括でデフォルト権限を設定できるようにはなってます。

*5:apt-get でインストールしたコマンドが入ったまま、作ったファイルが置かれたままなど


スポンサーリンク