summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2020-11-28 13:02:50 -0500
committerNed Batchelder <ned@nedbatchelder.com>2020-11-28 16:13:11 -0500
commit12eca0fc391bb2f89138df3d6dbaabf78ff32d86 (patch)
treec6af8c4c3ce1b8e3ef4b88079394e1adc61ef240
parent41d8aef04f172bcd78a27d7a2f138a8a712063bd (diff)
downloadpython-coveragepy-git-gh-actions.tar.gz
Remove unneeded CI and kitting supportgh-actions
We don't use AppVeyor or Travis anymore, or make manylinux or local wheels.
-rw-r--r--.travis.yml53
-rw-r--r--MANIFEST.in4
-rw-r--r--Makefile26
-rw-r--r--README.rst9
-rw-r--r--appveyor.yml167
-rw-r--r--ci/download_appveyor.py95
-rw-r--r--ci/download_gha_artifacts.py41
-rw-r--r--ci/install.ps1203
-rwxr-xr-xci/manylinux.sh60
-rw-r--r--ci/run_with_env.cmd91
-rw-r--r--howto.txt13
-rw-r--r--igor.py3
-rw-r--r--tox_wheels.ini21
13 files changed, 52 insertions, 734 deletions
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)
-(?<major>\d+)
-\.
-(?<minor>\d+)
-\.
-(?<micro>\d+)
-(?<prerelease>[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