Browse Source

Add GitLab CI/CD support (#2163)

* Use GitLab CI/CD

* Force colored tests

* Get rid of an error

* Mark tests as slow

* Disable codecov & coveralls

* Python 3.5-3.8

* Add Python 3.4

* Support both OpenSSL 1.1.0 and 1.1.1+

* Test both OpenSSL 1.1.0 and 1.1.1+

* Fix OpenSSL 1.1.1

* Fix Python 3.4 build
Ivanq 4 years ago
parent
commit
01ff89315b

+ 1 - 0
.gitignore

@@ -9,6 +9,7 @@ __pycache__/
 .*
 !/.gitignore
 !/.travis.yml
+!/.gitlab-ci.yml
 
 # Temporary files
 *.bak

+ 48 - 0
.gitlab-ci.yml

@@ -0,0 +1,48 @@
+stages:
+  - test
+
+.test_template: &test_template
+  stage: test
+  before_script:
+    - pip install --upgrade pip wheel
+    # Selenium and requests can't be installed without a requests hint on Python 3.4
+    - pip install --upgrade requests>=2.22.0
+    - pip install --upgrade codecov coveralls flake8 mock pytest==4.6.3 pytest-cov selenium
+    - pip install --upgrade -r requirements.txt
+  script:
+    - pip list
+    - openssl version -a
+    - python -m pytest -x plugins/CryptMessage/Test --color=yes
+    - python -m pytest -x plugins/Bigfile/Test --color=yes
+    - python -m pytest -x plugins/AnnounceLocal/Test --color=yes
+    - python -m pytest -x plugins/OptionalManager/Test --color=yes
+    - python -m pytest src/Test --cov=src --cov-config src/Test/coverage.ini --color=yes
+    - mv plugins/disabled-Multiuser plugins/Multiuser
+    - python -m pytest -x plugins/Multiuser/Test --color=yes
+    - mv plugins/disabled-Bootstrapper plugins/Bootstrapper
+    - python -m pytest -x plugins/Bootstrapper/Test --color=yes
+    - flake8 . --count --select=E9,F63,F72,F82 --show-source --statistics --exclude=src/lib/pybitcointools/
+
+test:py3.4:
+  image: python:3.4.3
+  <<: *test_template
+
+test:py3.5:
+  image: python:3.5.7
+  <<: *test_template
+
+test:py3.6:
+  image: python:3.6.9
+  <<: *test_template
+
+test:py3.7-openssl1.1.0:
+  image: python:3.7.0b5
+  <<: *test_template
+
+test:py3.7-openssl1.1.1:
+  image: python:3.7.4
+  <<: *test_template
+
+test:py3.8:
+  image: python:3.8.0b3
+  <<: *test_template

+ 1 - 0
plugins/disabled-Bootstrapper/Test/pytest.ini

@@ -2,4 +2,5 @@
 python_files = Test*.py
 addopts = -rsxX -v --durations=6
 markers =
+    slow: mark a tests as slow.
     webtest: mark a test as a webtest.

+ 8 - 1
src/Crypt/CryptBitcoin.py

@@ -26,9 +26,16 @@ def loadLib(lib_name):
         import bitcoin.core.key
         import bitcoin.wallet
 
+        try:
+            # OpenSSL 1.1.0
+            ssl_version = bitcoin.core.key._ssl.SSLeay()
+        except AttributeError:
+            # OpenSSL 1.1.1+
+            ssl_version = bitcoin.core.key._ssl.OpenSSL_version_num()
+
         logging.info(
             "OpenSSL loaded: %s, version: %.9X in %.3fs" %
-            (bitcoin.core.key._ssl, bitcoin.core.key._ssl.SSLeay(), time.time() - s)
+            (bitcoin.core.key._ssl, ssl_version, time.time() - s)
         )
 
 

+ 8 - 7
src/Test/conftest.py

@@ -109,13 +109,14 @@ from Debug import Debug
 def cleanup():
     Db.dbCloseAll()
     for dir_path in [config.data_dir, config.data_dir + "-temp"]:
-        for file_name in os.listdir(dir_path):
-            ext = file_name.rsplit(".", 1)[-1]
-            if ext not in ["csr", "pem", "srl", "db", "json", "tmp"]:
-                continue
-            file_path = dir_path + "/" + file_name
-            if os.path.isfile(file_path):
-                os.unlink(file_path)
+        if os.path.isdir(dir_path):
+            for file_name in os.listdir(dir_path):
+                ext = file_name.rsplit(".", 1)[-1]
+                if ext not in ["csr", "pem", "srl", "db", "json", "tmp"]:
+                    continue
+                file_path = dir_path + "/" + file_name
+                if os.path.isfile(file_path):
+                    os.unlink(file_path)
 
 atexit.register(cleanup)
 

+ 1 - 0
src/Test/pytest.ini

@@ -2,4 +2,5 @@
 python_files = Test*.py
 addopts = -rsxX -v --durations=6
 markers =
+    slow: mark a tests as slow.
     webtest: mark a test as a webtest.