With https://github.com/google/nixery/pull/127, nixery will use extended attributes to store metadata (when using local storage). Right now, our integration test mounts a tmpfs to /var/cache/nixery. However, *user* xattrs aren't supported with tmpfs [1], so setting xattrs would fail. To workaround this, use a folder in the current working directory and hope it's backed by something supporting user xattrs (which is the case for GitHub Actions). [1]: https://man7.org/linux/man-pages/man5/tmpfs.5.html#NOTES
		
			
				
	
	
		
			59 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| set -eou pipefail
 | |
| 
 | |
| # This integration test makes sure that the container image built
 | |
| # for Nixery itself runs fine in Docker, and that images pulled
 | |
| # from it work in Docker.
 | |
| 
 | |
| IMG=$(docker load -q -i "$(nix-build -A nixery-image)" | awk '{ print $3 }')
 | |
| echo "Loaded Nixery image as ${IMG}"
 | |
| 
 | |
| # Run the built nixery docker image in the background, but keep printing its
 | |
| # output as it occurs.
 | |
| # We can't just mount a tmpfs to /var/cache/nixery, as tmpfs doesn't support
 | |
| # user xattrs.
 | |
| # So create a temporary directory in the current working directory, and hope
 | |
| # it's backed by something supporting user xattrs.
 | |
| # We'll notice it isn't if nixery starts complaining about not able to set
 | |
| # xattrs anyway.
 | |
| if [ -d var-cache-nixery ]; then rm -Rf var-cache-nixery; fi
 | |
| mkdir var-cache-nixery
 | |
| docker run --privileged --rm -p 8080:8080 --name nixery \
 | |
|   -e PORT=8080 \
 | |
|   --mount "type=bind,source=${PWD}/var-cache-nixery,target=/var/cache/nixery" \
 | |
|   -e NIXERY_CHANNEL=nixos-unstable \
 | |
|   -e NIXERY_STORAGE_BACKEND=filesystem \
 | |
|   -e STORAGE_PATH=/var/cache/nixery \
 | |
|   "${IMG}" &
 | |
| 
 | |
| # Give the container ~20 seconds to come up
 | |
| set +e
 | |
| attempts=0
 | |
| echo -n "Waiting for Nixery to start ..."
 | |
| until curl --fail --silent "http://localhost:8080/v2/"; do
 | |
|   [[ attempts -eq 30 ]] && echo "Nixery container failed to start!" && exit 1
 | |
|   ((attempts++))
 | |
|   echo -n "."
 | |
|   sleep 1
 | |
| done
 | |
| set -e
 | |
| 
 | |
| # Pull and run an image of the current CPU architecture
 | |
| case $(uname -m) in
 | |
|   x86_64)
 | |
|     docker run --rm localhost:8080/hello hello
 | |
|     ;;
 | |
|   aarch64)
 | |
|     docker run --rm localhost:8080/arm64/hello hello
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| # Pull an image of the opposite CPU architecture (but without running it)
 | |
| case $(uname -m) in
 | |
| x86_64)
 | |
|   docker pull localhost:8080/arm64/hello
 | |
|   ;;
 | |
| aarch64)
 | |
|   docker pull localhost:8080/hello
 | |
|   ;;
 | |
| esac
 |