🙊
Privateリポジトリに作成したコードを無料で定期実行してみた
はじめに
GitHub ActionsはPublicリポジトリでは完全に無料で実行できますが、Privateリポジトリでは無料枠の範囲内でのみ無料です。
Privateリポジトリに作成したコードをPublicリポジトリに作成したGitHub Actionsのworkflowから定期実行することで完全に無料にできるのでは?と思ったのでやってみました。
やったこと
- Twitter APIを使用してランダムにツイートを行うTypeScriptで作成(Privateリポジトリ)
- GitHub Actionsで2時間に一回の定期実行を行う(Publicリポジトリ)
コード
main.yaml
name: Run bot
on:
schedule:
# 2時間ごとに処理実行
- cron: "0 */2 * * *"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
build:
name: build
runs-on: ubuntu-latest
# 以下はTwitter APIを叩くのに必要な環境変数
env:
CONSUMER_KEY: ${{ secrets.CONSUMER_KEY }}
CONSUMER_SECRET: ${{ secrets.CONSUMER_SECRET }}
ACCESS_TOKEN_KEY: ${{ secrets.ACCESS_TOKEN_KEY }}
ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}
steps:
# ここでPrivateリポジトリのコードをチェックアウトする
- name: Checkout
uses: actions/checkout@v3
with:
repository: {org名}/{リポジトリ名}
path: {リポジトリ名}
token: ${{ secrets.GH_PAT }}
# 以下はprivateリポジトリに作成したTwitter botを動かすコマンド
- name: Package install
run: npm ci
working-directory: {リポジトリ名}
- name: Build
run: npm run build
working-directory: {リポジトリ名}
- name: Run bot
run: node lib/index.js
working-directory: {リポジトリ名}
ポイントとしては、actions/checkout@v3
を使って他のprivateリポジトリのコードをチェックアウトする際には、事前にPAT(Personal Acces Token)を発効しておく必要があることです。
作成したPATはGitHub Actionsを実行するPublicリポジトリのSettingページから「Actions secrets and variables」に設定しておきます。
今回は「GH_PAT」という名前で設定しました。
結果
ちゃんと2時間ごとに定期実行が行われていました!!
GitHub Actionsの実行時間の無料枠も消費していませんでした!!!!
無料でプログラムの定期実行を行う方法がわかってしまったので、色々と活用していきたいとおもいます。
追記(重要)
こちらの手法はGitHubの利用規約に違反する可能性が高く、最悪の場合GitHubアカウントがバンされる可能性があることが分かりました。
さらに、Action が自己ホスト型のランナーを使用しているかどうかに関係なく、Action は次の目的には使用しないでください。
(中略)
- GitHub でホストされるランナーを使用している場合、GitHub Actions が使用されているリポジトリに関連付けられているソフトウェア プロジェクトの運用、テスト、デプロイ、または公開とは無関係のその他のアクティビティ。
Discussion