GitHub Actionを利用し、Privateリポジトリのものを、をPublicリポジトリへプッシュする方法を説明したいと思います。
リポジトリ構成
今回の構成は以下の通りです。
Repository-A (Private)
│
│ GitHub Actions
▼
Repository-B (Public)
開発者はRepository-Aへコミットするだけで、GitHub Actionsが自動的にRepository-Bへ同期します。
Personal Access Token(PAT)の作成
GitHub Actionsから別リポジトリへPushするためには認証情報が必要です。
GitHubではPersonal Access Token(PAT)を利用することで安全に認証できます。
PATは以下から作成できます。
GitHub Settings → Developer Settings → Personal Access Tokens
Fine-grained Personal Access Tokenの利用を推奨します。
推奨設定
対象リポジトリ:
Repository-B
権限:
Contents
└ Read and Write
必要以上の権限は付与しないようにしましょう。
Secretの登録
作成したPATをGitHub Actionsで利用するため、Repository-AへSecretとして登録します。
設定画面:
Repository-A
└ Settings
└ Secrets and variables
└ Actions
新しいSecretを追加します。
例:
PAT_TO_PUBLIC_REPO
値には作成したPATを設定します。
GitHub Actions内では以下のように参照できます。
${{ secrets.PAT_TO_PUBLIC_REPO }}
GitHub Actionsの作成
続いてWorkflowを作成します。
作成場所:
.github/workflows/sync-public.yml
サンプルコードは以下です。
name: Sync To Public Repository
on:
push:
branches:
- main
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout Private Repository
uses: actions/checkout@v4
- name: Clone Public Repository
run: |
git clone https://${{ secrets.PAT_TO_PUBLIC_REPO }}@github.com/USER/Repository-B.git public-repo
- name: Copy Files
run: |
rsync -av --delete \
--exclude='.git' \
./ public-repo/
- name: Commit Changes
run: |
cd public-repo
git config user.name "github-actions"
git config user.email "github-actions@github.com"
git add .
git diff --cached --quiet || \
git commit -m "Auto sync from private repository"
git push origin main
このWorkflowはmainブランチへのPushを検知すると自動実行されます。
rsyncによる同期
同期処理にはrsyncを利用しています。
rsync -av --delete
主なオプションは以下です。
| オプション | 説明 |
|---|---|
| -a | 属性を保持してコピー |
| -v | 詳細表示 |
| –delete | 削除されたファイルも同期 |
これにより、Publicリポジトリの内容をPrivateリポジトリと一致させることができます。
特定フォルダを除外する
機密情報を含むフォルダを公開したくない場合は除外設定を利用します。
例えば以下の構成の場合
Repository-A
├ src
├ docs
├ secret
└ config
secretフォルダを除外するには、
rsync -av --delete \
--exclude='secret/' \
--exclude='.git' \
./ public-repo/
と設定します。
複数指定も可能です。
--exclude='secret/'
--exclude='config/'
--exclude='.env'
運用時の注意点
Secretを公開しない
PATはGitHubアカウントへのアクセス権限を持っています。
以下のような行為は避けましょう。
- ソースコードへ直接記載
- READMEへ掲載
- Issueへ貼り付け
必ずGitHub Secretsを利用してください。
公開対象を確認する
自動同期を導入する前に、以下を確認しましょう。
- APIキー
- パスワード
- 接続先情報
- 社内ドキュメント
- 個人情報
が含まれていないことを確認してください。
テスト用リポジトリで検証する
本番運用前にテスト用リポジトリで十分な検証を行うことを推奨します。
誤った設定で公開してしまうと、機密情報の漏洩につながる可能性があります。
まとめ
GitHub Actionsを利用すると、PrivateリポジトリからPublicリポジトリへの同期を完全自動化できます。
今回紹介した構成には以下のメリットがあります。
- 手動コピー不要
- 公開作業の自動化
- ヒューマンエラーの削減
- オープンソース運用との相性が良い
- READMEやドキュメントの自動公開が可能