GitHub Actionsは普段CI/CDとして利用しているのですが、もっと様々な効率化されたワークフローを作れるのではないかと思い、第一歩として自作GitHubActionsを作って公開してみました。

GitHub Actionsとは

GitHub社が提供している、リポジトリの様々なワークフローを自動化するための仕組み。 ソースコードがcommitされたタイミングなど、様々なタイミングで処理を実行することができる。

https://docs.github.com/ja/actions

どんなアクションが作れるのか

自作パッケージを公開するに当たりどのような形式で作れるのか調べてみました。

Docker containerタイプ

OSはLinux

Dockerを使えるためあらゆる環境や操作を実現できる イメージの取得のために時間がかかるため、低速

JavaScript

OSはLinux, macOS, Windows

環境がJavaScriptだけに限定されるが、Docker containerタイプに比べ高速に実行できる

Composite Actions

OSはLinux, macOS, Windows

複数のワークフローをまとめたものを1つのアクションとして公開できる

アクションを公開する条件は

  • アクションは公開リポジトリにあること
  • 各リポジトリには1つのアクションが含まれていること
  • アクションのメタデータファイル(action.yml または action.yaml)は、リポジトリのルートディレクトリにあること
  • アクションのメタデータファイルの名前が一意であること
    • GitHub Marketplace で公開されている既存のアクション名と一致させることはできない
    • ユーザーまたは組織のオーナーがアクションを公開している場合を除き、名前は GitHub 上のユーザーまたは組織と一致することはできない。例えば、Github という名前のアクションを公開できるのは GitHub 組織のみ。
    • 名前は、既存のGitHub Marketplaceのカテゴリと一致することはできない
    • GitHub は GitHub 機能の名前を留保します。

などといった条件があるみたいですが、最低限リポジトリを作ってREADME.mdとaction.ymlを置けば良いです。

今回、branchをpushしたら、自動でPullRequestを作り、branch名からPivotalTrackerのストーリーIDを取得してリンクを貼るという簡単なactionをComposite Actionsで作成しました。

name: Auto PR. Pivotal Tracker style
description: Create a PR with an automatic title and summary by setting the branch as features/[Pivotal Tracker story ID].
inputs:
  github-token:
    description: GitHub token
    required: true
runs:
  using: composite
  steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    - name: Dump GitHub context
      env:
        GITHUB_CONTEXT: ${{ toJSON(github) }}
      shell: bash
      run: echo "$GITHUB_CONTEXT"
    - name: Extract branch name
      shell: bash
      run: echo "::set-output name=branch::${GITHUB_REF#refs/heads/feature/}"
      id: extract_branch
    - name: Create Pull Request
      uses: repo-sync/pull-request@v2
      with:
        destination_branch: "main"
        github_token: ${{ inputs.github-token }}
        pr_title: "[#${{ steps.extract_branch.outputs.branch }}] "
        pr_body: |
          https://www.pivotaltracker.com/story/show/${{ steps.extract_branch.outputs.branch }}
        # pr_label: "production"
        pr_assignee: ${{ github.actor }}
branding:
  icon: git-pull-request
  color: green

公開したGitHub Action: auto-pr-pivotal-tracker-style

リリースの方法については、このページを参考に基本的にはaction.ymlだけをいじっていくことで公開できました。

公開できたのでGitHub Actionを作るときは、公開すべきかも考えて使っていこうと思います。