Version v0.1.0-r103
This commit is contained in:
		
							parent
							
								
									a5518aa3f2
								
							
						
					
					
						commit
						aaa54d26cc
					
				
					 8 changed files with 331 additions and 110 deletions
				
			
		|  | @ -1,30 +0,0 @@ | |||
| FROM arm64v8/alpine:3.11.3 AS build | ||||
| 
 | ||||
| COPY relay /relay | ||||
| 
 | ||||
| RUN \ | ||||
|  apk add binutils && \ | ||||
|  strip /relay | ||||
| 
 | ||||
| FROM arm64v8/alpine:3.11.3 | ||||
| 
 | ||||
| ARG UID=991 | ||||
| ARG GID=991 | ||||
| 
 | ||||
| RUN \ | ||||
|  apk add tini && \ | ||||
|  echo "Etc/UTC" > /etc/localtime && \ | ||||
|  mkdir -p /opt/relay && \ | ||||
|  addgroup --gid $GID relay && \ | ||||
|  adduser -D -u $UID -G relay -h /opt/relay relay && \ | ||||
|  echo "relay:`head /dev/urandom | tr -dc A-Za-z0-9 | head -c 24 | mkpasswd -s -m sha-256`" | chpasswd && \ | ||||
|  chown -R relay:relay /opt/relay | ||||
| 
 | ||||
| COPY --from=build /relay /usr/bin/relay | ||||
| 
 | ||||
| USER relay | ||||
| 
 | ||||
| EXPOSE 8080 | ||||
| 
 | ||||
| ENTRYPOINT ["/sbin/tini", "--"] | ||||
| CMD ["relay"] | ||||
							
								
								
									
										80
									
								
								build.sh
									
										
									
									
									
								
							
							
						
						
									
										80
									
								
								build.sh
									
										
									
									
									
								
							|  | @ -1,80 +0,0 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| BUILD_DATE=$(date) | ||||
| VERSION=$1 | ||||
| MIGRATIONS=$2 | ||||
| 
 | ||||
