Repository: cython/cython

Issue:
Move away from travis-ci
Sadly, the current situation with travis-ci has become unbearable. Investigate Linux/macOS (and Windows) options on
- circle-ci
- azure
- potentially also Github Actions, but that seems more work for less benefit currently (no Windows support, very different setup).

We currently use [multibuild](https://github.com/matthew-brett/multibuild/) in the [cython-wheels](https://github.com/MacPython/cython-wheels) project, but should also consider [cibuildwheel](https://pypi.org/project/cibuildwheel/).



Discussion:
Hi, I should be able to help with this. Also I wouldn't rule out Github Actions. They actually have Windows support and their setup isn't all that different from other providers. 
If needed, I could help set up Github Actions as it is currently quite fresh after having to move one of our projects out of travis :sweat_smile:. Also, compared to other providers, its free for open source (the 2,000 minutes is only for private projects) and its quite fast after the first run
cibuildwheel is a nice option. matplotlib has [moved to using it](https://github.com/matplotlib/matplotlib/blob/master/.github/workflows/cibuildwheel.yml). One nice thing about the wheel building model in cibuildwheel is that the different python jobs can be run consecutively in the same build step, one after another. 

With github actions, admins can trigger the build action from the "Actions" tab on the repo without leaving github.

For arm64, one option is [shippable](https://www.shippable.com/pricing.html) which is what NumPy uses for testing. The machines are less powerful than the travis graviton machines: the builds are about 2x longer than on x86.

Resolving patch:
diff --git a/runtests.py b/runtests.py
--- a/runtests.py
+++ b/runtests.py
@@ -2376,8 +2376,7 @@ def runtests_callback(args):
 
 def runtests(options, cmd_args, coverage=None):
     # faulthandler should be able to provide a limited traceback
-    # in the event of a segmentation fault. Hopefully better than Travis
-    # just keeping running until timeout. Only available on Python 3.3+
+    # in the event of a segmentation fault. Only available on Python 3.3+
     try:
         import faulthandler
     except ImportError:
@@ -2544,8 +2543,8 @@ def runtests(options, cmd_args, coverage=None):
         sys.stderr.write("Backends: %s\n" % ','.join(backends))
     languages = backends
 
-    if 'TRAVIS' in os.environ and sys.platform == 'darwin' and 'cpp' in languages:
-        bugs_file_name = 'travis_macos_cpp_bugs.txt'
+    if 'CI' in os.environ and sys.platform == 'darwin' and 'cpp' in languages:
+        bugs_file_name = 'macos_cpp_bugs.txt'
         exclude_selectors += [
             FileListExcluder(os.path.join(ROOTDIR, bugs_file_name),
                              verbose=verbose_excludes)


Test patch:
diff --git a/tests/build/common_include_dir.srctree b/tests/build/common_include_dir.srctree
--- a/tests/build/common_include_dir.srctree
+++ b/tests/build/common_include_dir.srctree
@@ -16,18 +16,17 @@ PYTHON fake_grep.py -c '#include "common/AddTraceback_impl_.*h"' c.c
 
 import sys
 from Cython.Build.Dependencies import cythonize
-import platform
 import os
 
 from distutils.core import setup
 
-# os x on Travis specifically seems to crash with nthreads>0
-osx_on_travis = (platform.system() == "Darwin" and os.getenv("TRAVIS"))
+# os x on CI specifically seems to crash with nthreads>0
+osx_on_ci = (sys.platform == "darwin" and os.getenv("CI"))
 
 # Test concurrent safety if multiprocessing is available.
-# (In particular, TravisCI does not support spawning processes from tests.)
+# (In particular, CI providers like Travis and Github Actions do not support spawning processes from tests.)
 nthreads = 0
-if not (hasattr(sys, 'pypy_version_info') or osx_on_travis):
+if not (hasattr(sys, 'pypy_version_info') or osx_on_ci):
     try:
         import multiprocessing
         multiprocessing.Pool(2).close()
diff --git a/tests/travis_macos_cpp_bugs.txt b/tests/macos_cpp_bugs.txt
similarity index 100%
rename from tests/travis_macos_cpp_bugs.txt
rename to tests/macos_cpp_bugs.txt
diff --git a/tests/pypy_bugs.txt b/tests/pypy_bugs.txt
--- a/tests/pypy_bugs.txt
+++ b/tests/pypy_bugs.txt
@@ -10,6 +10,7 @@ sequential_parallel
 yield_from_pep380
 memoryview_inplace_division
 
+run.unicodeliterals
 run.unicodemethods
 run.unicode_imports
 run.test_genericclass
@@ -64,14 +65,3 @@ run.exttype_dealloc
 # bugs in cpyext
 run.special_methods_T561
 run.special_methods_T561_py2
-
-# looks to be fixed in PyPy 7.3.0
-# TODO - remove when Travis updates
-run.py_unicode_strings
-run.unicodeliterals
-run.unicode_identifiers
-run.unicode_identifiers_import
-errors.unicode_identifiers_e4
-run.tracebacks
-run.fstring
-run.unicode_identifiers_normalization