#!/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" "latest") elif [[ "$branch" = "develop" ]]; then tags=("$patch_version-dev" "$minor_version-dev" "$major_version-dev" "dev") else tags=("$branch") fi # Run the actual build command DOCKER_BUILDKIT=1 docker build -t "$1:$tags" . if [[ "$2" = push ]]; then [[ "$branch" =~ ^develop|master$ ]] || { >&2 echo "You can only push from develop or master." exit 2 } for tag in "${tags[@]}"; do # Create the tag docker tag "$1:$tags" "$1:$tag" # Push the tag docker push "$1:$tag" # Remove the tag again, if it's not the main tag [[ "$tag" != "$tags" ]] && docker rmi "$1:$tag" done elif [[ "$2" = run ]]; then docker run \ --rm \ --interactive \ --tty \ --publish 8000:8000 \ "$1:$tags" fi