リリースガイド#

このドキュメントは、Matplotlib リリース マネージャーにのみ関連します。

Matplotlib のリリースを行っている開発者向けのガイド。

ノート

これは、正規リポジトリの読み取り専用リモートが存在 remoteし、読み取り/書き込みリモートが存在することを前提としています。DANGER

テスト#

継続的インテグレーションにはGitHub Actionsを使用します。リリースの準備をするときは、最終的にタグ付けされたコミットをアップロードする前にローカルでテストする必要があります。

pytest -n 8 .

さらに、次のテストを実行して手動で検査する必要があります。

python tools/memleak.py agg 1000 agg.pdf

さらに、以下を実行して手動で検査する必要がありますが、現在は壊れています。

pushd examples/tests/
python backend_driver_sgskip.py
popd

GitHub 統計#

API を介して GitHub から GitHub の問題、PR、および作成者を自動的に抽出します。doc/users/github_stats.rstcurrentを にコピーしdoc/users/prev_whats_new/github_stats_X.Y.Z.rst、ファイルの上部にあるリンク ターゲットを変更し、最後にある "Previous GitHub Stats" セクションを削除します。

たとえば、v3.2.0 から v3.2.1 にアップデートする場合:

cp doc/users/github_stats.rst doc/users/prev_whats_new/github_stats_3.2.0.rst
$EDITOR doc/users/prev_whats_new/github_stats_3.2.0.rst
# Change contents as noted above.
git add doc/users/prev_whats_new/github_stats_3.2.0.rst

次に、更新された統計を再生成します。

python tools/github_stats.py --since-tag v3.2.0 --milestone=v3.2.1 --project 'matplotlib/matplotlib' --links > doc/users/github_stats.rst

変更を確認してコミットします。一部の問題/PR タイトルは有効な reST ではない場合があります (最も一般的な問題は*、マークアップが閉じられていないと解釈されることです)。

ノート

GitHub API に対して認証されていることを確認してください。そうしないと、API レート制限を超えたとして GitHub によってブロックされます。次の 2 つの方法のいずれかで認証できます。

  • keyringパッケージの使用; 統計スクリプトを実行すると、システム キーリングに保存されるユーザー名とパスワードの入力を求めるプロンプトが表示されます。または、pip install keyring

  • 個人用アクセス トークンを使用する。この GitHub ページrepo:public_repo スコープを指定して新しいトークンを生成し、トークンを に配置します~/.ghoauth

ドキュメントを更新して検証する#

*-docブランチ番号をマージ

最新の 'doc' ブランチ (例: v3.2.0-doc) をタグ付けしようとしているブランチにマージし、GitHub の doc ブランチを削除します。

セキュリティ ポリシーでサポートされているバージョンを更新する#

メジャー リリースまたはマイナー リリースを作成する場合は、 のセキュリティ ポリシーでサポートされているバージョンを更新しSECURITY.mdます。通常、これは 1 つまたは 2 つの以前のマイナー リリースである可能性がありますが、リリース マネージャーに依存しています。

リリースノートの更新#

機能 #

メジャー リリースとマイナー リリースにのみ必要です。バグ修正リリースには新しい機能が含まれていません。

doc/users/next_whats_new/ すべてのファイルの内容を1 つのファイルにマージしdoc/users/prev_whats_new/whats_new_X.Y.0.rst 、個々のファイルを削除します。

API の変更#

主にメジャー リリースとマイナー リリースに必要です。バグ修正リリースで API が変更されることがあります。

doc/api/next_api_changes/ すべてのファイルの内容を1 つのファイルにマージしdoc/api/prev_api_changes/api_changes_X.Y.Z.rst 、個々のファイルを削除します。

リリースノート TOC #

更新doc/users/release_notes.rst

  • メジャー リリースとマイナー リリースの場合は、新しいセクションを追加します

    X.Y
    ===
    .. toctree::
        :maxdepth: 1
    
        prev_whats_new/whats_new_X.Y.0.rst
        ../api/prev_api_changes/api_changes_X.Y.0.rst
        prev_whats_new/github_stats_X.Y.0.rst
    
  • バグ修正リリースの場合、GitHub 統計を追加し、(存在する場合) API の変更を既存の XY セクションに追加します。

    ../api/prev_api_changes/api_changes_X.Y.Z.rst
    prev_whats_new/github_stats_X.Y.Z.rst
    

バージョンスイッチャーの更新#

