Commit 14301abb authored by Fabio Utzig's avatar Fabio Utzig Committed by David Brown
Browse files

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: default avatarFabio Utzig <utzig@apache.org>
parent 342e875d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -50,6 +50,10 @@ matrix:
      go:
        - "1.12"

    - os: linux
      language: python
      env: TEST=imgtool

before_install:
  - |
    if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then

ci/compare_versions.py

0 → 100755
+49 −0
Original line number Diff line number Diff line
#!/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)

ci/imgtool_install.sh

0 → 100755
+21 −0
Original line number Diff line number Diff line
#!/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

ci/imgtool_run.sh

0 → 100755
+51 −0
Original line number Diff line number Diff line
#!/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}/*"