【Github】Github Actions ~ Pythonを使うには ~

■ はじめに

Github Actions で、以下の関連記事で行ったような

https://dk521123.hatenablog.com/entry/2024/01/22/210831
https://dk521123.hatenablog.com/entry/2024/01/05/000000

Github Actions で脆弱性診断の結果をCSVファイル化して、、、
とかやると、かなり複雑になるので、
以下の関連記事で扱った boto3 で実装したい。

https://dk521123.hatenablog.com/entry/2024/01/31/014010

そこで、今回は、Github Actions で Python を扱う方法について
扱っていく。 

なお、Python製のLinterや egg / wheel ファイル作成などの
Pythonにまつわる事項については、以下の関連記事を参照のこと

Github Actions ~ Python関連 ~
https://dk521123.hatenablog.com/entry/2022/06/21/143624

目次

【1】Pythonを使うには
 1)uses: actions/setup-python@vX を設定する
【2】サンプル
【3】Tips
 1)Pythonから値を返すには
 2)Pythonに値を渡すには

【1】Pythonを使うには

* 全然簡単にできるので、シェルを使うのが馬鹿らしくなる、、、

1)uses: actions/setup-python@vX を設定する

https://github.com/actions/setup-python

steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-python@v5
      with:
        python-version: '3.10' 
    - run: python my_script.py

【2】サンプル

.github/workflows/hello.py

import sys

def main(args):
  print(f"Hello, world, [{args[1]}, {args[2]}]")
  return 123

if __name__ == "__main__":
    args = sys.argv
    result = main(args)

    # return value
    sys.stdout.write("This is a just test")

.github/workflows/demo.yml

# This is a basic workflow to help you get started with Actions

name: Sample

on:
  push:
    branches: [ "develop" ]
jobs:
  sample:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # ★注目1
      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.8'
          architecture: 'x64'
      - name: Get Python version
        run: python -V
      # ★注目2
      - name: python demo
        run: |
          result=$(python .github/workflows/hello.py Mike 012345)
          echo $result

【3】Tips

1)Pythonから値を返すには

* sys.stdout.write を使う

https://docs.python.org/ja/3.8/library/sys.html?highlight=stdout#sys.displayhook

python

import sys

# sys.stdout.write(【返したい値】)
sys.stdout.write("This is a just test")

Github actions側

# 【受け取る変数】=$(python 【Pythonファイル】)
result=$(python .github/workflows/hello.py Mike 012345)

2)Pythonに値を渡すには

* sys.argv を使う

python

import sys

args = sys.argv
value1 = args[1]
value2 = args[2]

Github actions側

# python 【Pythonファイル】 【渡したい値1】 【渡したい値2】...
python .github/workflows/hello.py Mike 012345

使用上の注意

* args[0] は、ファイル名(e.g. .github/workflows/hello.py)になる

参考文献

https://docs.github.com/ja/actions/automating-builds-and-tests/building-and-testing-python
https://helve-blog.com/posts/git/github-actions-python/

関連記事

Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/12/22/195715
Github Actions ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/12/21/155224
Github Actions ~ SQL Linter ~
https://dk521123.hatenablog.com/entry/2024/03/04/180308
Github Actions ~ Python関連 ~
https://dk521123.hatenablog.com/entry/2022/06/21/143624
Github Actions ~ Self-hosted runners / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/12/18/204119
Github Actions ~ Self-hosted runners / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2024/02/07/002736
Amazon ECR ~ 脆弱性診断 / Amazon Inspector ~
https://dk521123.hatenablog.com/entry/2024/01/22/210831
Amazon ECR ~ AWS CLI
https://dk521123.hatenablog.com/entry/2024/01/05/000000
Amazon ECR ~ boto3 ~
https://dk521123.hatenablog.com/entry/2024/01/31/014010