diff --git a/.travis.yml b/.travis.yml index 43e714319d..c61016f081 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,10 @@ env: - CACHE_ROOT_DIR=$HOME/cache - BUILD_TOOLS_PATH=$CACHE_ROOT_DIR/build_tools - GLIDE_HOME=$HOME/glide-home - - COMMIT=$TRAVIS_COMMIT - - BRANCH=$TRAVIS_BRANCH + - BUILD_COMMIT=$TRAVIS_COMMIT + - BUILD_BRANCH=$TRAVIS_BRANCH - BUILD_NUMBER=$TRAVIS_BUILD_NUMBER - - VERSION=$TRAVIS_TAG + - BUILD_VERSION_MAJOR=0 cache: directories: @@ -21,26 +21,27 @@ cache: install: - source bin/travis_scripts/setup_tools_dir.sh $BUILD_TOOLS_PATH - source bin/travis_scripts/ensure_glide.sh $BUILD_TOOLS_PATH "v0.13.1" + - bin/travis_scripts/ensure_xgo.sh - glide "-home" $GLIDE_HOME install script: + - BUILD_VERSION=${TRAVIS_TAG:="$BUILD_VERSION_MAJOR-dev.$TRAVIS_BUILD_NUMBER"} - bin/check_vet # This check requires development dependency - bin/builder_run bin/check_lint - bin/check_fmt - bin/check_license - bin/test - # Run e2e tests on Pull Requests only + # Run e2e tests (on Pull Requests only) - if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then bin/travis_scripts/check_docker.sh; bin/travis_scripts/check_docker_compose.sh; bin/test_e2e; fi + - bin/package_all $BUILD_VERSION -before_deploy: - - bin/travis_scripts/ensure_xgo.sh - - bin/package_all $VERSION deploy: + # Development bleeding-edge release (on master commits only) - provider: pages local-dir: build/package skip-cleanup: true @@ -51,6 +52,12 @@ deploy: on: tags: false branch: master + - provider: script + script: bin/release_docker dev + on: + tags: false + branch: master + # Official release (on tags only) - provider: releases file_glob: true file: build/package/* @@ -59,7 +66,7 @@ deploy: on: tags: true - provider: script - script: bin/release_docker $VERSION + script: bin/release_docker $TRAVIS_TAG latest on: tags: true notifications: diff --git a/bin/client_package_docker b/bin/client_package_docker index f5f362c0c8..2415659c77 100755 --- a/bin/client_package_docker +++ b/bin/client_package_docker @@ -8,14 +8,13 @@ set -e -DOCKER_IMAGE="mysteriumnetwork/mysterium-client" -DOCKER_BUILD_TAG="alpine" +source bin/helpers/output.sh printf "Building Alpine image..\n" docker build \ --file bin/client_docker/alpine/Dockerfile \ - --tag ${DOCKER_IMAGE}:${DOCKER_BUILD_TAG} \ + --tag mysterium-client:alpine \ . -printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!" +print_success "Docker image building process complete!" exit 0 diff --git a/bin/client_package_docker_ubuntu b/bin/client_package_docker_ubuntu index 63ebef424b..fa2fc14c00 100755 --- a/bin/client_package_docker_ubuntu +++ b/bin/client_package_docker_ubuntu @@ -11,21 +11,20 @@ set -e +source bin/helpers/output.sh + VERSION=$1 if [ -z "$VERSION" ]; then - printf "\e[0;31m%s\e[0m\n" "Missing version!" + print_error "Missing version!" exit 1 fi -DOCKER_IMAGE="mysteriumnetwork/mysterium-client" -DOCKER_BUILD_TAG="ubuntu" - -printf "Building Ubuntu image..\n" \ +printf "Building Ubuntu image..\n" docker build \ --file bin/client_docker/ubuntu/Dockerfile \ --build-arg PACKAGE_VERSION=${VERSION} \ - --tag ${DOCKER_IMAGE}:${DOCKER_BUILD_TAG} \ + --tag mysterium-client:ubuntu \ . -printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!" +print_success "Docker image building process complete!" exit 0 diff --git a/bin/client_package_standalone b/bin/client_package_standalone index 9e44bd47ef..b6ba97bf72 100755 --- a/bin/client_package_standalone +++ b/bin/client_package_standalone @@ -37,7 +37,7 @@ if [ "$OS" == "windows" ]; then PACKAGE_FILE="${DIR_BUILD}/`basename -s .exe ${BINARY}`.zip" (cd ${DIR_TEMP} && zip -r - .) > ${PACKAGE_FILE} else - PACKAGE_FILE="${DIR_BUILD}/`basename -s .exe ${BINARY}`.tar.gz" + PACKAGE_FILE="${DIR_BUILD}/`basename ${BINARY}`.tar.gz" tar -zcv -f ${PACKAGE_FILE} -C ${DIR_TEMP} . fi rm -rf ${DIR_TEMP} diff --git a/bin/helpers/docker.sh b/bin/helpers/docker.sh index 1f221509c6..ca43eda3c8 100644 --- a/bin/helpers/docker.sh +++ b/bin/helpers/docker.sh @@ -3,22 +3,15 @@ # Uploads already created Docker image to Docker Hub # # Usage: -# > docker_release_image <version> [tag..] +# > docker_release_image <image-local> <image-release> # -# Uploads specific version: -# > docker_release_image mysteriumnetwork/mysterium-node alpine 0.0.1 -# -# Uploads several versions -# > docker_release_image mysteriumnetwork/mysterium-node ubuntu ${VERSION}-ubuntu ubuntu +# Uploads specific tag: +# > docker_release_image mysterium-node:alpine mysteriumnetwork/mysterium-node:0.0.1 docker_release_image () { - DOCKER_IMAGE=$1; shift; - DOCKER_BUILD_TAG=$2; shift; - - while test $# -gt 0; do - DOCKER_TAG=$1; shift; + IMAGE_LOCAL=$1; + IMAGE_RELEASE=$2; - printf "Publishing '${DOCKER_TAG}' image..\n" - docker tag ${DOCKER_IMAGE}:${DOCKER_BUILD_TAG} ${DOCKER_IMAGE}:${DOCKER_TAG} - docker push ${DOCKER_IMAGE}:${DOCKER_TAG} - done + printf "Publishing '${IMAGE_RELEASE}' image..\n" + docker tag ${IMAGE_LOCAL} ${IMAGE_RELEASE} + docker push ${IMAGE_RELEASE} } diff --git a/bin/helpers/functions.sh b/bin/helpers/functions.sh index 3a6c4aa5be..3ebb927df6 100644 --- a/bin/helpers/functions.sh +++ b/bin/helpers/functions.sh @@ -2,8 +2,8 @@ # Map environment variables to flags for Golang linker's -ldflags usage function get_linker_ldflags { - [ -n "$BRANCH" ] && echo -n "-X 'github.com/mysterium/node/metadata.BuildBranch=${BRANCH}' " - [ -n "$COMMIT" ] && echo -n "-X 'github.com/mysterium/node/metadata.BuildCommit=${COMMIT}' " + [ -n "$BUILD_BRANCH" ] && echo -n "-X 'github.com/mysterium/node/metadata.BuildBranch=${BUILD_BRANCH}' " + [ -n "$BUILD_COMMIT" ] && echo -n "-X 'github.com/mysterium/node/metadata.BuildCommit=${BUILD_COMMIT}' " [ -n "$BUILD_NUMBER" ] && echo -n "-X 'github.com/mysterium/node/metadata.BuildNumber=${BUILD_NUMBER}' " - + [ -n "$BUILD_VERSION" ] && echo -n "-X 'github.com/mysterium/node/metadata.Version=${BUILD_VERSION}' " } diff --git a/bin/package_all b/bin/package_all index 7e743eb9da..84c3ce7086 100755 --- a/bin/package_all +++ b/bin/package_all @@ -21,20 +21,20 @@ fi DIR_BUILD="build/package" -printf "Creating build directory '$DIR_BUILD' ..\n" +printf "Building version '$VERSION' packages to directory '$DIR_BUILD' ..\n" rm -rf ${DIR_BUILD} mkdir -p ${DIR_BUILD} bin/server_build_xgo darwin/amd64 windows/amd64 linux/amd64 bin/client_build_xgo darwin/amd64 windows/amd64 linux/amd64 -BINARY=build/server/mysterium_server_darwin_amd64 bin/server_package_standalone -BINARY=build/server/mysterium_server_windows_amd64.exe bin/server_package_standalone -BINARY=build/server/mysterium_server_linux_amd64 bin/server_package_standalone +BINARY=build/server/mysterium_server_darwin_amd64 bin/server_package_standalone darwin +BINARY=build/server/mysterium_server_windows_amd64.exe bin/server_package_standalone windows +BINARY=build/server/mysterium_server_linux_amd64 bin/server_package_standalone linux -BINARY=build/client/mysterium_client_darwin_amd64 bin/client_package_standalone -BINARY=build/client/mysterium_client_windows_amd64.exe bin/client_package_standalone -BINARY=build/client/mysterium_client_linux_amd64 bin/client_package_standalone +BINARY=build/client/mysterium_client_darwin_amd64 bin/client_package_standalone darwin +BINARY=build/client/mysterium_client_windows_amd64.exe bin/client_package_standalone windows +BINARY=build/client/mysterium_client_linux_amd64 bin/client_package_standalone linux bin/builder_run BINARY=build/server/mysterium_server_linux_amd64 bin/server_package_debian ${VERSION} amd64 bin/builder_run BINARY=build/client/mysterium_client_linux_amd64 bin/client_package_debian ${VERSION} amd64 diff --git a/bin/release_docker b/bin/release_docker index 56da74ae9c..5e5176a864 100755 --- a/bin/release_docker +++ b/bin/release_docker @@ -1,38 +1,46 @@ #!/bin/bash ########################################################################### -# Release creates all supported Docker images and uploads them to Docker Hub +# Uploads all created Docker images to Docker Hub # - https://hub.docker.com/r/mysteriumnetwork/mysterium-node/ # - https://hub.docker.com/r/mysteriumnetwork/mysterium-client/ # # Usage: -#> bin/release_docker <version> +#> bin/release_docker <version>.. # -# Release specific version with personal Docker Hub account: -#> docker login john.developer **** +# Release image (specific version): #> bin/release_docker 0.0.1 # -# Tag several versions at the same time -#> bin/release_docker 0.0.1 0.0.1-alpine alpine latest +# Release image (several versions): +#> bin/release_docker 0.0.1 latest +# +# Create image (with personal Docker Hub account): +#> DOCKER_USERNAME=john.developer DOCKER_PASSWORD=**** bin/release_docker 0.0.1 set -e source bin/helpers/output.sh source bin/helpers/docker.sh -VERSION=$1 -if [ -z "$VERSION" ]; then +if [ -z "$1" ]; then print_error "Missing version!" exit 1 fi echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin -docker_release_image mysteriumnetwork/mysterium-node alpine ${VERSION} ${VERSION}-alpine alpine latest -docker_release_image mysteriumnetwork/mysterium-node ubuntu ${VERSION} ${VERSION}-ubuntu ubuntu +while test $# -gt 0; do + VERSION_TAG=$1; shift; + printf "Creating Docker Hub release '$VERSION_TAG' ..\n" \ + + docker_release_image mysterium-node:alpine mysteriumnetwork/mysterium-node:${VERSION_TAG} + docker_release_image mysterium-node:alpine mysteriumnetwork/mysterium-node:${VERSION_TAG}-alpine + docker_release_image mysterium-node:ubuntu mysteriumnetwork/mysterium-node:${VERSION_TAG}-ubuntu -docker_release_image mysteriumnetwork/mysterium-client alpine ${VERSION} ${VERSION}-alpine alpine latest -docker_release_image mysteriumnetwork/mysterium-client ubuntu ${VERSION}-ubuntu ubuntu + docker_release_image mysterium-client:alpine mysteriumnetwork/mysterium-client:${VERSION_TAG} + docker_release_image mysterium-client:alpine mysteriumnetwork/mysterium-client:${VERSION_TAG}-alpine + docker_release_image mysterium-client:ubuntu mysteriumnetwork/mysterium-client:${VERSION_TAG}-ubuntu +done -print_success "Docker Hub release '$VERSION' created!" +print_success "Docker Hub releases created!" exit 0 diff --git a/bin/server_package_docker b/bin/server_package_docker index 6f9e1b88fc..8f04285cce 100755 --- a/bin/server_package_docker +++ b/bin/server_package_docker @@ -8,14 +8,13 @@ set -e -DOCKER_IMAGE="mysteriumnetwork/mysterium-node" -DOCKER_BUILD_TAG="alpine" +source bin/helpers/output.sh -printf "Building Alpine image..\n" \ +printf "Building Alpine image..\n" docker build \ --file bin/server_docker/alpine/Dockerfile \ - --tag ${DOCKER_IMAGE}:${DOCKER_BUILD_TAG} \ + --tag mysterium-node:alpine \ . -printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!" +print_success "Docker image building process complete!" exit 0 diff --git a/bin/server_package_docker_ubuntu b/bin/server_package_docker_ubuntu index 1dc3397181..84eea7669a 100755 --- a/bin/server_package_docker_ubuntu +++ b/bin/server_package_docker_ubuntu @@ -11,21 +11,20 @@ set -e +source bin/helpers/output.sh + VERSION=$1 if [ -z "$VERSION" ]; then - printf "\e[0;31m%s\e[0m\n" "Missing version!" + print_error "Missing version!" exit 1 fi -DOCKER_IMAGE="mysteriumnetwork/mysterium-node" -DOCKER_BUILD_TAG="ubuntu" - -printf "Building Ubuntu image..\n" \ +printf "Building Ubuntu image..\n" docker build \ --file bin/server_docker/ubuntu/Dockerfile \ --build-arg PACKAGE_VERSION=${VERSION} \ - --tag ${DOCKER_IMAGE}:${DOCKER_BUILD_TAG} \ + --tag mysterium-node:ubuntu \ . -printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!" +print_success "Docker image building process complete!" exit 0 diff --git a/bin/server_package_standalone b/bin/server_package_standalone index 5a5b5ba448..06c0311453 100755 --- a/bin/server_package_standalone +++ b/bin/server_package_standalone @@ -37,7 +37,7 @@ if [ "$OS" == "windows" ]; then PACKAGE_FILE="${DIR_BUILD}/`basename -s .exe ${BINARY}`.zip" (cd ${DIR_TEMP} && zip -r - .) > ${PACKAGE_FILE} else - PACKAGE_FILE="${DIR_BUILD}/`basename -s ${BINARY}`.tar.gz" + PACKAGE_FILE="${DIR_BUILD}/`basename ${BINARY}`.tar.gz" tar -zcv -f ${PACKAGE_FILE} -C ${DIR_TEMP} . fi tar -zcv -f ${PACKAGE_FILE} -C ${DIR_TEMP} . diff --git a/metadata/build_info.go b/metadata/build_info.go index b861de41e4..da387ca4df 100644 --- a/metadata/build_info.go +++ b/metadata/build_info.go @@ -22,11 +22,11 @@ package metadata import "fmt" var ( - // BuildCommit comes from COMMIT env variable - BuildCommit = "<unknown>" - // BuildBranch comes from BRANCH env variable - if it's github release, this variable will contain release tag name + // BuildCommit comes from BUILD_COMMIT env variable (set via linker flags) + BuildCommit = "" + // BuildBranch comes from BUILD_BRANCH env variable (set via linker flags) BuildBranch = "<unknown>" - // BuildNumber comes from TRAVIS_JOB_NUMBER env variable + // BuildNumber comes from BUILD_NUMBER env variable (set via linker flags) BuildNumber = "dev-build" ) diff --git a/metadata/version.go b/metadata/version.go index a2be0203e6..94d084009a 100644 --- a/metadata/version.go +++ b/metadata/version.go @@ -17,23 +17,10 @@ package metadata -import ( - "fmt" -) - -const ( - // VersionMajor is version component of the current release - VersionMajor = 0 - // VersionMinor is version component of the current release - VersionMinor = 0 - // VersionPatch is version component of the current release - VersionPatch = 6 -) +import "fmt" -// VersionAsString returns all defined version constants as single string -func VersionAsString() string { - return fmt.Sprintf("%d.%d.%d", VersionMajor, VersionMinor, VersionPatch) -} +// Version comes from BUILD_VERSION env variable (set via linker flags) +var Version = "" const versionSummaryFormat = `Mysterium Node Version: %s @@ -42,6 +29,21 @@ const versionSummaryFormat = `Mysterium Node %s %s` +// VersionAsString returns all defined version constants as single string +func VersionAsString() string { + if Version != "" { + return Version + } + + version := "source" + if len(BuildCommit) >= 8 { + version += "." + BuildCommit[:8] + } else if BuildNumber != "" { + version += "." + BuildNumber + } + return version +} + // VersionAsSummary returns overview of current program's version func VersionAsSummary(licenseCopyright string) string { return fmt.Sprintf(