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}/*"
