【Python】 GitHubレポジトリのバージョン更新に合わせて自動的にPyPIのバージョンも更新する

## はじめに
自作ライブラリを`pip`コマンドでインストールできるようにするには、`PyPI`に投稿しないといけません。

手動で自作ライブラリを`PyPI`に上げる手順は、下記の通りですね。
[PyPIパッケージ公開手順](https://qiita.com/shinichi-takii/items/e90dcf7550ef13b047b5)

新規投稿だけではなく、バージョンアップの手順も同様です。
しかし、メンドウですよね。

我々は[自動化の王、自動化キング](https://qiita.com/uts1_6/items/11e348ead4bae71571b8)なので、`GitHub`を更新した時点で、`PyPI`への更新も同時にやってしうまうように、`GitHub`をいじりましょう。

## 結果
[この手順](https://github.com/konbraphat51/AnimatedWordCloud/blob/dev/CONTRIBUTING.md#updating-pypi)だけで `PyPI`の更新ができるようになります。

すなわち、`Release` を登録する **だけで** 、連携して`PyPI`へ投稿されます。
![294690975-1bc79398-5458-4a8b-b03f-26efd51917fe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/56634f0a-ad05-e622-caf7-90c4ba504006.png)

## 設定手順
### GitHub Actions登録
`.github/workflows/python-publish.yml`として下記をコピペ
```yml:.github/workflows/python-publish.yml
# This workflow will upload a Python Package using Twine when a release is created
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Upload Python Package

on:
  release:
    types: [published]

permissions:
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v3
        with:
          python-version: "3.12"
      - name: Build package
        run: |
          python -m pip install --upgrade pip
          pip install setuptools wheel
          python setup.py sdist bdist_wheel
      - name: Publish package
        run: |
          pip install twine
          python -m twine upload dist/*
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
```
©GitHub

### PyPIトークン登録
`PyPI`アカウント設定ページへ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/ca95d52d-510f-6b36-442f-92384827ce99.png)

追加してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/f24046b4-34f9-0725-e994-d8a01a2b29cf.png)

トークンをコピー

GitHubのレポジトリページへ

Settings -> Secrets and variables -> Actionsから緑の"New repository secret"ボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/65b21a6c-b384-350c-71cb-cb6189c6452c.png)

Nameを`PYPI_API_TOKEN`として（他の名前不可）、トークンをコピペ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/ef7eca73-0e7d-ce16-e10f-9b52a11ca078.png)


**完成です**

## 更新手順
* レポジトリページから、`Releases`ページへ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/9e0df693-eba1-3fb7-71d4-5637d4a7d3b3.png)

* Draft a new release
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/52ef32ff-a388-c7ec-e49c-fefe385983f8.png)

* 新しいバージョンのタグを作り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/242e0922-85b6-9c80-b7c5-68b4914d65ad.png)

* 本番ブランチを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/d9f720fb-5922-8b84-733c-73fdf20ff7e9.png)

* 後は最下部の"Publish release"ボタンで発行です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/69bb3dca-fd1f-c14b-216e-f85d9506c5ab.png)


**同時に、`PyPI`への更新も自動で行われます**