summaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2021-11-16 10:52:37 +0100
committerStefan Behnel <stefan_ml@behnel.de>2021-11-16 11:53:08 +0100
commit6fae84ea6fed2c794cef55c3ff4754cca94f0e70 (patch)
tree1418fc04da6d44b85dc22d850de5d7e741ce8659 /Tools
parentdb93e5e7ef6ac1c57254967555ce467a88963fa0 (diff)
downloadcython-6fae84ea6fed2c794cef55c3ff4754cca94f0e70.tar.gz
Add Github Actions workflow scripts.
Diffstat (limited to 'Tools')
-rw-r--r--Tools/ci-run.sh176
1 files changed, 176 insertions, 0 deletions
diff --git a/Tools/ci-run.sh b/Tools/ci-run.sh
new file mode 100644
index 000000000..2a8f2e22b
--- /dev/null
+++ b/Tools/ci-run.sh
@@ -0,0 +1,176 @@
+#!/usr/bin/bash
+
+GCC_VERSION=${GCC_VERSION:=8}
+
+# Set up compilers
+if [[ $TEST_CODE_STYLE == "1" ]]; then
+ echo "Skipping compiler setup"
+elif [[ $OSTYPE == "linux-gnu"* ]]; then
+ echo "Setting up linux compiler"
+ echo "Installing requirements [apt]"
+ sudo apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
+ sudo apt update -y -q
+ sudo apt install -y -q ccache gdb python-dbg python3-dbg gcc-$GCC_VERSION || exit 1
+
+ ALTERNATIVE_ARGS=""
+ if [[ $BACKEND == *"cpp"* ]]; then
+ sudo apt install -y -q g++-$GCC_VERSION || exit 1
+ ALTERNATIVE_ARGS="--slave /usr/bin/g++ g++ /usr/bin/g++-$GCC_VERSION"
+ fi
+ sudo /usr/sbin/update-ccache-symlinks
+ echo "/usr/lib/ccache" >> $GITHUB_PATH # export ccache to path
+
+ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$GCC_VERSION 60 $ALTERNATIVE_ARGS
+
+ export CC="gcc"
+ if [[ $BACKEND == *"cpp"* ]]; then
+ sudo update-alternatives --set g++ /usr/bin/g++-$GCC_VERSION
+ export CXX="g++"
+ fi
+elif [[ $OSTYPE == "darwin"* ]]; then
+ echo "Setting up macos compiler"
+ export CC="clang -Wno-deprecated-declarations"
+ export CXX="clang++ -stdlib=libc++ -Wno-deprecated-declarations"
+else
+ echo "No setup specified for $OSTYPE"
+fi
+
+# Set up miniconda
+if [[ $STACKLESS == "true" ]]; then
+ echo "Installing stackless python"
+ #conda install --quiet --yes nomkl --file=test-requirements.txt --file=test-requirements-cpython.txt
+ conda config --add channels stackless
+ conda install --quiet --yes stackless || exit 1
+fi
+
+PYTHON_SYS_VERSION=$(python -c 'import sys; print(sys.version)')
+
+# Log versions in use
+echo "===================="
+echo "|VERSIONS INSTALLED|"
+echo "===================="
+echo "Python $PYTHON_SYS_VERSION"
+if [[ $CC ]]; then
+ which ${CC%% *}
+ ${CC%% *} --version
+fi
+if [[ $CXX ]]; then
+ which ${CXX%% *}
+ ${CXX%% *} --version
+fi
+echo "===================="
+
+# Install python requirements
+echo "Installing requirements [python]"
+if [[ $PYTHON_VERSION == "2.7"* ]]; then
+ pip install wheel || exit 1
+ pip install -r test-requirements-27.txt || exit 1
+elif [[ $PYTHON_VERSION == "3."[45]* ]]; then
+ python -m pip install wheel || exit 1
+ python -m pip install -r test-requirements-34.txt || exit 1
+else
+ python -m pip install -U pip setuptools wheel || exit 1
+
+ if [[ $PYTHON_VERSION != *"-dev" || $COVERAGE == "1" ]]; then
+ python -m pip install -r test-requirements.txt || exit 1
+
+ if [[ $PYTHON_VERSION != "pypy"* && $PYTHON_VERSION != "3."[1]* ]]; then
+ python -m pip install -r test-requirements-cpython.txt || exit 1
+ fi
+ fi
+fi
+
+if [[ $TEST_CODE_STYLE == "1" ]]; then
+ STYLE_ARGS="--no-unit --no-doctest --no-file --no-pyregr --no-examples"
+ python -m pip install -r doc-requirements.txt || exit 1
+else
+ STYLE_ARGS="--no-code-style"
+
+ # Install more requirements
+ if [[ $PYTHON_VERSION != *"-dev" ]]; then
+ if [[ $BACKEND == *"cpp"* ]]; then
+ echo "WARNING: Currently not installing pythran due to compatibility issues"
+ # python -m pip install pythran==0.9.5 || exit 1
+ fi
+
+ if [[ $BACKEND != "cpp" && $PYTHON_VERSION != "pypy"* &&
+ $PYTHON_VERSION != "2"* && $PYTHON_VERSION != "3.4"* ]]; then
+ python -m pip install mypy || exit 1
+ fi
+ fi
+fi
+
+# Run tests
+echo "==== Running tests ===="
+ccache -s 2>/dev/null || true
+export PATH="/usr/lib/ccache:$PATH"
+
+# Most modern compilers allow the last conflicting option
+# to override the previous ones, so '-O0 -O3' == '-O3'
+# This is true for the latest msvc, gcc and clang
+CFLAGS="-O0 -ggdb -Wall -Wextra"
+
+if [[ $NO_CYTHON_COMPILE != "1" && $PYTHON_VERSION != "pypy"* ]]; then
+
+ BUILD_CFLAGS="$CFLAGS -O2"
+ if [[ $PYTHON_SYS_VERSION == "2"* ]]; then
+ BUILD_CFLAGS="$BUILD_CFLAGS -fno-strict-aliasing"
+ fi
+
+ SETUP_ARGS=""
+ if [[ $COVERAGE == "1" ]]; then
+ SETUP_ARGS="$SETUP_ARGS --cython-coverage"
+ fi
+ if [[ $CYTHON_COMPILE_ALL == "1" ]]; then
+ SETUP_ARGS="$SETUP_ARGS --cython-compile-all"
+ fi
+ SETUP_ARGS="$SETUP_ARGS
+ $(python -c 'import sys; print("-j5" if sys.version_info >= (3,5) else "")')"
+
+ CFLAGS=$BUILD_CFLAGS \
+ python setup.py build_ext -i $SETUP_ARGS || exit 1
+
+ # COVERAGE can be either "" (empty or not set) or "1" (when we set it)
+ # STACKLESS can be either "" (empty or not set) or "true" (when we set it)
+ # CYTHON_COMPILE_ALL can be either "" (empty or not set) or "1" (when we set it)
+ if [[ $COVERAGE != "1" && $STACKLESS != "true" && $BACKEND != *"cpp"* &&
+ $CYTHON_COMPILE_ALL != "1" && $LIMITED_API == "" && $EXTRA_CFLAGS == "" ]]; then
+ python setup.py bdist_wheel || exit 1
+ fi
+fi
+
+if [[ $TEST_CODE_STYLE == "1" ]]; then
+ make -C docs html || exit 1
+elif [[ $PYTHON_VERSION != "pypy"* ]]; then
+ # Run the debugger tests in python-dbg if available
+ # (but don't fail, because they currently do fail)
+ PYTHON_DBG=$(python -c 'import sys; print("%d.%d" % sys.version_info[:2])')
+ PYTHON_DBG="python$PYTHON_DBG-dbg"
+ if $PYTHON_DBG -V >&2; then
+ CFLAGS=$CFLAGS $PYTHON_DBG \
+ runtests.py -vv --no-code-style Debugger --backends=$BACKEND
+ fi
+fi
+
+RUNTESTS_ARGS=""
+if [[ $COVERAGE == "1" ]]; then
+ RUNTESTS_ARGS="$RUNTESTS_ARGS --coverage --coverage-html --cython-only"
+fi
+if [[ $TEST_CODE_STYLE != "1" ]]; then
+ RUNTESTS_ARGS="$RUNTESTS_ARGS -j7"
+fi
+
+export CFLAGS="$CFLAGS $EXTRA_CFLAGS"
+python runtests.py \
+ -vv $STYLE_ARGS \
+ -x Debugger \
+ --backends=$BACKEND \
+ $LIMITED_API \
+ $EXCLUDE \
+ $RUNTESTS_ARGS
+
+EXIT_CODE=$?
+
+ccache -s 2>/dev/null || true
+
+exit $EXIT_CODE