やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

PyPIパッケージ作成&更新ワークフローの自動化について考えた

 どこがどれくらい自動化できそうか。

理想

  1. ソースコードを書く
  2. upload的なコマンドを打つ

 これで以下の結果が得られる。

  1. GitHubリポジトリ作成&更新
  2. PyPIパッケージ作成&更新

 あとは以下のようにソースコード取得やパッケージのインストール&更新をする。

git clone {repo_url}
pip uninstall {package_name}
pip install {package_name}
pip install -U {package_name}

 ついでに単体テスト実行までやってくれたらいいのだが。そこまで自動化してくれたらいいな。

現実

 以下は自動化できない。

  • コミットメッセージ
  • 名前、説明、デモ、特徴、必須環境、使い方、注意、ライセンス選択
  • SemVer
    • 公開APIが変更されたか判定
      • コード解析
    • setup.pyclassifiersDevelopment Status
    • CHANGELOG

希望

 以下なら設定ファイルでデフォルト値を指定しておけば済む。変更頻度が少ないから。

  • 著者(名前、メアド)
  • GitHub, PyPI(ユーザ名、パスワード、AccessToken)

 また、ディレクトリやファイルのテンプレートを用意しておけば大部分を省略できる。

 これらの名前や一部を置換できるようにすれば自動化できる。

妥協

 自動化できないところは以下の方針で半自動化する。

  • 入力の労力を最小化する
    • 設定ファイルにあるデフォルト値を使う
    • 入力UIを用意する
      • 入力値をできるだけ絞り込む
        • 入力の候補値を用意する
      • バリデートする
    • データは一元管理する
      • 同じ内容を複数ヶ所に入力するようなことはしない
        • たとえばversionは以下のすべてで共通値を使う(1度の入力で各所に反映)
          • __init__.py
          • setup.py
          • git tag
          • CHANGELOG.md
    • 考えることを最小化する
      • たとえば以下のチェック次第でversionのインクリメントの仕方やclassifiersDevelopment Statusが決まる
        • 正式リリース前?
      • たとえばversion値は以下ラジオボタンの選択次第で決まる
        • APIの互換性を失った?
        • APIの互換性を保ったまま機能を追加した?
        • APIの互換性を保ったままバグ修正した?

所感

 こんなツールあったらいいのになぁ。誰か作ってくれないかなぁ。

対象環境

$ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux