From dc6f2e4fd6226b7609c70900ffccc5d0706969e9 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Mon, 19 Aug 2019 13:24:51 +0200 Subject: [PATCH 1/2] Added script to check if a given version is the latest --- docs/get-releases-json.py | 2 ++ scripts/is-docker-latest.py | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) mode change 100644 => 100755 docs/get-releases-json.py create mode 100755 scripts/is-docker-latest.py diff --git a/docs/get-releases-json.py b/docs/get-releases-json.py old mode 100644 new mode 100755 index 6cd0f472b..72823da73 --- a/docs/get-releases-json.py +++ b/docs/get-releases-json.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import json import subprocess diff --git a/scripts/is-docker-latest.py b/scripts/is-docker-latest.py new file mode 100755 index 000000000..2e3854989 --- /dev/null +++ b/scripts/is-docker-latest.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import argparse +import json +import sys +from distutils.version import StrictVersion + + +def main(current, releases_json): + try: + version = StrictVersion(current) + except ValueError: + print("Version number '{}' isn't valid".format(current)) + sys.exit(1) + + releases = json.loads(releases_json) + latest_release = releases["releases"][0]["id"] + + if version != latest_release: + print( + "Version number '{}' doesn't match latest release {}".format( + current, latest_release + ) + ) + sys.exit(1) + print("Version number '{}' is latest release!".format(current)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=""" + Exit with code 0 if the given version matches the latest one + fron the list of releases found in releases_json. Primary use + is to check whether the current version can be safely pushed + as the latest one on the docker Hub. + """ + ) + parser.add_argument("current", help="Current version") + parser.add_argument("releases_json", type=argparse.FileType("r")) + args = parser.parse_args() + main(args.current, args.releases_json.read()) From b3b6dff3ae423473fd0a478b7b1ee57ec1cfc3bd Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Mon, 19 Aug 2019 14:19:41 +0200 Subject: [PATCH 2/2] Updated CI configuration to push latest tags on Docker hub --- .gitlab-ci.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 282757b4f..de3ea1e8d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,10 @@ variables: IMAGE_NAME: funkwhale/funkwhale IMAGE: $IMAGE_NAME:$CI_COMMIT_REF_NAME + IMAGE_LATEST: $IMAGE_NAME:latest ALL_IN_ONE_IMAGE_NAME: funkwhale/all-in-one ALL_IN_ONE_IMAGE: $ALL_IN_ONE_IMAGE_NAME:$CI_COMMIT_REF_NAME + ALL_IN_ONE_IMAGE_LATEST: $ALL_IN_ONE_IMAGE_NAME:latest PIP_CACHE_DIR: "$CI_PROJECT_DIR/pip-cache" PYTHONDONTWRITEBYTECODE: "true" REVIEW_DOMAIN: preview.funkwhale.audio @@ -236,10 +238,12 @@ docker_release: - docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD - cp -r front/dist api/frontend - (if [ "$CI_COMMIT_REF_NAME" == "develop" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi); - - cd api script: - - docker build -t $IMAGE . + - if [[ ! -z "$CI_COMMIT_TAG" ]]; then (./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG -) && export DOCKER_LATEST_TAG="-t $IMAGE_LATEST" || export DOCKER_LATEST_TAG=; fi + - cd api + - docker build -t $IMAGE $DOCKER_LATEST_TAG . - docker push $IMAGE + - if [[ ! -z "$DOCKER_LATEST_TAG" ]]; then docker push $IMAGE_LATEST; fi only: - develop@funkwhale/funkwhale - tags@funkwhale/funkwhale @@ -257,6 +261,7 @@ docker_all_in_one_release: - docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD - (if [ "$CI_COMMIT_REF_NAME" == "develop" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi); script: + - if [[ ! -z "$CI_COMMIT_TAG" ]]; then (./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG -) && export DOCKER_LATEST_TAG="-t $ALL_IN_ONE_IMAGE_LATEST" || export DOCKER_LATEST_TAG=; fi - wget $ALL_IN_ONE_ARTIFACT_URL -O all_in_one.zip - unzip -o all_in_one.zip -d tmpdir - mv tmpdir/docker-funkwhale-$ALL_IN_ONE_REF $BUILD_PATH && rmdir tmpdir @@ -264,8 +269,9 @@ docker_all_in_one_release: - cp -r front $BUILD_PATH/src/front - cd $BUILD_PATH - ./scripts/download-nginx-template.sh src/ $CI_COMMIT_REF_NAME - - docker build -t $ALL_IN_ONE_IMAGE . + - docker build -t $ALL_IN_ONE_IMAGE $DOCKER_LATEST_TAG . - docker push $ALL_IN_ONE_IMAGE + - if [[ ! -z "$DOCKER_LATEST_TAG" ]]; then docker push $ALL_IN_ONE_IMAGE_LATEST; fi only: - develop@funkwhale/funkwhale - tags@funkwhale/funkwhale