56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/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 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
 |