mirror of
				https://github.com/ohwgiles/laminar.git
				synced 2025-06-13 12:54:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | #!/bin/bash -eu | ||
|  | 
 | ||
|  | # Any failing command in a pipe will cause an error, instead | ||
|  | # of just an error in the last command in the pipe | ||
|  | set -o pipefail | ||
|  | 
 | ||
|  | # Log commands executed | ||
|  | set -x | ||
|  | 
 | ||
|  | # Simple way of getting the docker build tag: | ||
|  | tag=$(docker build -q - <<\EOF | ||
|  | 	FROM debian:bullseye | ||
|  | 	RUN apt-get update && apt-get install -y build-essential | ||
|  | EOF | ||
|  | ) | ||
|  | 
 | ||
|  | # But -q suppresses the log output. If you want to keep it, | ||
|  | # you could use the following fancier way: | ||
|  | 
 | ||
|  | exec {pfd}<><(:) # get a new pipe | ||
|  | docker build - <<\EOF | | ||
|  | 	FROM debian:bullseye | ||
|  | 	RUN apt-get update && apt-get install -y build-essential | ||
|  | EOF | ||
|  | tee >(awk '/Successfully built/{print $3}' >&$pfd) # parse output to pipe | ||
|  | read tag <&$pfd # read tag back from pipe | ||
|  | exec {pfd}<&- # close pipe | ||
|  | 
 | ||
|  | # Alternatively, you can use the -t option to docker build | ||
|  | # to give the built image a name to refer to later. But then | ||
|  | # you need to ensure that it does not conflict with any other | ||
|  | # images, and handle cases where multiple instances of the | ||
|  | # job attempt to update the tagged image. | ||
|  | 
 | ||
|  | # If you want the image to be cleaned up on exit: | ||
|  | trap "docker rmi $tag" EXIT | ||
|  | 
 | ||
|  | # Now use the image to build something: | ||
|  | docker run -i --rm \ | ||
|  | 	-v "$PWD:$PWD" \ | ||
|  | 	-w "$PWD" \ | ||
|  | 	-u $(id -u):$(id -g) \ | ||
|  | 	$tag /bin/bash -eux \ | ||
|  | <<EOF | ||
|  | 	# The passed options mean we keep our current working | ||
|  | 	# directory and user, so no permission problems on the | ||
|  | 	# artifacts produced within the container. | ||
|  | 	echo 'main(){puts("hello world");}' | gcc -x c -static -o hello - | ||
|  | EOF | ||
|  | 
 | ||
|  | # Test the result | ||
|  | ./hello | ||
|  | 
 |