MEP19: 지속적인 통합 #
상태 번호
완전한
브랜치 및 풀 리퀘스트 #
초록 #
matplotlib는 설치 프로그램과 문서를 테스트하고 구축하기 위해 더 좋고 안정적인 지속적 통합의 이점을 누릴 수 있습니다.
자세한 설명 #
현재 최첨단 #
테스트
matplotlib는 현재 자동화된 테스트에 Travis-CI를 사용합니다. Travis-CI는 무료 서비스로 얼마나 많은 기능을 제공하는지 칭찬해야 하지만 다음과 같은 몇 가지 단점이 있습니다.
종속성을 설치할 때 네트워크 시간 초과로 인해 종종 실패합니다.
설명할 수 없는 이유로 실패하는 경우가 많습니다.
빌드 또는 테스트 제품은 풀 리퀘스트가 아닌 메인 리포지토리의 브랜치 빌드 오프에서만 저장할 수 있으므로 무엇이 잘못되었는지 "사후 분석" 분석이 어려운 경우가 많습니다. 이는 오류가 이후에 로컬에서 재현될 수 없는 경우 특히 실망스럽습니다.
매우 빠르지는 않습니다. 테스트를 위한 matplotlib의 CPU 및 메모리 요구 사항은 평균 Python 프로젝트보다 훨씬 높습니다.
Ubuntu Linux에서만 테스트하며 플랫폼의 세부 사항에 대한 최소한의 제어만 가능합니다. 우리가 통제할 수 없는 시간에 언제든지 업그레이드할 수 있으므로 릴리스 일정상 편리하지 않을 수 있는 예기치 않은 지연이 발생할 수 있습니다.
긍정적인 측면에서 Travis-CI와 github의 통합(보류 중인 모든 풀 요청을 자동으로 테스트)은 예외적입니다.
빌드
matplotlib에 대한 자동화된 바이너리 빌드를 위한 중앙 집중식 노력은 없습니다. 그러나 다음과 같은 이질적인 작업이 수행되고 있습니다 [여기에 언급된 저자가 자세히 기입할 수 있다면 좋을 것입니다!]:
@sandrotosi: 데비안 패키지 빌드
@takluyver: Launchpad에서 Ubuntu 빌드를 자동화했습니다.
@cgohlke: Windows 빌드를 만듭니다(자동화 방법을 모름).
@r-owen: OS-X 빌드를 만듭니다(자동화 방법을 모름).
선적 서류 비치
기본 문서는 이제 travis에 의해 작성되었으며 https://matplotlib.org/devdocs/index.html 에 업로드되었습니다.
@NelleV는 문서를 자동으로 생성하고 웹에 게시하여 MEP10 진행 상황을 차트로 표시합니다.
matplotlib의 특징 #
matplotlib에는 다른 많은 Python 프로젝트보다 테스트 및 구축에 더 많은 부담을 주는 복잡한 요구 사항이 있습니다.
테스트를 실행하는 CPU 시간이 상당히 높습니다. 이는 많은 CI 서비스(예: ShiningPanda)의 무료 계정을 넘어서게 합니다.
여기에는 많은 종속성이 있으며 모든 조합의 전체 매트릭스를 테스트하는 것은 비실용적입니다. 우리는 어떤 공간을 테스트하고 지원할 것인지에 대해 영리해야 합니다.
요구 사항 #
이 섹션에서는 우리가 원하는 요구 사항을 간략하게 설명합니다.
Travis-CI가 수행하는 것처럼 GitHub API에 연결하여 모든 풀 요청 테스트
모든 주요 플랫폼에서 테스트: Linux, Mac OS-X, MS Windows(사용자 설문조사를 기반으로 우선순위에 따라)
사후 디버깅에 도움이 되도록 지난 n일 분량의 빌드 및 테스트 제품을 보관합니다.
자동화된 야간 바이너리 빌드로 사용자는 완전한 컴파일 환경을 설치하지 않고도 최첨단을 테스트할 수 있습니다.
자동화된 벤치마킹. 다양한 백엔드 및 플랫폼에서 시간 경과에 따라 성능을 추적할 수 있는 표준 벤치마크 제품군(테스트와 별개)이 있으면 좋을 것입니다. 이는 빌드 및 테스트와 별개이지만 이상적으로는 동일한 인프라에서 실행됩니다.
자동화된 야간 문서 작성 및 게시(또는 PR이 문서 버그를 도입하지 않도록 하기 위한 테스트의 일부로). (기본적으로 안정적인 릴리스에 대한 정적 문서를 대체하지는 않습니다.)
한 사람이 병목 현상을 일으키지 않도록 여러 개발자가 테스트 시스템을 관리할 수 있어야 합니다. (Travis-CI의 설계는 이를 잘 수행합니다. 빌드 구성을 다른 곳이 아닌 git 저장소에 저장하는 것은 매우 좋은 설계입니다.)
다양한 버전의 matplotlib 종속성의 크고 희소한 행렬을 쉽게 테스트할 수 있습니다. matplotlib 사용자 설문조사는 우리의 노력을 어디에 집중해야 하는지에 대한 몇 가지 좋은 데이터를 제공합니다.
있으면 좋음: 더 모호한 플랫폼을 사용하는 사람들이 빌드 결과를 중앙 대시보드에 게시할 수 있도록 분산된 디자인.
구현 #
이 부분은 아직 작성되지 않았습니다.
그러나 이상적으로 구현은 이미 늘어난 시간에 시스템 관리를 추가하지 않도록 타사 서비스가 될 것입니다. 일부 기부금이 있기 때문에 이 서비스는 무료 서비스에 비해 상당한 시간 절약 이점을 제공하는 경우 유료 서비스일 수 있습니다.
이전 버전과의 호환성 #
이전 버전과의 호환성은 이 MEP의 주요 관심사가 아닙니다. 우리는 현재의 도구와 절차를 더 나은 것으로 대체하고 오래된 것을 버릴 것입니다.
대안 #
행아웃 메모 #
CI 인프라 #
우리는 Travis를 좋아하고 어떤 경우에도 우리 무기고의 일부로 남을 것입니다. 안정성 문제를 조사 중입니다.
Travis에서 테스트 제품의 Amazon S3 업로드를 활성화합니다. 이는 실패 사후 분석에 도움이 될 것입니다(@mdboom이 현재 이를 조사하고 있습니다).
우리는 Mac 커버리지를 원합니다. 가장 좋은 방법은 아마도 Travis가 Pro 계정에 대한 비용을 지불하여 프로젝트에 사용할 수 있도록 하는 것입니다(그렇지 않으면 Linux와 Mac 모두에서 테스트를 허용하지 않기 때문입니다).
우리는 Windows 적용 범위를 원합니다. Shining Panda는 옵션입니다.
여러 소스에서 테스트 결과를 수집 및 합성하고 GitHub API를 사용하여 GitHub에 게시하는 도구를 찾거나 빌드하는 방법을 조사합니다. 이것은 Scipy 커뮤니티에서 일반적으로 사용될 수 있습니다.
Windows와 Mac 모두 빌드를 위한 시스템 설정 프로세스와 바이너리 및 설치 프로그램을 빌드하는 방법을 문서화(또는 스크립트)해야 합니다. Russel Owen과 Christoph Gohlke로부터 정보를 얻어야 할 수도 있습니다. 이것은 자동화된 빌드를 수행하는 데 필요한 단계이지만 다른 여러 가지 이유로도 유용합니다.
테스트 프레임워크 자체 #
시간이 덜 걸리도록 하는 방법을 조사해야 합니다.
가능한 경우 중복 테스트 제거
matplotlib의 일반적인 성능 개선이 도움이 될 것입니다.
더 많은 것, 특히 더 많은 백엔드를 다루어야 합니다.
가능한 한 더 많은 단위 테스트와 더 적은 통합 테스트가 있어야 합니다.