From 12eca0fc391bb2f89138df3d6dbaabf78ff32d86 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sat, 28 Nov 2020 13:02:50 -0500 Subject: Remove unneeded CI and kitting support We don't use AppVeyor or Travis anymore, or make manylinux or local wheels. --- .travis.yml | 53 ----------- MANIFEST.in | 4 +- Makefile | 26 +----- README.rst | 9 +- appveyor.yml | 167 ----------------------------------- ci/download_appveyor.py | 95 -------------------- ci/download_gha_artifacts.py | 41 +++++++++ ci/install.ps1 | 203 ------------------------------------------- ci/manylinux.sh | 60 ------------- ci/run_with_env.cmd | 91 ------------------- howto.txt | 13 +-- igor.py | 3 +- tox_wheels.ini | 21 ----- 13 files changed, 52 insertions(+), 734 deletions(-) delete mode 100644 .travis.yml delete mode 100644 appveyor.yml delete mode 100644 ci/download_appveyor.py create mode 100644 ci/download_gha_artifacts.py delete mode 100644 ci/install.ps1 delete mode 100755 ci/manylinux.sh delete mode 100644 ci/run_with_env.cmd delete mode 100644 tox_wheels.ini diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a643d45b..00000000 --- a/.travis.yml +++ /dev/null @@ -1,53 +0,0 @@ -# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 -# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt -# -# Tell Travis what to do -# https://travis-ci.com/nedbat/coveragepy - -dist: focal -language: python - -cache: pip - -# https://docs.travis-ci.com/user/languages/python/#python-versions -python: - - '2.7' - - '3.5' - - '3.6' - - '3.7' - - '3.8' - - 'pypy2.7-7.3.1' - - 'pypy3.6-7.3.1' - -# Only testing it for python3.8 on aarch64 platform, since it already has a lot -# of jobs to test and takes long time. -matrix: - include: - - python: 3.8 - arch: arm64 - env: - - COVERAGE_COVERAGE=no - - python: 3.8 - arch: arm64 - env: - - COVERAGE_COVERAGE=yes - -env: - matrix: - - COVERAGE_COVERAGE=no - - COVERAGE_COVERAGE=yes - -install: - - pip install -r requirements/ci.pip - - pip freeze - -script: - - tox - -after_script: - - | - if [[ $COVERAGE_COVERAGE == 'yes' ]]; then - python igor.py combine_html - pip install codecov - codecov -X gcov --file coverage.xml - fi diff --git a/MANIFEST.in b/MANIFEST.in index 75257c60..60da201d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -16,8 +16,6 @@ include Makefile include NOTICE.txt include README.rst include __main__.py -include .travis.yml -include appveyor.yml include howto.txt include igor.py include metacov.ini @@ -31,6 +29,8 @@ include .readthedocs.yml recursive-include ci * exclude ci/*.token +recursive-include .github * + recursive-include coverage/fullcoverage *.py recursive-include coverage/ctracer *.c *.h diff --git a/Makefile b/Makefile index a72f9ee6..ec1a5aa8 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,6 @@ clean: clean_platform ## Remove artifacts of test execution, i sterile: clean ## Remove all non-controlled content, even if expensive. rm -rf .tox - -docker image rm -f quay.io/pypa/manylinux1_i686 quay.io/pypa/manylinux1_x86_64 CSS = coverage/htmlfiles/style.css @@ -68,20 +67,6 @@ smoke: ## Run tests quickly with the C tracer in the lowest supported Pytho pysmoke: ## Run tests quickly with the Python tracer in the lowest supported Python versions. COVERAGE_NO_CTRACER=1 tox -q -e py27,py35 -- $(PYTEST_SMOKE_ARGS) -DOCKER_RUN = docker run -it --init --rm -v `pwd`:/io -RUN_MANYLINUX_X86 = $(DOCKER_RUN) quay.io/pypa/manylinux1_x86_64 /io/ci/manylinux.sh -RUN_MANYLINUX_I686 = $(DOCKER_RUN) quay.io/pypa/manylinux1_i686 /io/ci/manylinux.sh - -test_linux: ## Run the tests in Linux under Docker. - # The Linux .pyc files clash with the host's because of file path - # changes, so clean them before and after running tests. - make clean_platform - $(RUN_MANYLINUX_X86) test $(ARGS) - make clean_platform - -meta_linux: ## Run meta-coverage in Linux under Docker. - ARGS="meta $(ARGS)" make test_linux - # Coverage measurement of coverage.py itself (meta-coverage). See metacov.ini # for details. @@ -96,13 +81,6 @@ metahtml: ## Produce meta-coverage HTML reports. kit: ## Make the source distribution. python setup.py sdist -wheel: ## Make the wheels for distribution. - tox -c tox_wheels.ini $(ARGS) - -kit_linux: ## Make the Linux wheels. - $(RUN_MANYLINUX_X86) build - $(RUN_MANYLINUX_I686) build - kit_upload: ## Upload the built distributions to PyPI. twine upload --verbose dist/* @@ -118,8 +96,8 @@ kit_local: # don't go crazy trying to figure out why our new code isn't installing. find ~/Library/Caches/pip/wheels -name 'coverage-*' -delete -download_appveyor: ## Download the latest Windows artifacts from AppVeyor. - python ci/download_appveyor.py nedbat/coveragepy +download_kits: ## Download the built kits from GitHub + python ci/download_gha_artifacts.py build_ext: python setup.py build_ext diff --git a/README.rst b/README.rst index babda472..6cd341e7 100644 --- a/README.rst +++ b/README.rst @@ -8,7 +8,7 @@ Coverage.py Code coverage testing for Python. | |license| |versions| |status| -| |ci-status| |win-ci-status| |docs| |codecov| +| |ci-status| |docs| |codecov| | |kit| |format| |repos| |downloads| | |stars| |forks| |contributors| | |tidelift| |twitter-coveragepy| |twitter-nedbat| @@ -95,12 +95,9 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_. .. _NOTICE.txt: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt -.. |ci-status| image:: https://travis-ci.com/nedbat/coveragepy.svg?branch=master - :target: https://travis-ci.com/nedbat/coveragepy +.. |ci-status| image:: https://github.com/nedbat/coveragepy/workflows/Test%20Suite/badge.svg + :target: https://github.com/nedbat/coveragepy/actions?query=workflow%3A%22Test+Suite%22 :alt: Build status -.. |win-ci-status| image:: https://ci.appveyor.com/api/projects/status/kmeqpdje7h9r6vsf/branch/master?svg=true - :target: https://ci.appveyor.com/project/nedbat/coveragepy - :alt: Windows build status .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat :target: https://coverage.readthedocs.io/ :alt: Documentation diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index b2a1b2f5..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,167 +0,0 @@ -# Appveyor, continuous integration for Windows -# https://ci.appveyor.com/project/nedbat/coveragepy - -version: '{branch}-{build}' - -shallow_clone: true - -cache: - - '%LOCALAPPDATA%\pip\Cache' - -environment: - - CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\ci\\run_with_env.cmd" - - PYTEST_ADDOPTS: "-n auto" - - # Note: There is logic to install Python version $PYTHON_VERSION if the - # $PYTHON directory doesn't exist. $PYTHON_VERSION is visible in the job - # descriptions, but can be wrong in the minor version, since we use the - # version pre-installed on AppVeyor. - # - matrix: - - JOB: "2.7 64-bit" - TOXENV: "py27" - PYTHON: "C:\\Python27-x64" - PYTHON_VERSION: "2.7.18" - PYTHON_ARCH: "64" - - - JOB: "3.5 64-bit" - TOXENV: "py35" - PYTHON: "C:\\Python35-x64" - PYTHON_VERSION: "3.5.9" - PYTHON_ARCH: "64" - - - JOB: "3.6 64-bit" - TOXENV: "py36" - PYTHON: "C:\\Python36-x64" - PYTHON_VERSION: "3.6.11" - PYTHON_ARCH: "64" - - - JOB: "3.7 64-bit" - TOXENV: "py37" - PYTHON: "C:\\Python37-x64" - PYTHON_VERSION: "3.7.8" - PYTHON_ARCH: "64" - - - JOB: "3.8 64-bit" - TOXENV: "py38" - PYTHON: "C:\\Python38-x64" - PYTHON_VERSION: "3.8.6" - PYTHON_ARCH: "64" - - - JOB: "3.9 64-bit" - TOXENV: "py39" - PYTHON: "C:\\Python39-x64" - PYTHON_VERSION: "3.9.0" - PYTHON_ARCH: "64" - - # 32-bit jobs don't run the tests under the Python tracer, since that should - # be exactly the same as 64-bit. - - JOB: "2.7 32-bit" - TOXENV: "py27" - PYTHON: "C:\\Python27" - PYTHON_VERSION: "2.7.18" - PYTHON_ARCH: "32" - COVERAGE_NO_PYTRACER: "1" - - - JOB: "3.5 32-bit" - TOXENV: "py35" - PYTHON: "C:\\Python35" - PYTHON_VERSION: "3.5.9" - PYTHON_ARCH: "32" - COVERAGE_NO_PYTRACER: "1" - - - JOB: "3.6 32-bit" - TOXENV: "py36" - PYTHON: "C:\\Python36" - PYTHON_VERSION: "3.6.11" - PYTHON_ARCH: "32" - COVERAGE_NO_PYTRACER: "1" - - - JOB: "3.7 32-bit" - TOXENV: "py37" - PYTHON: "C:\\Python37" - PYTHON_VERSION: "3.7.8" - PYTHON_ARCH: "32" - COVERAGE_NO_PYTRACER: "1" - - - JOB: "3.8 32-bit" - TOXENV: "py38" - PYTHON: "C:\\Python38" - PYTHON_VERSION: "3.8.6" - PYTHON_ARCH: "32" - COVERAGE_NO_PYTRACER: "1" - - - JOB: "3.9 32-bit" - TOXENV: "py39" - PYTHON: "C:\\Python39" - PYTHON_VERSION: "3.9.0" - PYTHON_ARCH: "32" - COVERAGE_NO_PYTRACER: "1" - - # Meta coverage - - JOB: "Meta 2.7" - TOXENV: "py27" - PYTHON: "C:\\Python27" - PYTHON_VERSION: "2.7.18" - PYTHON_ARCH: "32" - COVERAGE_COVERAGE: "yes" - - - JOB: "Meta 3.8" - TOXENV: "py38" - PYTHON: "C:\\Python38" - PYTHON_VERSION: "3.8.6" - PYTHON_ARCH: "32" - COVERAGE_COVERAGE: "yes" - -init: - - "ECHO %TOXENV%" - -install: - # Install Python (from the official .msi of http://python.org) and pip when - # not already installed. - - ps: if (-not(Test-Path($env:PYTHON))) { & ci\install.ps1 } - - # Prepend newly installed Python to the PATH of this build (this cannot be - # done from inside the powershell script as it would require to restart - # the parent CMD process). - - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" - - # Check that we have the expected version and architecture for Python - - "python -c \"import struct, sys; print('{}\\n{}-bit'.format(sys.version, struct.calcsize('P') * 8))\"" - - # Upgrade to the right version of pip to avoid it displaying warnings - # about it being out of date. - - "python -m pip install --disable-pip-version-check -r requirements/pip.pip" - - # Install requirements. - - "%CMD_IN_ENV% pip install -r requirements/ci.pip" - - # Make a pythonX.Y.bat file in the current directory so that tox will find it - # and pythonX.Y will mean what we want it to. - - "python -c \"import os; open('python{}.{}.bat'.format(*os.environ['TOXENV'][2:]), 'w').write('@{}\\\\python \\x25*\\n'.format(os.environ['PYTHON']))\"" - -build_script: - # If not a metacov job, then build wheel installers. - - if NOT "%COVERAGE_COVERAGE%" == "yes" %CMD_IN_ENV% %PYTHON%\python setup.py bdist_wheel - - # Push everything in dist\ as an artifact. - - ps: if ( Test-Path 'dist' -PathType Container ) { Get-ChildItem dist\*.* | % { Push-AppveyorArtifact $_.FullName -FileName ('dist\' + $_.Name) } } - -test_script: - - "%CMD_IN_ENV% %PYTHON%\\Scripts\\tox" - -after_test: - - if "%COVERAGE_COVERAGE%" == "yes" 7z a metacov-win-%TOXENV%.zip %APPVEYOR_BUILD_FOLDER%\.metacov* - - if "%COVERAGE_COVERAGE%" == "yes" %CMD_IN_ENV% %PYTHON%\python igor.py combine_html - - if "%COVERAGE_COVERAGE%" == "yes" %CMD_IN_ENV% pip install codecov - - if "%COVERAGE_COVERAGE%" == "yes" %CMD_IN_ENV% codecov -X gcov --file coverage.xml - -# Uncomment this to enable RDP access to the build when done. -# https://www.appveyor.com/docs/how-to/rdp-to-build-worker/ -# on_finish: -# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) - -artifacts: - - path: "metacov-*.zip" diff --git a/ci/download_appveyor.py b/ci/download_appveyor.py deleted file mode 100644 index a3d81496..00000000 --- a/ci/download_appveyor.py +++ /dev/null @@ -1,95 +0,0 @@ -# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 -# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt - -"""Use the Appveyor API to download Windows artifacts.""" - -import os -import os.path -import sys -import zipfile - -import requests - - -def make_auth_headers(): - """Make the authentication headers needed to use the Appveyor API.""" - with open("ci/appveyor.token") as f: - token = f.read().strip() - - headers = { - 'Authorization': 'Bearer {}'.format(token), - } - return headers - - -def make_url(url, **kwargs): - """Build an Appveyor API url.""" - return "https://ci.appveyor.com/api" + url.format(**kwargs) - - -def get_project_build(account_project): - """Get the details of the latest Appveyor build.""" - url = make_url("/projects/{account_project}", account_project=account_project) - response = requests.get(url, headers=make_auth_headers()) - return response.json() - - -def download_latest_artifacts(account_project): - """Download all the artifacts from the latest build.""" - build = get_project_build(account_project) - jobs = build['build']['jobs'] - print("Build {0[build][version]}, {1} jobs: {0[build][message]}".format(build, len(jobs))) - for job in jobs: - name = job['name'].partition(':')[2].split(',')[0].strip() - print(" {0}: {1[status]}, {1[artifactsCount]} artifacts".format(name, job)) - - url = make_url("/buildjobs/{jobid}/artifacts", jobid=job['jobId']) - response = requests.get(url, headers=make_auth_headers()) - artifacts = response.json() - - for artifact in artifacts: - is_zip = artifact['type'] == "Zip" - filename = artifact['fileName'] - print(" {}, {} bytes".format(filename, artifact['size'])) - - url = make_url( - "/buildjobs/{jobid}/artifacts/{filename}", - jobid=job['jobId'], - filename=filename - ) - download_url(url, filename, make_auth_headers()) - - if is_zip: - unpack_zipfile(filename) - os.remove(filename) - - -def ensure_dirs(filename): - """Make sure the directories exist for `filename`.""" - dirname, _ = os.path.split(filename) - if dirname and not os.path.exists(dirname): - os.makedirs(dirname) - - -def download_url(url, filename, headers): - """Download a file from `url` to `filename`.""" - ensure_dirs(filename) - response = requests.get(url, headers=headers, stream=True) - if response.status_code == 200: - with open(filename, 'wb') as f: - for chunk in response.iter_content(16*1024): - f.write(chunk) - - -def unpack_zipfile(filename): - """Unpack a zipfile, using the names in the zip.""" - with open(filename, 'rb') as fzip: - z = zipfile.ZipFile(fzip) - for name in z.namelist(): - print(" extracting {}".format(name)) - ensure_dirs(name) - z.extract(name) - - -if __name__ == "__main__": - download_latest_artifacts(sys.argv[1]) diff --git a/ci/download_gha_artifacts.py b/ci/download_gha_artifacts.py new file mode 100644 index 00000000..c5b7bd28 --- /dev/null +++ b/ci/download_gha_artifacts.py @@ -0,0 +1,41 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +"""Use the GitHub API to download built artifacts.""" + +import os +import os.path +import sys +import zipfile + +import requests + +def download_url(url, filename): + """Download a file from `url` to `filename`.""" + response = requests.get(url, stream=True) + if response.status_code == 200: + with open(filename, 'wb') as f: + for chunk in response.iter_content(16*1024): + f.write(chunk) + +def unpack_zipfile(filename): + """Unpack a zipfile, using the names in the zip.""" + with open(filename, 'rb') as fzip: + z = zipfile.ZipFile(fzip) + for name in z.namelist(): + print(" extracting {}".format(name)) + z.extract(name) + +dest = "dist" +repo_owner = "nedbat/coveragepy" +temp_zip = "artifacts.zip" + +if not os.path.exists(dest): + os.makedirs(dest) +os.chdir(dest) + +r = requests.get(f"https://api.github.com/repos/{repo_owner}/actions/artifacts") +latest = max(r.json()["artifacts"], key=lambda a: a["created_at"]) +download_url(latest["archive_download_url"], temp_zip) +unpack_zipfile(temp_zip) +os.remove(temp_zip) diff --git a/ci/install.ps1 b/ci/install.ps1 deleted file mode 100644 index fd5ab220..00000000 --- a/ci/install.ps1 +++ /dev/null @@ -1,203 +0,0 @@ -# From: https://github.com/ogrisel/python-appveyor-demo/blob/master/appveyor/install.ps1 -# -# -# Sample script to install Python and pip under Windows -# Authors: Olivier Grisel, Jonathan Helmus, Kyle Kastner, and Alex Willmer -# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/ - -$MINICONDA_URL = "http://repo.continuum.io/miniconda/" -$BASE_URL = "https://www.python.org/ftp/python/" -$GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py" -$GET_PIP_PATH = "C:\get-pip.py" - -$PYTHON_PRERELEASE_REGEX = @" -(?x) -(?\d+) -\. -(?\d+) -\. -(?\d+) -(?[a-z]{1,2}\d+) -"@ - - -function Download ($filename, $url) { - $webclient = New-Object System.Net.WebClient - - $basedir = $pwd.Path + "\" - $filepath = $basedir + $filename - if (Test-Path $filename) { - Write-Host "Reusing" $filepath - return $filepath - } - - # Download and retry up to 3 times in case of network transient errors. - Write-Host "Downloading" $filename "from" $url - $retry_attempts = 2 - for ($i = 0; $i -lt $retry_attempts; $i++) { - try { - $webclient.DownloadFile($url, $filepath) - break - } - Catch [Exception]{ - Start-Sleep 1 - } - } - if (Test-Path $filepath) { - Write-Host "File saved at" $filepath - } else { - # Retry once to get the error message if any at the last try - $webclient.DownloadFile($url, $filepath) - } - return $filepath -} - - -function ParsePythonVersion ($python_version) { - if ($python_version -match $PYTHON_PRERELEASE_REGEX) { - return ([int]$matches.major, [int]$matches.minor, [int]$matches.micro, - $matches.prerelease) - } - $version_obj = [version]$python_version - return ($version_obj.major, $version_obj.minor, $version_obj.build, "") -} - - -function DownloadPython ($python_version, $platform_suffix) { - $major, $minor, $micro, $prerelease = ParsePythonVersion $python_version - - $dir = "$major.$minor.$micro" - $ext = "exe" - if ($platform_suffix) { - $platform_suffix = "-$platform_suffix" - } - - $filename = "python-$python_version$platform_suffix.$ext" - $url = "$BASE_URL$dir/$filename" - $filepath = Download $filename $url - return $filepath -} - - -function InstallPython ($python_version, $architecture, $python_home) { - Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home - if (Test-Path $python_home) { - Write-Host $python_home "already exists, skipping." - return $false - } - if ($architecture -eq "32") { - $platform_suffix = "" - } else { - $platform_suffix = "amd64" - } - $installer_path = DownloadPython $python_version $platform_suffix - $installer_ext = [System.IO.Path]::GetExtension($installer_path) - Write-Host "Installing $installer_path to $python_home" - $install_log = $python_home + ".log" - if ($installer_ext -eq '.msi') { - InstallPythonMSI $installer_path $python_home $install_log - } else { - InstallPythonEXE $installer_path $python_home $install_log - } - if (Test-Path $python_home) { - Write-Host "Python $python_version ($architecture) installation complete" - } else { - Write-Host "Failed to install Python in $python_home" - Get-Content -Path $install_log - Exit 1 - } -} - - -function InstallPythonEXE ($exepath, $python_home, $install_log) { - $install_args = "/quiet InstallAllUsers=1 TargetDir=$python_home" - RunCommand $exepath $install_args -} - - -function InstallPythonMSI ($msipath, $python_home, $install_log) { - $install_args = "/qn /log $install_log /i $msipath TARGETDIR=$python_home" - $uninstall_args = "/qn /x $msipath" - RunCommand "msiexec.exe" $install_args - if (-not(Test-Path $python_home)) { - Write-Host "Python seems to be installed else-where, reinstalling." - RunCommand "msiexec.exe" $uninstall_args - RunCommand "msiexec.exe" $install_args - } -} - -function RunCommand ($command, $command_args) { - Write-Host $command $command_args - Start-Process -FilePath $command -ArgumentList $command_args -Wait -Passthru -} - - -function InstallPip ($python_home) { - $pip_path = $python_home + "\Scripts\pip.exe" - $python_path = $python_home + "\python.exe" - if (-not(Test-Path $pip_path)) { - Write-Host "Installing pip..." - $webclient = New-Object System.Net.WebClient - $webclient.DownloadFile($GET_PIP_URL, $GET_PIP_PATH) - Write-Host "Executing:" $python_path $GET_PIP_PATH - & $python_path $GET_PIP_PATH - } else { - Write-Host "pip already installed." - } -} - - -function DownloadMiniconda ($python_version, $platform_suffix) { - $filename = "Miniconda-3.5.5-Windows-" + $platform_suffix + ".exe" - $url = $MINICONDA_URL + $filename - $filepath = Download $filename $url - return $filepath -} - - -function InstallMiniconda ($python_version, $architecture, $python_home) { - Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home - if (Test-Path $python_home) { - Write-Host $python_home "already exists, skipping." - return $false - } - if ($architecture -eq "32") { - $platform_suffix = "x86" - } else { - $platform_suffix = "x86_64" - } - $filepath = DownloadMiniconda $python_version $platform_suffix - Write-Host "Installing" $filepath "to" $python_home - $install_log = $python_home + ".log" - $args = "/S /D=$python_home" - Write-Host $filepath $args - Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru - if (Test-Path $python_home) { - Write-Host "Python $python_version ($architecture) installation complete" - } else { - Write-Host "Failed to install Python in $python_home" - Get-Content -Path $install_log - Exit 1 - } -} - - -function InstallMinicondaPip ($python_home) { - $pip_path = $python_home + "\Scripts\pip.exe" - $conda_path = $python_home + "\Scripts\conda.exe" - if (-not(Test-Path $pip_path)) { - Write-Host "Installing pip..." - $args = "install --yes pip" - Write-Host $conda_path $args - Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru - } else { - Write-Host "pip already installed." - } -} - -function main () { - InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON - InstallPip $env:PYTHON -} - -main diff --git a/ci/manylinux.sh b/ci/manylinux.sh deleted file mode 100755 index 1fafec9d..00000000 --- a/ci/manylinux.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# From: https://github.com/pypa/python-manylinux-demo/blob/master/travis/build-wheels.sh -# which is in the public domain. -# -# This is run inside a CentOS 5 virtual machine to build manylinux wheels: -# -# $ docker run -v `pwd`:/io quay.io/pypa/manylinux1_x86_64 /io/ci/build_manylinux.sh -# - -set -e -x - -action=$1 -shift - -if [[ $action == "build" ]]; then - # Compile wheels - cd /io - for PYBIN in /opt/python/*/bin; do - if [[ $PYBIN == *cp34* ]]; then - # manylinux docker images have Python 3.4, but we don't use it. - continue - fi - "$PYBIN/pip" install -r requirements/wheel.pip - "$PYBIN/python" setup.py clean -a - "$PYBIN/python" setup.py bdist_wheel -d ~/wheelhouse/ - done - cd ~ - - # Bundle external shared libraries into the wheels - for whl in wheelhouse/*.whl; do - auditwheel repair "$whl" -w /io/dist/ - done - -elif [[ $action == "test" ]]; then - # Create "pythonX.Y" links - for PYBIN in /opt/python/*/bin/; do - if [[ $PYBIN == *cp34* ]]; then - # manylinux docker images have Python 3.4, but we don't use it. - continue - fi - PYNAME=$("$PYBIN/python" -c "import sys; print('python{0[0]}.{0[1]}'.format(sys.version_info))") - ln -sf "$PYBIN/$PYNAME" /usr/local/bin/$PYNAME - done - - # Install packages and test - TOXBIN=/opt/python/cp36-cp36m/bin - "$TOXBIN/pip" install -r /io/requirements/tox.pip - - cd /io - export PYTHONPYCACHEPREFIX=/opt/pyc - if [[ $1 == "meta" ]]; then - shift - export COVERAGE_COVERAGE=yes - fi - TOXWORKDIR=.tox/linux "$TOXBIN/tox" "$@" || true - cd ~ - -else - echo "Need an action to perform!" -fi diff --git a/ci/run_with_env.cmd b/ci/run_with_env.cmd deleted file mode 100644 index 66b9252e..00000000 --- a/ci/run_with_env.cmd +++ /dev/null @@ -1,91 +0,0 @@ -:: From: https://github.com/ogrisel/python-appveyor-demo/blob/master/appveyor/run_with_env.cmd -:: -:: -:: To build extensions for 64 bit Python 3, we need to configure environment -:: variables to use the MSVC 2010 C++ compilers from GRMSDKX_EN_DVD.iso of: -:: MS Windows SDK for Windows 7 and .NET Framework 4 (SDK v7.1) -:: -:: To build extensions for 64 bit Python 2, we need to configure environment -:: variables to use the MSVC 2008 C++ compilers from GRMSDKX_EN_DVD.iso of: -:: MS Windows SDK for Windows 7 and .NET Framework 3.5 (SDK v7.0) -:: -:: 32 bit builds, and 64-bit builds for 3.5 and beyond, do not require specific -:: environment configurations. -:: -:: Note: this script needs to be run with the /E:ON and /V:ON flags for the -:: cmd interpreter, at least for (SDK v7.0) -:: -:: More details at: -:: https://github.com/cython/cython/wiki/64BitCythonExtensionsOnWindows -:: http://stackoverflow.com/a/13751649/163740 -:: -:: Author: Olivier Grisel -:: License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/ -:: -:: Notes about batch files for Python people: -:: -:: Quotes in values are literally part of the values: -:: SET FOO="bar" -:: FOO is now five characters long: " b a r " -:: If you don't want quotes, don't include them on the right-hand side. -:: -:: The CALL lines at the end of this file look redundant, but if you move them -:: outside of the IF clauses, they do not run properly in the SET_SDK_64==Y -:: case, I don't know why. -@ECHO OFF - -SET COMMAND_TO_RUN=%* -SET WIN_SDK_ROOT=C:\Program Files\Microsoft SDKs\Windows -SET WIN_WDK=c:\Program Files (x86)\Windows Kits\10\Include\wdf - -:: Extract the major and minor versions, and allow for the minor version to be -:: more than 9. This requires the version number to have two dots in it. -SET MAJOR_PYTHON_VERSION=%PYTHON_VERSION:~0,1% -IF "%PYTHON_VERSION:~3,1%" == "." ( - SET MINOR_PYTHON_VERSION=%PYTHON_VERSION:~2,1% -) ELSE ( - SET MINOR_PYTHON_VERSION=%PYTHON_VERSION:~2,2% -) - -:: Based on the Python version, determine what SDK version to use, and whether -:: to set the SDK for 64-bit. -IF %MAJOR_PYTHON_VERSION% == 2 ( - SET WINDOWS_SDK_VERSION="v7.0" - SET SET_SDK_64=Y -) ELSE ( - IF %MAJOR_PYTHON_VERSION% == 3 ( - SET WINDOWS_SDK_VERSION="v7.1" - IF %MINOR_PYTHON_VERSION% LEQ 4 ( - SET SET_SDK_64=Y - ) ELSE ( - SET SET_SDK_64=N - IF EXIST "%WIN_WDK%" ( - :: See: https://connect.microsoft.com/VisualStudio/feedback/details/1610302/ - REN "%WIN_WDK%" 0wdf - ) - ) - ) ELSE ( - ECHO Unsupported Python version: "%MAJOR_PYTHON_VERSION%" - EXIT 1 - ) -) - -IF %PYTHON_ARCH% == 64 ( - IF %SET_SDK_64% == Y ( - ECHO Configuring Windows SDK %WINDOWS_SDK_VERSION% for Python %MAJOR_PYTHON_VERSION% on a 64 bit architecture - SET DISTUTILS_USE_SDK=1 - SET MSSdk=1 - "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Setup\WindowsSdkVer.exe" -q -version:%WINDOWS_SDK_VERSION% - "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Bin\SetEnv.cmd" /x64 /release - ECHO Executing: %COMMAND_TO_RUN% - call %COMMAND_TO_RUN% || EXIT 1 - ) ELSE ( - ECHO Using default MSVC build environment for 64 bit architecture - ECHO Executing: %COMMAND_TO_RUN% - call %COMMAND_TO_RUN% || EXIT 1 - ) -) ELSE ( - ECHO Using default MSVC build environment for 32 bit architecture - ECHO Executing: %COMMAND_TO_RUN% - call %COMMAND_TO_RUN% || EXIT 1 -) diff --git a/howto.txt b/howto.txt index 1ad455d3..f0def3b4 100644 --- a/howto.txt +++ b/howto.txt @@ -8,7 +8,6 @@ version_info = (4, 0, 2, "final", 0) - Python version number in classifiers in setup.py - Copyright date in NOTICE.txt -- Update specific Python versions in appveyor.yml ("PYTHON_VERSION") - Update CHANGES.rst, including release date. - don't forget the jump target - Update README.rst @@ -45,16 +44,8 @@ - ELSE: $ make publish - Kits: - - Start fresh: - $ make sterile - - Source kit and wheels: - $ make kit wheel - - Linux wheels: - $ make kit_linux - - Windows kits - - wait for over an hour for Appveyor to build kits. - - https://ci.appveyor.com/project/nedbat/coveragepy - $ make download_appveyor + - Download built kits from GitHub Actions: + $ make download_kits - examine the dist directory, and remove anything that looks malformed. - check the dist directory: $ python -m twine check dist/* diff --git a/igor.py b/igor.py index 9a632b57..31d4bacc 100644 --- a/igor.py +++ b/igor.py @@ -310,9 +310,10 @@ def do_check_eol(): check_file("setup.py") check_file("igor.py") check_file("Makefile") - check_file(".travis.yml") check_files(".", ["*.rst", "*.txt"]) check_files(".", ["*.pip"]) + check_files(".github", ["*"]) + check_files("ci", ["*"]) def print_banner(label): diff --git a/tox_wheels.ini b/tox_wheels.ini deleted file mode 100644 index 3dd06b61..00000000 --- a/tox_wheels.ini +++ /dev/null @@ -1,21 +0,0 @@ -# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 -# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt - -[tox] -envlist = py{27,35,36,37,38,39,sys} -toxworkdir = {toxinidir}/.tox/wheels - -[testenv] -deps = - -rrequirements/wheel.pip - -commands = - python -c "import sys; print(sys.base_prefix)" - python setup.py bdist_wheel {posargs} - -[testenv:py27] -basepython = python2.7 - -[testenv:pysys] -# For building with the Mac Framework Python. -basepython = /usr/bin/python -- cgit v1.2.1