GitHub ActionsでPythonを動かす
今回の目的
GitHubでpullやmergeを実施した際に、Pythonで処理を行う方法をまとめました。
作業の流れ
1. GitHub Actionsのワークフロー格納ディレクトリの作成
GitHub Actionsで実施されるワークフローは「.github/workflows」に格納する必要があるため、 対象のディレクトリをGitHubのルートディレクトリ直下に作成します。 (GitHub Actions を理解する - GitHub Docs)
2. GitHub Actionsのワークフローの作成
ワークフローはyamlファイルで記載する必要があります。 以下に基本的な構文について説明します。
name
ワークフローの名前。 GitHub では、ワークフローの名前がリポジトリの [アクション] タブに表示されます。 name を省略すると、GitHub により、リポジトリのルートに相対的なワークフロー ファイル パスに設定されます。
on
ワークフローを自動的にトリガーするには、on を使用してワークフローを実行する原因となるイベントを定義します。 使用可能なイベントの一覧については、「ワークフローをトリガーするイベント」を参照してください。
jobs
ワークフロー実行は、既定で並列実行される 1 つ以上の jobs で構成されます。 ジョブを順番に実行するには、jobs.<job_id>.needs キーワードを使用して他のジョブへの依存関係を定義できます。 各ジョブは、runs-on で指定されたランナー環境で実行されます。
jobs.<job_id>.runs-on
jobs.<job_id>.runs-on を使って、ジョブを実行するマシンの種類を定義します。
jobs.<job_id>.steps
1 つのジョブには、steps と呼ばれる一連のタスクがあります。 ステップでは、コマンドを実行する、設定タスクを実行する、あるいはリポジトリやパブリックリポジトリ、 Dockerレジストリで公開されたアクションを実行することができます。
jobs.<job_id>.steps[*].name
GitHubで表示されるステップの名前。
jobs.<job_id>.steps[*].id
ステップの一意の識別子。 id を使って、コンテキストのステップを参照することができます。
jobs.<job_id>.steps[*].uses
ジョブでステップの一部として実行されるアクションを選択します。 アクションとは、再利用可能なコードの単位です。 ワークフローと同じリポジトリ、パブリック リポジトリ、または公開されている Docker コンテナー イメージで定義されているアクションを使用できます。
jobs.<job_id>.steps[*].run
オペレーティングシステムのシェルを使用してコマンドラインプログラムを実行します。 name を指定しない場合、ステップ名は既定では run コマンドで指定されたテキストになります。
※その他の構文については以下をご参照ください
GitHub Actions のワークフロー構文 - GitHub Docs
今回は以下のようなワークフローを作成しました。
# ワークフローの名称を記載 name: 'Test' # トリガーを定義 on: push: branches: - main # ジョブを定義 jobs: setup: # 実行環境を定義(ubuntu) runs-on: ubuntu-latest # ステップを記載 steps: - uses: actions/checkout@v3 # パブリックアクションの定義(pythonのセットアップ) - name: Setup Python uses: actions/setup-python@v2 with: python-version: '3.8' architecture: 'x64' # pythonのバージョン取得 - name: Get Python version run: python -V # pythonの実行 - name: Run Python run: python .github/workflows/test.py
3. Pythonコードの作成
pythonの実行ファイル(.github/workflows/test.py)を作成します。 今回はprintで「Execute from GitHub Actions」とだけ出力するコードとします。
print("Execute from GitHub Actions!!!")
実際に実行してみた。
今回はトリガーをmainブランチへのpushとしていますので、実際にmainにpushしてみると、 問題なくpythonのコードが実行されていることが確認できました。