Repository: textX/textX (language: python)

Issue:
Moving away from Travis CI
I've been experiencing an enormous slowdown on our Travis CI tests in the last few months, to the point that it becomes useless (being queued for 5 hours just to run a set of tests that locally run in a few seconds is no fun).

Furthermore, [Travis CI is changing the pricing model](https://news.ycombinator.com/item?id=24964601) which makes their support for FLOSS projects questionable.

There are other alternatives which we could consider, for example [GitHub Actions](https://github.com/features/actions) or [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/).

[An interesting blog post on the subject](https://www.jeffgeerling.com/blog/2020/travis-cis-new-pricing-plan-threw-wrench-my-open-source-works)
Moving away from Travis CI
I've been experiencing an enormous slowdown on our Travis CI tests in the last few months, to the point that it becomes useless (being queued for 5 hours just to run a set of tests that locally run in a few seconds is no fun).

Furthermore, [Travis CI is changing the pricing model](https://news.ycombinator.com/item?id=24964601) which makes their support for FLOSS projects questionable.

There are other alternatives which we could consider, for example [GitHub Actions](https://github.com/features/actions) or [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/).

[An interesting blog post on the subject](https://www.jeffgeerling.com/blog/2020/travis-cis-new-pricing-plan-threw-wrench-my-open-source-works)


Discussion / hints:
I heard about github actions in podcasts.

Since the codebase is already at github, why not also build there... 

But I have no real preference. 
We have been using GitHub Actions for quite a while. I can recommend it.

1) https://github.com/strictdoc-project/strictdoc/tree/master/.github/workflows (Python)
2) https://github.com/mull-project/mull/tree/master/.github/workflows (C++, with Ansible for tasks)
I heard about github actions in podcasts.

Since the codebase is already at github, why not also build there... 

But I have no real preference. 
We have been using GitHub Actions for quite a while. I can recommend it.

1) https://github.com/strictdoc-project/strictdoc/tree/master/.github/workflows (Python)
2) https://github.com/mull-project/mull/tree/master/.github/workflows (C++, with Ansible for tasks)

Fix patch:
diff --git a/.github/workflows/ci-linux-ubuntu.yml b/.github/workflows/ci-linux-ubuntu.yml
new file mode 100644
index 000000000..1d277efa4
--- /dev/null
+++ b/.github/workflows/ci-linux-ubuntu.yml
@@ -0,0 +1,35 @@
+name: tests
+
+on: ["push", "pull_request"]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-18.04
+    strategy:
+      matrix:
+        python-version: [3.6, 3.7, 3.8, 3.9]
+
+    steps:
+    - uses: actions/checkout@v2
+    - name: Set up Python ${{ matrix.python-version }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+    - name: Install test dependencies
+      run: |
+        ./install-test.sh
+    - name: Install dev version of Arpeggio
+      run: |
+        cd ..
+        git clone --depth=1 --branch=master git://github.com/textX/Arpeggio.git
+        cd Arpeggio && python setup.py install
+        cd ../textX
+    - name: Run unit tests
+      run: |
+        ./runtests.sh
+    - name: Coveralls
+      env:
+        COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
+      run: |
+        coveralls
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 683428c53..bb1e145cf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -32,8 +32,11 @@ please take a look at related PRs and issues and see if the change affects you.
 
 ### Changed
 
-- Added `def_file_name` atribute to `RefRulePosition` for storing the definition's
+- Added `def_file_name` attribute to `RefRulePosition` for storing the definition's
   model file name in case of cross-references between models. ([#313],[#277])
+- Migrated from Travis CI to GitHub Actions ([#307])
+- Dropped support for deprecated Python versions. The lowest supported version
+  is 3.6. **(BIC)**
 
 
 ## [2.3.0] (released: 2020-11-01)
@@ -531,6 +534,7 @@ please take a look at related PRs and issues and see if the change affects you.
 [#277]: https://github.com/textX/textX/issues/277
 [#313]: https://github.com/textX/textX/pull/313
 [#311]: https://github.com/textX/textX/pull/311
+[#307]: https://github.com/textX/textX/issues/307
 [#306]: https://github.com/textX/textX/pull/306
 [#304]: https://github.com/textX/textX/pull/304
 [#301]: https://github.com/textX/textX/issues/301
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4ce9d0172..08494cf02 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -146,8 +146,8 @@ Before you submit a pull request, check that it meets these guidelines:
 
 1. The pull request should include tests.
 2. If the pull request adds/changes functionality, the docs should be updated. 
-3. The pull request should work for Python 2.7, 3.4-3.7. Check
-   https://travis-ci.org/textX/textX/pull_requests and make sure that
+3. The pull request should work for Python 3.6+. Check
+   https://github.com/textX/textX/actions and make sure that
    the tests pass for all supported Python versions.
 
 
diff --git a/README.md b/README.md
index 1a23df984..c97ca2967 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 [![PyPI Version](https://img.shields.io/pypi/v/textX.svg)](https://pypi.python.org/pypi/textX)
 ![](https://img.shields.io/pypi/l/textX.svg)
-[![Build status](https://travis-ci.org/textX/textX.svg?branch=master)](https://travis-ci.org/textX/textX)
+[![Build status](https://github.com/textx/textx/actions/workflows/ci-linux-ubuntu.yml/badge.svg)](https://github.com/textx/textx/actions)
 [![Code test coverage](https://coveralls.io/repos/github/textX/textX/badge.svg?branch=master)](https://coveralls.io/github/textX/textX?branch=master)
 [![Documentation Status](https://img.shields.io/badge/docs-latest-green.svg)](http://textx.github.io/textX/latest/)
 
@@ -194,7 +194,7 @@ MIT
 
 ## Python versions
 
-Tested for 2.7, 3.4+
+Tested for 3.6+
 
 
 [Arpeggio]: https://github.com/textX/Arpeggio
diff --git a/docs/index.md b/docs/index.md
index b540e4ea3..ff3d527fb 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -148,8 +148,7 @@ To install development (`master` branch) version:
 
 ## Python versions
 
-textX works with Python 2.7, 3.4+. Other versions might work but are not
-tested.
+textX works with Python 3.6+. Other versions might work but are not tested.
 
 ## Getting started
 
diff --git a/setup.cfg b/setup.cfg
index 1572013f8..6ffb55592 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -18,14 +18,11 @@ classifiers =
     Topic :: Software Development :: Libraries :: Python Modules
     License :: OSI Approved :: MIT License
     Operating System :: OS Independent
-    Programming Language :: Python :: 2
-    Programming Language :: Python :: 2.7
     Programming Language :: Python :: 3
-    Programming Language :: Python :: 3.4
-    Programming Language :: Python :: 3.5
     Programming Language :: Python :: 3.6
     Programming Language :: Python :: 3.7
     Programming Language :: Python :: 3.8
+    Programming Language :: Python :: 3.9
 
 [options]
 packages = textx, textx.scoping, textx.cli


Test patch:
diff --git a/tests/functional/subcommands/test_subcommands.py b/tests/functional/subcommands/test_subcommands.py
index 50941b0bd..c33babae8 100644
--- a/tests/functional/subcommands/test_subcommands.py
+++ b/tests/functional/subcommands/test_subcommands.py
@@ -1,12 +1,6 @@
-import sys
-import pytest
 import subprocess
 
 
-if (3, 6) <= sys.version_info < (3, 8):
-    pytest.skip("Temporary workaround for Travis problems", allow_module_level=True)
-
-
 def test_subcommand():
     """
     Test that a command from the example project is registered.