diff --git a/Makefile b/Makefile index 603ad5d..e878d28 100644 --- a/Makefile +++ b/Makefile @@ -16,11 +16,11 @@ release: .PHONY: release image: Dockerfile - @ docker build -t '$(IMAGE):$(TAG)' . + @ bash ./build '$(IMAGE)' .PHONY: image -push: image - @ docker push '$(IMAGE):$(TAG)' +push: + @ bash ./build '$(IMAGE)' push .PHONY: push # Run diff --git a/build b/build new file mode 100755 index 0000000..480b6f1 --- /dev/null +++ b/build @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +# Simple guard to check input args +[[ $# -eq 1 ]] || [[ $# -eq 2 ]] || { + >&2 echo "Usage: ./build IMAGE [ACTION]" + exit 1 +} + +# Extract current version from Cargo.toml & get current branch +patch_version="$(grep -Po '(?<=version = ").*(?=")' Cargo.toml | head -n1)" +major_version="$(echo "$patch_version" | + sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)/\1/')" +minor_version="$(echo "$patch_version" | + sed -E 's/([0-9]+).([0-9]+).([0-9]+)/\1.\2/')" +branch="$(git branch --show-current)" + +if [[ "$branch" = "master" ]]; then + tags=("$patch_version" "$minor_version" "$major_version" ) + +elif [[ "$branch" = "develop" ]]; then + tags=("$patch_version-dev" "$minor_version-dev" "$major_version-dev" ) + +else + tags=("$branch") + +fi + +tag_flags=() + +for tag in "${tags[@]}"; do + tag_flags+=("-t '$1:$tag'") + +done + +# Run the actual build command +docker build $tag_flags . + +if [[ "$2" = push ]]; then + for tag in "${tags[@]}"; do + docker push "$1:$tag" + done + + elif [[ "$2" = run ]]; then + docker run \ + --rm \ + --interactive \ + --tty \ + --publish 8000:8000 \ + "$1:$tags" +fi