🙊

Privateリポジトリに作成したコードを無料で定期実行してみた

2023/02/19に公開

はじめに

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」という名前で設定しました。

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

https://docs.github.com/ja/actions/security-guides/encrypted-secrets

結果

ちゃんと2時間ごとに定期実行が行われていました!!
GitHub Actionsの実行時間の無料枠も消費していませんでした!!!!

無料でプログラムの定期実行を行う方法がわかってしまったので、色々と活用していきたいとおもいます。

追記(重要)

こちらの手法はGitHubの利用規約に違反する可能性が高く、最悪の場合GitHubアカウントがバンされる可能性があることが分かりました。

さらに、Action が自己ホスト型のランナーを使用しているかどうかに関係なく、Action は次の目的には使用しないでください。
(中略)

  • GitHub でホストされるランナーを使用している場合、GitHub Actions が使用されているリポジトリに関連付けられているソフトウェア プロジェクトの運用、テスト、デプロイ、または公開とは無関係のその他のアクティビティ。

https://docs.github.com/ja/site-policy/github-terms/github-terms-for-additional-products-and-features#actions

Discussion