CircleCIのPythonOrbsを使ってみる。
Yuta Goto
Posted on March 31, 2021
CircleCIのPythonOrbsを使って、CIでテストを実行させるものを作ります。
作業リポジトリ
やったこと
Pipfileを用意
今回はmypyとpytestとpycodestyleを使います。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
mypy = "*"
pytest = "*"
pycodestyle = "*"
[requires]
python_version = "3.8"
サンプルを用意
# app.py
def greeting(name: str) -> str:
return 'hello ' + name
print(greeting('name'))
テストファイルを用意
# test_app.py
import app
def test_greeting():
assert app.greeting('name') == 'hello name'
ファイルを用意したら pushします。
CircleCIの準備
CircleCIにアクセスして、左メニューのProjectsからリポジトリを選択してセットアップします。
(ブラウザ上で .circleci/config.yml
を編集できるの便利)
デフォルトでセットされている
orbs:
python: circleci/python@0.2.1
はorbのバージョンは結構古いので、Orbsのページを見て最新バージョンに書き換えます(2021/03/31時点では 1.3.3
が最新)
https://circleci.com/developer/orbs/orb/circleci/python
steps内にある load-cache
, save-cache
は今は1.3.3では使えない(ライブラリのインストール時に自動でキャッシュしてくれる)ので削除します。
ライブラリのインストールは、今回作ったサンプルではpipenvを使うのでネストさせた要素の pkg-manager:
に pipenv
を書きます(CI環境なので引数に --dev
を付けます)。
Usage Examplesには、テストを実行させるために python/test
を使うような記述がありますが、stepsでは使わずにjobsに直接指定します。
できあがった .circleci/config.yml
が以下です。
# .circleci/config.yml
version: 2.1
orbs:
python: circleci/python@1.3.3
jobs:
build-and-test:
executor: python/default
steps:
- checkout
- python/install-packages:
args: --dev
pkg-manager: pipenv
- run:
name: mypy
command: pipenv run mypy .
- run:
name: pycodestyle
command: pipenv run pycodestyle .
workflows:
main:
jobs:
- build-and-test
- python/test:
args: --dev
test-tool: pytest
pkg-manager: pipenv
テストを実行する部分で python/install-packages
とほぼ同じ記述になってしまうのはどうにかしたい部分はあります。。
Posted on March 31, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.