From 9dbad500bc66b9a7cae41e3c3a04ac112440dbb9 Mon Sep 17 00:00:00 2001
From: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Date: Sat, 1 Aug 2020 00:01:12 +0200
Subject: [PATCH] Move Python 2.6 unit tests to Github Actions (#17279)

* Run Python2.6 unit tests on Github Actions
* Skip url tests on Python 2.6 to reduce waiting times
* Skip foreground background tests on Python 2.6 to reduce waiting times
* Removed references to Travis in the documentation
* Deleted install_patchelf.sh (can be installed from repo on CentOS 6)
---
 .github/workflows/linux_unit_tests.yaml   | 17 ++++++-
 .travis.yml                               | 60 -----------------------
 README.md                                 |  5 +-
 lib/spack/docs/contribution_guide.rst     | 33 ++++++-------
 lib/spack/spack/test/cmd/url.py           | 19 ++++++-
 lib/spack/spack/test/llnl/util/tty/log.py |  4 ++
 share/spack/qa/install_patchelf.sh        | 22 ---------
 7 files changed, 55 insertions(+), 105 deletions(-)
 delete mode 100644 .travis.yml
 delete mode 100755 share/spack/qa/install_patchelf.sh

diff --git a/.github/workflows/linux_unit_tests.yaml b/.github/workflows/linux_unit_tests.yaml
index f1def14b6f..cf5d8660c2 100644
--- a/.github/workflows/linux_unit_tests.yaml
+++ b/.github/workflows/linux_unit_tests.yaml
@@ -3,13 +3,12 @@ name: linux tests
 on:
   push:
     branches:
-      - master
       - develop
       - releases/**
   pull_request:
     branches:
-      - master
       - develop
+      - releases/**
 jobs:
   unittests:
     runs-on: ubuntu-latest
@@ -99,3 +98,17 @@ jobs:
     - uses: codecov/codecov-action@v1
       with:
         flags: shelltests,linux
+  centos6:
+    # Test for Python2.6 run on Centos 6
+    runs-on: ubuntu-latest
+    container: spack/github-actions:centos6
+    steps:
+    - name: Run unit tests
+      env:
+          HOME: /home/spack-test
+      run: |
+          whoami && echo $HOME && cd $HOME
+          git clone https://github.com/spack/spack.git && cd spack
+          git fetch origin ${{ github.ref }}:test-branch
+          git checkout test-branch
+          share/spack/qa/run-unit-tests
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 808e79bbff..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-# Only build releases and develop on push; do not build every branch.
-branches:
-  only:
-    - develop
-    - /^releases\/.*$/
-
-language: python
-python: '2.6'
-dist: trusty
-os: linux
-addons:
-  apt:
-    packages:
-      - gfortran
-      - graphviz
-      - gnupg2
-      - kcov
-      - mercurial
-      - ninja-build
-      - realpath
-      - zsh
-      - fish
-
-before_install:
-  - if [[ "$TRAVIS_DIST" == "trusty" ]]; then
-        share/spack/qa/install_patchelf.sh;
-    else
-        sudo apt-get update;
-        sudo apt-get -y install patchelf;
-    fi
-
-# Install various dependencies
-install:
-  - pip install --upgrade pip
-  - pip install --upgrade six
-  - pip install --upgrade setuptools
-  - pip install --upgrade flake8
-  - pip install --upgrade pep8-naming
-
-before_script:
-  # Need this for the git tests to succeed.
-  - git config --global user.email "spack@example.com"
-  - git config --global user.name "Test User"
-
-  # Need this to be able to compute the list of changed files
-  - git fetch origin ${TRAVIS_BRANCH}:${TRAVIS_BRANCH}
-
-script:
-  - python bin/spack -h
-  - python bin/spack help -a
-  - python bin/spack -p --lines 20 spec mpileaks%gcc ^elfutils@0.170
-  - python bin/spack test -x --verbose
-
-notifications:
-  email:
-    recipients:
-    - tgamblin@llnl.gov
-    - massimiliano.culpo@gmail.com
-    on_success: change
-    on_failure: always
diff --git a/README.md b/README.md
index 1cafb5c963..b100f8ac8c 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,6 @@
 [![Linux Tests](https://github.com/spack/spack/workflows/linux%20tests/badge.svg)](https://github.com/spack/spack/actions)
 [![Linux Builds](https://github.com/spack/spack/workflows/linux%20builds/badge.svg)](https://github.com/spack/spack/actions)
 [![macOS Builds (nightly)](https://github.com/spack/spack/workflows/macOS%20builds%20nightly/badge.svg?branch=develop)](https://github.com/spack/spack/actions?query=workflow%3A%22macOS+builds+nightly%22)
-[![Build Status](https://travis-ci.com/spack/spack.svg?branch=develop)](https://travis-ci.com/spack/spack)
 [![codecov](https://codecov.io/gh/spack/spack/branch/develop/graph/badge.svg)](https://codecov.io/gh/spack/spack)
 [![Read the Docs](https://readthedocs.org/projects/spack/badge/?version=latest)](https://spack.readthedocs.io)
 [![Slack](https://spackpm.herokuapp.com/badge.svg)](https://spackpm.herokuapp.com)
@@ -74,8 +73,8 @@ When you send your request, make ``develop`` the destination branch on the
 
 Your PR must pass Spack's unit tests and documentation tests, and must be
 [PEP 8](https://www.python.org/dev/peps/pep-0008/) compliant.  We enforce
-these guidelines with [Travis CI](https://travis-ci.org/spack/spack).  To
-run these tests locally, and for helpful tips on git, see our
+these guidelines with our CI process. To run these tests locally, and for 
+helpful tips on git, see our
 [Contribution Guide](http://spack.readthedocs.io/en/latest/contribution_guide.html).
 
 Spack's `develop` branch has the latest contributions. Pull requests
diff --git a/lib/spack/docs/contribution_guide.rst b/lib/spack/docs/contribution_guide.rst
index 10c0875e85..66f387c1ab 100644
--- a/lib/spack/docs/contribution_guide.rst
+++ b/lib/spack/docs/contribution_guide.rst
@@ -48,7 +48,7 @@ information.
 Continuous Integration
 ----------------------
 
-Spack uses `Travis CI <https://travis-ci.org/spack/spack>`_ for Continuous Integration
+Spack uses `Github Actions <https://docs.github.com/en/actions>`_ for Continuous Integration
 testing. This means that every time you submit a pull request, a series of tests will
 be run to make sure you didn't accidentally introduce any bugs into Spack. **Your PR
 will not be accepted until it passes all of these tests.** While you can certainly wait
@@ -57,22 +57,21 @@ locally to speed up the review process.
 
 .. note::
 
-   Oftentimes, Travis will fail for reasons other than a problem with your PR.
+   Oftentimes, CI will fail for reasons other than a problem with your PR.
    For example, apt-get, pip, or homebrew will fail to download one of the
    dependencies for the test suite, or a transient bug will cause the unit tests
-   to timeout. If Travis fails, click the "Details" link and click on the test(s)
+   to timeout. If any job fails, click the "Details" link and click on the test(s)
    that is failing. If it doesn't look like it is failing for reasons related to
    your PR, you have two options. If you have write permissions for the Spack
-   repository, you should see a "Restart job" button on the right-hand side. If
+   repository, you should see a "Restart workflow" button on the right-hand side. If
    not, you can close and reopen your PR to rerun all of the tests. If the same
    test keeps failing, there may be a problem with your PR. If you notice that
-   every recent PR is failing with the same error message, it may be that Travis
-   is down or one of Spack's dependencies put out a new release that is causing
-   problems. If this is the case, please file an issue.
+   every recent PR is failing with the same error message, it may be that an issue
+   occurred with the CI infrastructure or one of Spack's dependencies put out a
+   new release that is causing problems. If this is the case, please file an issue.
 
 
-If you take a look in ``$SPACK_ROOT/.travis.yml``, you'll notice that we test
-against Python 2.6, 2.7, and 3.4-3.7 on both macOS and Linux. We currently
+We currently test against Python 2.6, 2.7, and 3.5-3.7 on both macOS and Linux and
 perform 3 types of tests:
 
 .. _cmd-spack-test:
@@ -106,7 +105,7 @@ time.  For example, this would run all the tests in
 
 .. code-block:: console
 
-   $ spack test architecture.py
+   $ spack test lib/spack/spack/test/architecture.py
 
 And this would run the ``test_platform`` test from that file:
 
@@ -116,7 +115,7 @@ And this would run the ``test_platform`` test from that file:
 
 This allows you to develop iteratively: make a change, test that change,
 make another change, test that change, etc.  We use `pytest
-<http://pytest.org/>`_ as our tests fromework, and these types of
+<http://pytest.org/>`_ as our tests framework, and these types of
 arguments are just passed to the ``pytest`` command underneath. See `the
 pytest docs
 <http://doc.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests>`_
@@ -144,7 +143,7 @@ You can combine these with ``pytest`` arguments to restrict which tests
 you want to know about.  For example, to see just the tests in
 ``architecture.py``:
 
-.. command-output:: spack test --list-long architecture.py
+.. command-output:: spack test --list-long lib/spack/spack/test/architecture.py
 
 You can also combine any of these options with a ``pytest`` keyword
 search.  For example, to see the names of all tests that have "spec"
@@ -160,7 +159,7 @@ argument to ``pytest``:
 
 .. code-block:: console
 
-   $ spack test -s architecture.py::test_platform
+   $ spack test -s spack test --list-long lib/spack/spack/test/architecture.py::test_platform
 
 Unit tests are crucial to making sure bugs aren't introduced into
 Spack. If you are modifying core Spack libraries or adding new
@@ -173,7 +172,7 @@ how to write tests!
 .. note::
 
    You may notice the ``share/spack/qa/run-unit-tests`` script in the
-   repository.  This script is designed for Travis CI.  It runs the unit
+   repository.  This script is designed for CI.  It runs the unit
    tests and reports coverage statistics back to Codecov. If you want to
    run the unit tests yourself, we suggest you use ``spack test``.
 
@@ -246,7 +245,7 @@ to update them.
 
    Try fixing flake8 errors in reverse order. This eliminates the need for
    multiple runs of ``spack flake8`` just to re-compute line numbers and
-   makes it much easier to fix errors directly off of the Travis output.
+   makes it much easier to fix errors directly off of the CI output.
 
 .. warning::
 
@@ -338,7 +337,7 @@ your PR is accepted.
    There is also a ``run-doc-tests`` script in ``share/spack/qa``. The only
    difference between running this script and running ``make`` by hand is that
    the script will exit immediately if it encounters an error or warning. This
-   is necessary for Travis CI. If you made a lot of documentation changes, it is
+   is necessary for CI. If you made a lot of documentation changes, it is
    much quicker to run ``make`` by hand so that you can see all of the warnings
    at once.
 
@@ -402,7 +401,7 @@ and allow you to see coverage line-by-line when viewing the Spack repository.
 If you are new to Spack, a great way to get started is to write unit tests to
 increase coverage!
 
-Unlike with Travis, Codecov tests are not required to pass in order for your
+Unlike with CI on Github Actions Codecov tests are not required to pass in order for your
 PR to be merged. If you modify core Spack libraries, we would greatly
 appreciate unit tests that cover these changed lines. Otherwise, we have no
 way of knowing whether or not your changes introduce a bug. If you make
diff --git a/lib/spack/spack/test/cmd/url.py b/lib/spack/spack/test/cmd/url.py
index 54ef3d55cf..2350fc5fdb 100644
--- a/lib/spack/spack/test/cmd/url.py
+++ b/lib/spack/spack/test/cmd/url.py
@@ -2,8 +2,9 @@
 # Spack Project Developers. See the top-level COPYRIGHT file for details.
 #
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
 import re
+import sys
+
 import pytest
 
 import spack.repo
@@ -12,6 +13,7 @@
 from spack.cmd.url import name_parsed_correctly, version_parsed_correctly
 from spack.cmd.url import url_summary
 
+
 url = SpackCommand('url')
 
 
@@ -70,6 +72,11 @@ def test_url_with_no_version_fails():
 
 
 @pytest.mark.network
+@pytest.mark.skipif(
+    sys.version_info < (2, 7),
+    reason="Python 2.6 tests are run in a container, where "
+           "networking is super slow"
+)
 def test_url_list():
     out = url('list')
     total_urls = len(out.split('\n'))
@@ -100,6 +107,11 @@ def test_url_list():
 
 
 @pytest.mark.network
+@pytest.mark.skipif(
+    sys.version_info < (2, 7),
+    reason="Python 2.6 tests are run in a container, where "
+           "networking is super slow"
+)
 def test_url_summary():
     """Test the URL summary command."""
     # test url_summary, the internal function that does the work
@@ -126,6 +138,11 @@ def test_url_summary():
     assert out_correct_versions == correct_versions
 
 
+@pytest.mark.skipif(
+    sys.version_info < (2, 7),
+    reason="Python 2.6 tests are run in a container, where "
+           "networking is super slow"
+)
 def test_url_stats(capfd):
     with capfd.disabled():
         output = url('stats')
diff --git a/lib/spack/spack/test/llnl/util/tty/log.py b/lib/spack/spack/test/llnl/util/tty/log.py
index 97950e8324..39e65f0388 100644
--- a/lib/spack/spack/test/llnl/util/tty/log.py
+++ b/lib/spack/spack/test/llnl/util/tty/log.py
@@ -389,6 +389,10 @@ def mock_shell_v_v_no_termios(proc, ctl, **kwargs):
     (mock_shell_v_v, nullcontext),
     (mock_shell_v_v_no_termios, no_termios),
 ])
+@pytest.mark.skipif(
+    sys.version_info < (2, 7),
+    reason="Python 2.6 tests are run in a container, where this fails often"
+)
 def test_foreground_background_output(
         test_fn, capfd, termios_on_or_off, tmpdir):
     """Tests hitting 'v' toggles output, and that force_echo works."""
diff --git a/share/spack/qa/install_patchelf.sh b/share/spack/qa/install_patchelf.sh
deleted file mode 100755
index 7660ba8eef..0000000000
--- a/share/spack/qa/install_patchelf.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
-# Spack Project Developers. See the top-level COPYRIGHT file for details.
-#
-# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
-#
-# Description:
-#     Install patchelf for use in buildcache unit tests
-#
-# Usage:
-#     install-patchelf.sh
-#
-set -ex
-if [ "$TRAVIS_OS_NAME" = "linux" ]; then
-    olddir=$PWD
-    cd /tmp
-    wget https://github.com/NixOS/patchelf/archive/0.10.tar.gz
-    tar -xvf 0.10.tar.gz
-    cd patchelf-0.10 && ./bootstrap.sh && ./configure --prefix=/usr && make && sudo make install && cd $olddir
-fi
-- 
GitLab