travis: add imgtool publishing
Add new CI vm that parses the imgtool version from __init__.py and
compares with the current published release. If the version in the repo
is newer it will be published automatically.
Signed-off-by: Fabio Utzig <utzig@apache.org>
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}/*"