更新しますdoc/_static/switcher.json。マイナー リリースの場合はX.Y.Z、新しいエントリを作成し、安定版の名前を変更し ます。メジャー リリースの場合は、との名前を変更し、以前の安定版に新しいバージョンを追加します。version: X.Y.(Z-1)name: stable/X.Y.ZX.Y.0name: devel/X.(Y+1)name: stable/X.Y.0

ドキュメントのビルド#を確認する

最後に、ドキュメントがきれいにビルドされていることを確認してください

make -Cdoc O=-j$(nproc) html latexpdf

ドキュメントが作成されたら、内部および外部のすべてのリンクがまだ有効であることを確認します。linkcheckerこれはまだ Python3 に移植されていません。requests==2.9.0linkchecker を使用してPython2環境を作成する必要があります 。

conda create -p /tmp/lnkchk python=2 requests==2.9.0
source activate /tmp/lnkchk
pip install linkchecker
pushd doc/build/html
linkchecker index.html --check-extern
popd

発生する可能性のある問題に対処します。内部リンクは Circle CI でチェックされます。これは、失敗した外部リンクにのみフラグを立てる必要があります。

SECURITY.md でサポートされているバージョンを更新します#

マイナー バージョン リリースについては、表を更新しSECURITY.mdて、現在のメジャー バージョン シリーズの最新の 2 つのマイナー リリースがサポートされていることを指定します。

メジャー バージョン リリースの場合は、表を更新しSECURITY.mdて、以前のメジャー バージョン シリーズの最後のマイナー バージョンが引き続きサポートされることを指定します。メジャー バージョン シリーズの最終バージョンのサポートの中止は、アドホック ベースで処理されます。

リリース コミットとタグ#を作成する

タグを作成するには、まず、コミット メッセージに非常に簡潔なリリース ノートのセットを含む空のコミットを作成します。

git commit --allow-empty

次に、本文メッセージに同じテキストを使用して、署名付きの注釈付きタグを作成します

git tag -a -s v2.0.0

これにより、GPG キーのパスワードと注釈の入力が求められます。プレリリースについては、従うことが重要ですビルド アーティファクトが PyPI で正しくソートされるように、 PEP 440 。

GitHub から tarball をダウンロードするダウンストリーム ビルダーの問題を防ぐには、タグ[ 1 ]を使用してすべてのブランチをコミットから移動することが重要です。

git commit --allow-empty

最後に、タグを GitHub にプッシュします。

git push DANGER main v2.0.0

おめでとうございます。最も恐ろしい部分が完了しました。

これが最終リリースの場合は、'doc' ブランチも作成します (これはプレリリースでは行われません)。

git branch v2.0.0-doc
git push DANGER v2.0.0-doc

これがメジャー リリースまたはマイナー リリースである場合は、バグ修正ブランチも作成します (マイクロ リリースはこのブランチから削除されます)。

git branch v2.0.x

このブランチで、 Update から glob のコメントを外し、 docs を検証します。その後

git push DANGER v2.0.x

リリース管理 / DOI #

GitHub UIを介して、新しくプッシュされたタグをリリースに変換します。これがプレリリースの場合は、そのようにマークすることを忘れないでください。

最終リリースの場合は、zenodoから DOI も取得します(タグがプッシュされると、自動的に生成されます)。doi の接尾辞とバージョンをディクショナリに追加し tools/cache_zenodo_svg.py、スクリプトを実行します。

これにより、新しい svg が_staticdocs and edit のディレクトリにダウンロードされますdoc/citing.rst。新しい svg、 への変更tools/cache_zenodo_svg.py、 への変更を doc/citing.rstVER-doc ブランチにコミットし、GitHub にプッシュします。

git checkout v2.0.0-doc
$EDITOR tools/cache_zenodo_svg.py
python tools/cache_zenodo_svg.py
$EDITOR doc/citing.html
git commit -a
git push DANGER v2.0.0-doc:v2.0.0-doc

バイナリのビルド#

macOS、Windows、および多くの Linux ホイールと、PyPI 経由のソース tarball を配布しています。タグが GitHub にプッシュされると、ほとんどのビルダーは自動的にトリガーされます。

  • Windows、macOS、および多くの Linux ホイールは、GitHub Actions 上に構築されています。ビルドは で定義された GitHub アクションによってトリガーされ .github/workflows/cibuildwheel.yml、ホイールはビルドのアーティファクトとして使用できます。

  • 代替の Windows ホイールは、Christoph Gohlke によって自動的に構築され、構築されると彼のサイトで利用できるようになります。

  • 自動ティック ボットは、conda-forge feedstockへのプル リクエストを開く必要があります。レビューとマージ (権限がある場合)。

