diff --git a/.travis.yaml b/.travis.yaml
new file mode 100644
index 00000000..dcc806b1
--- /dev/null
+++ b/.travis.yaml
@@ -0,0 +1,11 @@
+language: "python"
+python: "3.6"
+addons:
+ apt:
+ sources:
+ - debian-sid
+ packages:
+ - shellcheck
+install: "pip install flake8"
+script: "test/static_code_analysis.sh"
+
diff --git a/pmb/chroot/apk_static.py b/pmb/chroot/apk_static.py
index d9b052e7..9fc99a0e 100644
--- a/pmb/chroot/apk_static.py
+++ b/pmb/chroot/apk_static.py
@@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
-import urllib.request
import os
import logging
import shutil
@@ -158,7 +157,6 @@ def init(args):
"""
Download, verify, extract $WORK/apk.static.
"""
- base_url = args.mirror_alpine + "edge/main/" + args.arch_native
apkindex = download(args, "APKINDEX.tar.gz")
index_data = pmb.parse.apkindex.read(args, "apk-tools-static", apkindex)
version = index_data["version"]
diff --git a/pmb/helpers/file.py b/pmb/helpers/file.py
index e49ab0e9..5f1c8221 100644
--- a/pmb/helpers/file.py
+++ b/pmb/helpers/file.py
@@ -16,6 +16,8 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
+
+
def replace(path, old, new):
text = ""
with open(path, 'r') as handle:
diff --git a/test/static_code_analysis.sh b/test/static_code_analysis.sh
new file mode 100755
index 00000000..dbc42c04
--- /dev/null
+++ b/test/static_code_analysis.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Copyright 2017 Oliver Smith
+#
+# This file is part of pmbootstrap.
+#
+# pmbootstrap is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# pmbootstrap is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with pmbootstrap. If not, see .
+
+set -e
+DIR="$(cd "$(dirname "$0")" && pwd -P)"
+cd "$DIR"/..
+
+# Shell: shellcheck
+sh_files="test/static_code_analysis.sh"
+echo "Test $sh_files with shellcheck..."
+for file in ${sh_files}; do
+ shellcheck "${file}"
+done
+
+# Python: flake8
+# E501: max line length
+# F401: imported, but not used, does not make sense in __init__ files
+# E402: module import not on top of file, not possible for testcases
+echo "Test *.py files with flake8..."
+echo "NOTE: Run 'autopep8 -ria $PWD' to fix code style issues"
+py_files="$(find . -name '*.py')"
+_ignores="E501,E402"
+# shellcheck disable=SC2086
+flake8 --exclude=__init__.py --ignore "$_ignores" $py_files
+# shellcheck disable=SC2086
+flake8 --filename=__init__.py --ignore "F401,$_ignores" $py_files
+
+# Done
+echo "Success!"
+
diff --git a/test/test_apk_static.py b/test/test_apk_static.py
index a3ea8300..7abc52f3 100644
--- a/test/test_apk_static.py
+++ b/test/test_apk_static.py
@@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
-#!/usr/bin/env python3
import os
import sys
import tarfile
diff --git a/test/test_aportgen.py b/test/test_aportgen.py
index c702f840..545b91aa 100644
--- a/test/test_aportgen.py
+++ b/test/test_aportgen.py
@@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
-#!/usr/bin/env python3
import os
import sys
import pytest
diff --git a/test/test_build.py b/test/test_build.py
index 3a22c7d8..f6a111a1 100644
--- a/test/test_build.py
+++ b/test/test_build.py
@@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
-#!/usr/bin/env python3
import os
import sys
import pytest
diff --git a/test/test_keys.py b/test/test_keys.py
index 6d8a3525..d3075314 100644
--- a/test/test_keys.py
+++ b/test/test_keys.py
@@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
-#!/usr/bin/env python3
import os
import sys
import pytest
diff --git a/test/test_shell_escape.py b/test/test_shell_escape.py
index aa72c257..5c5a454a 100644
--- a/test/test_shell_escape.py
+++ b/test/test_shell_escape.py
@@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
-#!/usr/bin/env python3
import os
import sys
import pytest
diff --git a/test/test_version.py b/test/test_version.py
index c9489058..068dec61 100644
--- a/test/test_version.py
+++ b/test/test_version.py
@@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see .
"""
-#!/usr/bin/env python3
import os
import sys
import pytest