GitHub Actions でプライベートリポジトリの Action を共有できるようになったので試してみる
先日 GitHub Actions で同一ユーザーもしくは組織内でプライベートリポジトリの Action が共有できるようになりました。
実際の挙動や必要な設定が気になったので試してみたメモです。
要約
- プライベートリポジトリの Action・Reusable Workflow・Composite Action を同一オーナーのプライベートリポジトリから使えるようになった
- 設定の有効化は必要
- パブリックリポジトリからは使えない
準備
プライベートリポジトリを作成する
今回は private-github-actions-example
という名前でプライベートなリポジトリを作成しました。
全く同じ内容のリポジトリを private-github-actions-example-mirror
という名前で公開しています。
Action・Reusable Workflow・Composite Action を作成する
共有する Action・Reusable Workflow・Composite Action をプライベートリポジトリ内に作成します。
ここは今回の記事では重要な内容ではないので、興味のある人だけご覧ください。
Action
FROM alpine:3.17
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
#!/bin/sh -l
echo "Hello $1"
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
who-to-greet:
description: 'Who to greet'
required: true
default: 'World'
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.who-to-greet }}
Reusable Workflow
on:
workflow_call:
jobs:
hello:
runs-on: ubuntu-latest
steps:
- run: echo hello
Composite Action
runs:
using: composite
steps:
- run: echo hello
shell: bash
プライベートリポジトリのアクセスの設定を更新する
デフォルトではプライベートリポジトリの Action は同一オーナーであっても他のリポジトリから使えないようになっています。
そのため、まずプライベートリポジトリの設定を更新する必要があります。
プライベートリポジトリの Settings
をクリックしてリポジトリの設定画面に遷移します。
左のメニューリストから Actions
→ General
の順にクリックして Actions の設定画面に遷移します。
一番下に Access
というセクションがあります。
Accessible from repositories owned by the user '<ユーザー名>'
を選択し、 Save
をクリックして設定を保存します。
ちなみに Organization の場合はここの文言は Accessible from repositories in the '<Organization名>' organization
になります。
これで設定完了です。
実際に他のリポジトリから使ってみる
プライベートリポジトリから使ってみる
use-private-github-actions-from-private-example
というプライベートリポジトリを作成して、 private-github-actions-example
の Action・Reusable Workflow・Composite Action を参照するワークフローを作成しました。
on: [push]
jobs:
action:
runs-on: ubuntu-latest
steps:
# Action
- uses: koki-develop/private-github-actions-example@main
with:
who-to-greet: koki
reusable:
# Reusable Workflow
uses: koki-develop/private-github-actions-example/.github/workflows/_reusable.yml@main
composite:
runs-on: ubuntu-latest
steps:
# Composite Action
- uses: koki-develop/private-github-actions-example/.github/actions/hello@main
全て動きました。
いい感じです。
パブリックリポジトリから使ってみる
use-private-github-actions-from-public-example
というパブリックリポジトリを作成して、「プライベートリポジトリから使ってみる」で使用したのと全く同じワークフローを作成しました。
しかし実際に動かしてみたところ、次のようなエラーメッセージが表示されて失敗しました。
Reusable Workflow が見つからないと言われています。
Invalid workflow file: .github/workflows/main.yml#L12
error parsing called workflow "koki-develop/private-github-actions-example/.github/workflows/_reusable.yml@main": workflow was not found. See https://docs.github.com/actions/learn-github-actions/reusing-workflows#access-to-reusable-workflows for more information.
続いて Reusable Workflow を使用している部分をコメントアウトして動かしてみても、 Action・Composite Action を参照しているところで次のようなエラーメッセージが表示されて失敗しました。
こちらも Action が見つからないと言われています。
An action could not be found at the URI 'https://api.github.com/repos/koki-develop/private-github-actions-example/tarball/72918f0ea324d589a244958e30fe433f79d00917'
どうやらパブリックリポジトリからは使用できないようです。
そりゃそうかという感じですね。
まとめ
社内用の共通 Action を作りたい時など、用途は色々ありそうですね。
参考
Discussion