| function require() { | ||||
|     if [ "$1" = "" ]; then | ||||
|         echo "input '$2' required" | ||||
|         print_help | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| function print_help() { | ||||
|     echo "build.sh" | ||||
|     echo "" | ||||
|     echo "Usage:" | ||||
|     echo "      build.sh [version] [migrations]" | ||||
|     echo "" | ||||
|     echo "Args:" | ||||
|     echo "      version: The version of the current container" | ||||
|     echo "      migrations: (optional) Whether to build the migrations container as well" | ||||
| } | ||||
| 
 | ||||
| require "$VERSION" "version" | ||||
| 
 | ||||
| if ! docker run --rm -it arm64v8/ubuntu:19.10 /bin/bash -c 'echo "docker is configured correctly"'; then | ||||
|     echo "docker is not configured to run on qemu-emulated architectures, fixing will require sudo" | ||||
|     sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | ||||
| fi | ||||
| 
 | ||||
| if ! which cross; then | ||||
|     cargo intall cross | ||||
| fi | ||||
| 
 | ||||
| set -xe | ||||
| 
 | ||||
| cross build \ | ||||
|     --target aarch64-unknown-linux-musl \ | ||||
|     --release | ||||
| 
 | ||||
| mkdir -p artifacts | ||||
| rm -rf artifacts/relay | ||||
| cp ./target/aarch64-unknown-linux-musl/release/relay artifacts/relay | ||||
| 
 | ||||
| docker build \ | ||||
|     --pull \ | ||||
|     --no-cache \ | ||||
|     --build-arg BUILD_DATE="${BUILD_DATE}" \ | ||||
|     --build-arg TAG="${TAG}" \ | ||||
|     -f Dockerfile.arm64v8 \ | ||||
|     -t "asonix/relay:${VERSION}-arm64v8" \ | ||||
|     -t "asonix/relay:latest-arm64v8" \ | ||||
|     -t "asonix/relay:latest" \ | ||||
|     ./artifacts | ||||
| 
 | ||||
| docker push "asonix/relay:${VERSION}-arm64v8" | ||||
| docker push "asonix/relay:latest-arm64v8" | ||||
| docker push "asonix/relay:latest" | ||||
| 
 | ||||
| if [ "${MIGRATIONS}" = "migrations" ]; then | ||||
|     rm -rf artifacts/migrations | ||||
|     cp -r ./migrations artifacts/migrations | ||||
| 
 | ||||
|     docker build \ | ||||
|         --pull \ | ||||
|         --no-cache \ | ||||
|         --build-arg BUILD_DATE="${BUILD_DATE}" \ | ||||
|         --build-arg TAG="${TAG}" \ | ||||
|         -f Dockerfile.migrations.arm64v8 \ | ||||
|         -t "asonix/relay-migrations:${VERSION}-arm64v8" \ | ||||
|         -t "asonix/relay-migrations:latest-arm64v8" \ | ||||
|         -t "asonix/relay-migrations:latest" \ | ||||
|         ./artifacts | ||||
| 
 | ||||
|     docker push "asonix/relay-migrations:${VERSION}-arm64v8" | ||||
|     docker push "asonix/relay-migrations:latest-arm64v8" | ||||
|     docker push "asonix/relay-migrations:latest" | ||||
| fi | ||||
							
								
								
									
										72
									
								
								docker/prod/Dockerfile.amd64
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								docker/prod/Dockerfile.amd64
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | |||
| FROM rustembedded/cross:x86_64-unknown-linux-musl AS amd64-builder | ||||
| 
 | ||||
| ARG UID=991 | ||||
| ARG GID=991 | ||||
| 
 | ||||
| ENV TOOLCHAIN=stable | ||||
| ENV TARGET=x86_64-unknown-linux-musl | ||||
| ENV TOOL=x86_64-linux-musl | ||||
| 
 | ||||
| RUN \ | ||||
|  apt-get update && \ | ||||
|  apt-get upgrade -y | ||||
| 
 | ||||
| RUN \ | ||||
|  addgroup --gid "${GID}" build && \ | ||||
|  adduser \ | ||||
|     --disabled-password \ | ||||
|     --gecos "" \ | ||||
|     --ingroup build \ | ||||
|     --uid "${UID}" \ | ||||
|     --home /opt/build \ | ||||
|     build | ||||
| 
 | ||||
| ADD https://sh.rustup.rs /opt/build/rustup.sh | ||||
| 
 | ||||
| RUN \ | ||||
|  chown -R build:build /opt/build | ||||
| 
 | ||||
| USER build | ||||
| WORKDIR /opt/build | ||||
| 
 | ||||
| ENV PATH="$PATH:/opt/build/.cargo/bin" | ||||
| 
 | ||||
| RUN \ | ||||
|  chmod +x rustup.sh && \ | ||||
|  ./rustup.sh --default-toolchain $TOOLCHAIN --profile minimal -y && \ | ||||
|  rustup target add $TARGET | ||||
| 
 | ||||
| FROM amd64-builder as builder | ||||
| 
 | ||||
| ARG TAG=master | ||||
| ARG REPOSITORY=https://git.asonix.dog/asonix/ap-relay | ||||
| ARG BINARY=relay | ||||
| 
 | ||||
| RUN \ | ||||
|  git clone -b $TAG $REPOSITORY repo | ||||
| 
 | ||||
| WORKDIR /opt/build/repo | ||||
| 
 | ||||
| RUN \ | ||||
|  cargo build --release --target $TARGET && \ | ||||
|  $TOOL-strip target/$TARGET/release/$BINARY | ||||
| 
 | ||||
| FROM amd64/alpine:3.12 | ||||
| 
 | ||||
| ARG UID=991 | ||||
| ARG GID=991 | ||||
| ARG BINARY=relay | ||||
| 
 | ||||
| RUN \ | ||||
|  apk add tini && \ | ||||
|  addgroup --gid $GID relay && \ | ||||
|  adduser -D -G relay -u $UID -g "" -h /opt/relay relay && \ | ||||
|  chown -R relay:relay /opt/relay | ||||
| 
 | ||||
| COPY --from=build /relay /usr/bin/relay | ||||
| 
 | ||||
| EXPOSE 8080 | ||||
| WORKDIR /opt/relay | ||||
| USER relay | ||||
| ENTRYPOINT ["/sbin/tini", "--"] | ||||
| CMD ["relay"] | ||||
							
								
								
									
										72
									
								
								docker/prod/Dockerfile.arm32v7
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								docker/prod/Dockerfile.arm32v7
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | |||
| FROM rustembedded/cross:arm-unknown-linux-musleabihf AS arm32v7-builder | ||||
| 
 | ||||
| ARG UID=991 | ||||
| ARG GID=991 | ||||
| 
 | ||||
| ENV TOOLCHAIN=stable | ||||
| ENV TARGET=arm-unknown-linux-musleabihf | ||||
| ENV TOOL=arm-linux-musleabihf | ||||
| 
 | ||||
| RUN \ | ||||
|  apt-get update && \ | ||||
|  apt-get upgrade -y | ||||
| 
 | ||||
| RUN \ | ||||
|  addgroup --gid "${GID}" build && \ | ||||
|  adduser \ | ||||
|     --disabled-password \ | ||||
|     --gecos "" \ | ||||
|     --ingroup build \ | ||||
|     --uid "${UID}" \ | ||||
|     --home /opt/build \ | ||||
|     build | ||||
| 
 | ||||
| ADD https://sh.rustup.rs /opt/build/rustup.sh | ||||
| 
 | ||||
| RUN \ | ||||
|  chown -R build:build /opt/build | ||||
| 
 | ||||
| USER build | ||||
| WORKDIR /opt/build | ||||
| 
 | ||||
| ENV PATH="$PATH:/opt/build/.cargo/bin" | ||||
| 
 | ||||
| RUN \ | ||||
|  chmod +x rustup.sh && \ | ||||
|  ./rustup.sh --default-toolchain $TOOLCHAIN --profile minimal -y && \ | ||||
|  rustup target add $TARGET | ||||
| 
 | ||||
| FROM arm32v7-builder as builder | ||||
| 
 | ||||
| ARG TAG=master | ||||
| ARG REPOSITORY=https://git.asonix.dog/asonix/ap-relay | ||||
| ARG BINARY=relay | ||||
| 
 | ||||
| RUN \ | ||||
|  git clone -b $TAG $REPOSITORY repo | ||||
| 
 | ||||
| WORKDIR /opt/build/repo | ||||
| 
 | ||||
| RUN \ | ||||
|  cargo build --release --target $TARGET && \ | ||||
|  $TOOL-strip target/$TARGET/release/$BINARY | ||||
| 
 | ||||
| FROM arm32v7/alpine:3.12 | ||||
| 
 | ||||
| ARG UID=991 | ||||
| ARG GID=991 | ||||
| ARG BINARY=relay | ||||
| 
 | ||||
| RUN \ | ||||
|  apk add tini && \ | ||||
|  addgroup --gid $GID relay && \ | ||||
|  adduser -D -G relay -u $UID -g "" -h /opt/relay relay && \ | ||||
|  chown -R relay:relay /opt/relay | ||||
| 
 | ||||
| COPY --from=build /relay /usr/bin/relay | ||||
| 
 | ||||
| EXPOSE 8080 | ||||
| WORKDIR /opt/relay | ||||
| USER relay | ||||
| ENTRYPOINT ["/sbin/tini", "--"] | ||||
| CMD ["relay"] | ||||
							
								
								
									
										72
									
								
								docker/prod/Dockerfile.arm64v8
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								docker/prod/Dockerfile.arm64v8
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | |||
| FROM rustembedded/cross:aarch64-unknown-linux-musl AS aarch64-builder | ||||
| 
 | ||||
| ARG UID=991 | ||||
| ARG GID=991 | ||||
| 
 | ||||
| ENV TOOLCHAIN=stable | ||||
| ENV TARGET=aarch64-unknown-linux-musl | ||||
| ENV TOOL=aarch64-linux-musl | ||||
| 
 | ||||
| RUN \ | ||||
|  apt-get update && \ | ||||
|  apt-get upgrade -y | ||||
| 
 | ||||
| RUN \ | ||||
|  addgroup --gid "${GID}" build && \ | ||||
|  adduser \ | ||||
|     --disabled-password \ | ||||
|     --gecos "" \ | ||||
|     --ingroup build \ | ||||
|     --uid "${UID}" \ | ||||
|     --home /opt/build \ | ||||
|     build | ||||
| 
 | ||||
| ADD https://sh.rustup.rs /opt/build/rustup.sh | ||||
| 
 | ||||
| RUN \ | ||||
|  chown -R build:build /opt/build | ||||
| 
 | ||||
| USER build | ||||
| WORKDIR /opt/build | ||||
| 
 | ||||
| ENV PATH="PATH:/opt/build/.cargo/bin" | ||||
| 
 | ||||
| RUN \ | ||||
|  chmod +x rustup.sh && \ | ||||
|  ./rustup.sh --default-toolchain $TOOLCHAIN --profile minimal -y && \ | ||||
|  rustup target add $TARGET | ||||
| 
 | ||||
| FROM aarch64-builder as builder | ||||
| 
 | ||||
| ARG TAG=master | ||||
| ARG REPOSITORY=https://git.asonix.dog/asonix/ap-relay | ||||
| ARG BINARY=relay | ||||
| 
 | ||||
| RUN \ | ||||
|  git clone -b $TAG $REPOSITORY repo | ||||
| 
 | ||||
| WORKDIR /opt/build/repo | ||||
| 
 | ||||
| RUN \ | ||||
|  cargo build --release --target $TARGET && \ | ||||
|  $TOOL-strip target/$TARGET/release/$BINARY | ||||
| 
 | ||||
| FROM arm64v8/alpine:3.12 | ||||
| 
 | ||||
| ARG UID=991 | ||||
| ARG GID=991 | ||||
| ARG BINARY=relay | ||||
| 
 | ||||
| RUN \ | ||||
|  apk add tini && \ | ||||
|  addgroup --gid $GID relay && \ | ||||
|  adduser -D -G relay -u $UID -g "" -h /opt/relay relay && \ | ||||
|  chown -R relay:relay /opt/relay | ||||
| 
 | ||||
| COPY --from=build /relay /usr/bin/relay | ||||
| 
 | ||||
| EXPOSE 8080 | ||||
| WORKDIR /opt/relay | ||||
| USER relay | ||||
| ENTRYPOINT ["/sbin/tini", "--"] | ||||
| CMD ["relay"] | ||||
							
								
								
									
										72
									
								
								docker/prod/deploy.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										72
									
								
								docker/prod/deploy.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,72 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| TAG=$1 | ||||
| MIGRATIONS=$2 | ||||
| 
 | ||||
| function require() { | ||||
|     if [ "$1" = "" ]; then | ||||
|         echo "input '$2' required" | ||||
|         print_help | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| function print_help() { | ||||
|     echo "build.sh" | ||||
|     echo "" | ||||
|     echo "Usage:" | ||||
|     echo "      build.sh [tag] [migrations]" | ||||
|     echo "" | ||||
|     echo "Args:" | ||||
|     echo "      tag: The git tag to create and publish" | ||||
|     echo "      migrations: (optional) Whether to build the migrations container as well" | ||||
| } | ||||
| 
 | ||||
| function build_image() { | ||||
|     repo=$1 | ||||
|     tag=$2 | ||||
|     arch=$3 | ||||
| 
 | ||||
|     docker build \ | ||||
|         --pull \ | ||||
|         --build-arg TAG="${tag}" \ | ||||
|         -f "Dockerfile.${arch}" \ | ||||
|         -t "${repo}:${tag}-${arch}" \ | ||||
|         -t "${repo}:latest-${arch}" \ | ||||
|         ./artifacts | ||||
| 
 | ||||
|     docker push "${repo}:${tag}-arm64v8" | ||||
|     docker push "${repo}:latest-arm64v8" | ||||
| } | ||||
| 
 | ||||
| require "$TAG" "tag" | ||||
| 
 | ||||
| if ! docker run --rm -it arm64v8/ubuntu:19.10 /bin/bash -c 'echo "docker is configured correctly"'; then | ||||
|     echo "docker is not configured to run on qemu-emulated architectures, fixing will require sudo" | ||||
|     sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | ||||
| fi | ||||
| 
 | ||||
| set -xe | ||||
| 
 | ||||
| git checkout master | ||||
| git commit -m "Version $TAG" | ||||
| git tag $TAG | ||||
| 
 | ||||
| git push origin $TAG | ||||
| git push | ||||
| 
 | ||||
| build_image "asonix/relay" "$TAG" "arm64v8" | ||||
| build_image "asonix/relay" "$TAG" "arm32v7" | ||||
| build_image "asonix/relay" "$TAG" "amd64" | ||||
| 
 | ||||
| ./manifest.sh "asonix/relay" "$TAG" | ||||
| ./manifest.sh "asonix/relay" "latest" | ||||
| 
 | ||||
| if [ "${MIGRATIONS}" = "migrations" ]; then | ||||
|     build_image "asonix/relay-migrations" "$TAG" arm64v8 | ||||
|     build_image "asonix/relay-migrations" "$TAG" arm32v7 | ||||
|     build_image "asonix/relay-migrations" "$TAG" amd64 | ||||
| 
 | ||||
|     ./manifest.sh "asonix/relay-migrations" "$TAG" | ||||
|     ./manifest.sh "asonix/relay-migrations" "latest" | ||||
| fi | ||||
							
								
								
									
										43
									
								
								docker/prod/manifest.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										43
									
								
								docker/prod/manifest.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| function require() { | ||||
|     if [ "$1" = "" ]; then | ||||
|         echo "input '$2' required" | ||||
|         print_help | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| function print_help() { | ||||
|     echo "deploy.sh" | ||||
|     echo "" | ||||
|     echo "Usage:" | ||||
|     echo "	manifest.sh [tag]" | ||||
|     echo "" | ||||
|     echo "Args:" | ||||
|     echo "	repo: The docker repository to push the manifest to" | ||||
|     echo "	tag: The git tag to be applied to the image manifest" | ||||
| } | ||||
| 
 | ||||
| repo=$2 | ||||
| tag=$2 | ||||
| 
 | ||||
| require "$repo" "repo" | ||||
| require "$tag" "tag" | ||||
| 
 | ||||
| set -xe | ||||
| 
 | ||||
| docker manifest create $repo:$tag \ | ||||
|     -a $repo:arm64v8-$tag \ | ||||
|     -a $repo:arm32v7-$tag \ | ||||
|     -a $repo:amd64-$tag | ||||
| 
 | ||||
| docker manifest annotate $repo:$tag \ | ||||
|     $repo:arm64v8-$tag --os linux --arch arm64 --variant v8 | ||||
| 
 | ||||
| docker manifest annotate $repo:$tag \ | ||||
|     $repo:arm32v7-$tag --os linux --arch arm --variant v7 | ||||
| 
 | ||||
| docker manifest annotate $repo:$tag \ | ||||
|     $repo:amd64-$tag --os linux --arch amd64 | ||||
| 
 | ||||
| docker manifest push $repo:$tag --purge | ||||
		Loading…
	
	Add table
		
		Reference in a new issue