警告

これは自動化されているため、リリース コミットとタグの作成で説明されているように、すべてのブランチをタグから離すことが非常に重要です。

これが最終リリースである場合は、次のダウンストリーム パッケージャーに連絡する必要があります。

  • デビアン

  • フェドーラ

  • アーチ

  • ジェンツー

  • マックポート

  • 自作

  • 連続体

  • 考えた

これは、すべてのバイナリを収集して pypi にアップロードする前に行うことができます。

配布して PyPI にアップロード#

すべてのホイールを収集したら (これには約 1 日かかると予想されます)、tarball を生成します。

git checkout v2.0.0
git clean -xfd
python setup.py sdist

すべてのホイールをdistディレクトリにコピーします。まず、dist ファイルに問題がないことを確認します

twine check dist/*

次に、twineすべてのファイルをpypiにアップロードするために使用します

twine upload -s dist/matplotlib*tar.gz
twine upload dist/*whl

おめでとうございます。これで 2 番目に恐ろしい部分が完成しました。

ドキュメントのビルドとデプロイ#

ドキュメントをビルドするには、タグ付きバージョンがインストールされている必要がありますが、ver-docブランチからドキュメントをビルドします。これを整理する簡単な方法は次のとおりです。

pip install matplotlib
pip install -r requirements/doc/doc-requirements.txt
git checkout v2.0.0-doc
git clean -xfd
make -Cdoc O="-t release -j$(nproc)" html latexpdf LATEXMKOPTS="-silent -f"

ドキュメントの html バージョンと pdf バージョンの両方がビルドされます。

ビルドされたドキュメントは、matplotlib.github.comリポジトリにあります。変更をメインにプッシュすると、Web サイトが自動的に更新されます。

ドキュメントはバージョン別に編成されています。ツリーのルートには、常に最新の安定版リリースのドキュメントがあります。その下には、古いバージョンのドキュメントを含むディレクトリがあります。現在のメインのドキュメントは Circle CI 上に構築され、devdocsリポジトリにプッシュされます。これらは matplotlib.org/devdocsで入手できます。

このリポジトリがmatplotlibと同じディレクトリにチェックアウトされていると仮定します

cd ../matplotlib.github.com
mkdir 2.0.0
rsync -a ../matplotlib/doc/build/html/* 2.0.0
cp ../matplotlib/doc/build/latex/Matplotlib.pdf 2.0.0

ビルドされたドキュメントをコピーします。これが最終リリースの場合は、 stableサブディレクトリを最新バージョンにリンクします。

rsync -a 2.0.0/* ./
rm stable
ln -s 2.0.0/ stable

versions.htmlタグ付けされた最後の 3 つのバージョンを表示するには、手動で編集する必要があります。sitemap.xmlまた、新しくリリースされたバージョンを含めるように編集する必要があります。すべてをコミットして GitHub にプッシュします

git add *
git commit -a -m 'Updating docs for v2.0.0'
git push DANGER main

これで 3 番目に恐ろしい部分が完了しました。おめでとうございます。

アクセスできる場合は、Cloudflare キャッシュをクリアします。

通常、GitHub がプッシュを処理し、ライブ Web ページを更新するのに約 5 ~ 10 分かかります (ブラウザーのキャッシュをクリアすることを忘れないでください)。

発表#

最後のステップは、リリースを世界に発表することです。リリース ノートの短いバージョンと謝辞を次の宛先に送信する必要があります。

最終リリースのアナウンスは、numpy/scipy/scikit-image メーリング リストにも送信する必要があります。

さらに、ソーシャル ネットワーク (アカウント経由の Twitter @matplotlib、その他の個人アカウント経由) でアナウンスを行う必要があります。 ニュースレターに掲載するには、 NumFOCUSに連絡する必要があります。

コンダパッケージ#

Matplotlib プロジェクト自体は conda パッケージをリリースしません。特に、Matplotlib リリース マネージャーは conda パッケージ化を担当しません。

conda-forge 用の Matplotlib のパッケージ化については、 https: //github.com/conda-forge/matplotlib-feedstock を参照してください。