diff --git a/.travis.yml b/.travis.yml
index e9dee03..41812da 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -50,6 +50,10 @@
       go:
         - "1.12"
 
+    - os: linux
+      language: python
+      env: TEST=imgtool
+
 before_install:
   - |
     if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
diff --git a/ci/compare_versions.py b/ci/compare_versions.py
new file mode 100755
index 0000000..18a92e2
--- /dev/null
+++ b/ci/compare_versions.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from packaging.version import parse, LegacyVersion
+import argparse
+import sys
+
+# exit with 0 if --new is equal to --old
+# exit with 1 on errors
+# exit with 2 if --new is newer than --old
+# exit with 3 if --new is older than --old
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--old', help='Version currently in use')
+parser.add_argument('--new', help='New version to publish')
+
+args = parser.parse_args()
+if args.old is None or args.new is None:
+    parser.print_help()
+    exit(1)
+
+old, new = parse(args.old), parse(args.new)
+
+# only accept versions that were correctly parsed
+for version in [old, new]:
+    if isinstance(version, LegacyVersion):
+        print("Invalid version parsed: {}".format(version))
+        sys.exit(1)
+
+if new == old:
+    print("No version change")
+    sys.exit(0)
+elif new > old:
+    print("Upgrade detected ({} > {})".format(new, old))
+    sys.exit(2)
+
+print("Downgrade detected ({} < {})".format(new, old))
+sys.exit(3)
diff --git a/ci/imgtool_install.sh b/ci/imgtool_install.sh
new file mode 100755
index 0000000..69b60f0
--- /dev/null
+++ b/ci/imgtool_install.sh
@@ -0,0 +1,21 @@
+#!/bin/bash -x
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [[ $TRAVIS_PULL_REQUEST != "false" || $TRAVIS_BRANCH != "master" ]]; then
+    echo "Either a PR or not \"master\" branch, exiting"
+    exit 0
+fi
+
+pip3 install setuptools twine
+pip3 install --pre imgtool
diff --git a/ci/imgtool_run.sh b/ci/imgtool_run.sh
new file mode 100755
index 0000000..1cf042d
--- /dev/null
+++ b/ci/imgtool_run.sh
@@ -0,0 +1,51 @@
+#!/bin/bash -x
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [[ $TRAVIS_PULL_REQUEST != "false" || $TRAVIS_BRANCH != "master" ]]; then
+    echo "Either a PR or not \"master\" branch, exiting"
+    exit 0
+fi
+
+IMGTOOL_VER_PREFIX="\+imgtool_version = "
+IMGTOOL_VER_FILE="imgtool/__init__.py"
+DIST_DIR="dist"
+
+if [[ -z "$TWINE_TOKEN" ]]; then
+    echo "\$TWINE_TOKEN must be set in travis settings"
+    exit 0
+fi
+
+cd scripts/
+
+last_release=$(pip show imgtool | grep "Version: " | cut -d" " -f2)
+repo_version=$(grep "imgtool_version = " imgtool/__init__.py | sed 's/^.* = "\(.*\)"/\1/g')
+
+python3 ../ci/compare_versions.py --old $last_release --new $repo_version
+rc=$?
+
+if [[ $rc -eq 0 ]]; then
+    echo "Imgtool version not changed; will not publish"
+    exit 0
+elif [[ $rc -eq 1 ]]; then
+    echo "Error parsing versions"
+    exit 1
+elif [[ $rc -eq 3 ]]; then
+    echo "Imgtool downgrade detected!"
+    exit 1
+fi
+
+rm -rf $DIST_DIR
+python setup.py sdist bdist_wheel
+
+twine upload --username __token__ --password "${TWINE_TOKEN}" "${DIST_DIR}/*"
