릴리스 가이드 #

이 문서는 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.rst현재 파일 을 에 복사하고 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에서 차단됩니다. 다음 두 가지 방법 중 하나로 인증할 수 있습니다.

  • keyring패키지 사용 ; 그런 다음 stats 스크립트를 실행할 때 시스템 키링에 저장될 사용자 이름과 암호를 묻는 메시지가 표시됩니다.pip install keyring

  • 개인 액세스 토큰 사용 범위 가 있는 이 GitHub 페이지 에서 새 토큰을 생성하고 토큰을 .repo:public_repo~/.ghoauth

문서 업데이트 및 유효성 검사 #

*-doc브랜치 병합 #

가장 최근의 'doc' 브랜치(예: v3.2.0-doc)를 태그하려는 브랜치로 병합하고 GitHub에서 doc 브랜치를 삭제합니다.

보안 정책 # 에서 지원되는 버전 업데이트

메이저 또는 마이너 릴리스를 만들 때 의 보안 정책에서 지원되는 버전을 업데이트하십시오 SECURITY.md. 일반적으로 이것은 하나 또는 두 개의 이전 마이너 릴리스일 수 있지만 릴리스 관리자에 따라 다릅니다.

릴리스 정보 업데이트 #

새로운 기능 #

메이저 및 마이너 릴리스에만 필요합니다. Bugfix 릴리스에는 새로운 기능이 없어야 합니다.

doc/users/next_whats_new/ 모든 파일의 내용을 단일 파일로 병합하고 doc/users/prev_whats_new/whats_new_X.Y.0.rst 개별 파일을 삭제합니다.

API 변경 #

주요 및 부 릴리스에 주로 필요합니다. 때때로 버그 수정 릴리스에서 API 변경 사항이 있을 수 있습니다.

doc/api/next_api_changes/ 모든 파일의 내용을 단일 파일로 병합하고 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새 항목 을 작성하고 stable의 이름을 변경하십시오 . 주요 릴리스인 경우 이름을 변경 하고 이전 안정에 대한 새 버전을 추가합니다.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.0및 linkchecker 를 사용하여 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

이 분기에서 업데이트 에서 glob의 주석을 해제 하고 문서를 확인하십시오 . 그리고

git push DANGER v2.0.x

릴리스 관리 / DOI #

GitHub UI 를 통해 새로 푸시된 태그를 릴리스로 전환합니다. 시험판인 경우 이를 표시하는 것을 잊지 마십시오.

최종 릴리스의 경우 zenodo 에서 DOI도 가져옵니다 (태그가 푸시되면 DOI가 자동으로 생성됨). doi post-fix 및 version을 사전에 추가 tools/cache_zenodo_svg.py하고 스크립트를 실행합니다.

이렇게 하면 새 svg가 _static문서의 디렉토리에 다운로드되고 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 공급 원료 에 대한 풀 요청을 열어야 합니다 . 검토 및 병합(권한이 있는 경우).

경고

이는 자동화되어 있으므로 Create release commit and tag 에서 설명한 대로 모든 분기를 태그에서 멀리 떨어뜨리는 것이 매우 중요합니다 .

이것이 최종 릴리스인 경우 다음 다운스트림 패키저에 문의해야 합니다.

  • 데비안

  • 페도라

  • 아치

  • 젠투

  • 맥포트

  • 홈브류

  • 연속체

  • 생각

이것은 모든 바이너리를 수집하고 pypi에 업로드하기 전에 수행할 수 있습니다.

배포하고 PyPI에 업로드 #

모든 휠을 수집했으면(약 하루가 소요될 것으로 예상) 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

축하합니다. 이제 두 번째로 무서운 부분을 완료했습니다!

문서 작성 및 배포 #

문서를 빌드하려면 태그가 있는 버전이 설치되어 있어야 하지만 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 저장소에 있습니다. 변경 사항을 기본으로 푸시하면 웹 사이트가 자동으로 업데이트됩니다.

설명서는 버전별로 구성되어 있습니다. 트리의 루트에는 항상 최신 안정 릴리스에 대한 문서가 있습니다. 그 아래에는 이전 버전에 대한 문서가 포함된 디렉토리가 있습니다. 현재 기본 문서는 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

세 번째로 무서운 부분을 완료한 것을 축하합니다!

액세스 권한이 있으면 Cloudflare 캐시를 지우세요.

일반적으로 GitHub에서 푸시를 처리하고 라이브 웹 페이지를 업데이트하는 데 약 5-10분이 걸립니다(브라우저 캐시를 지우는 것을 잊지 마십시오).

# 발표

마지막 단계는 전 세계에 출시를 알리는 것입니다. 승인과 함께 릴리스 정보의 짧은 버전을 다음 주소로 보내야 합니다.

최종 릴리스의 발표는 numpy/scipy/scikit-image 메일링 리스트에도 보내야 합니다.

또한 소셜 네트워크(계정을 통한 트위터 @matplotlib, 개인 계정을 통한 기타)에 공지해야 합니다. 뉴스레터에 포함시키 려면 NumFOCUS 에 연락해야 합니다.

콘다 패키지 #

Matplotlib 프로젝트 자체는 conda 패키지를 릴리스하지 않습니다. 특히 Matplotlib 릴리스 관리자는 conda 패키징을 담당하지 않습니다.

conda-forge용 Matplotlib 패키징에 대한 자세한 내용은 https://github.com/conda-forge/matplotlib-feedstock 을 참조하십시오 .