mirror of
https://github.com/boringproxy/boringproxy.git
synced 2025-02-25 18:55:29 -06:00
build files using docker
This commit is contained in:
parent
57862495fe
commit
9a4863c4f4
11
.gitignore
vendored
11
.gitignore
vendored
@ -7,4 +7,13 @@
|
|||||||
boringproxy_*.tar.gz
|
boringproxy_*.tar.gz
|
||||||
|
|
||||||
# Boringproxy database, created if exec is run in boringproxy folder
|
# Boringproxy database, created if exec is run in boringproxy folder
|
||||||
boringproxy_db.json
|
boringproxy_db.json
|
||||||
|
|
||||||
|
# Development files
|
||||||
|
dev.yml
|
||||||
|
|
||||||
|
# Docker client examples
|
||||||
|
# Ignore everything in config
|
||||||
|
docker/client/examples/home-assistant/config/*
|
||||||
|
# But not these files...
|
||||||
|
!docker/client/examples/home-assistant/config/configuration.yaml
|
19
Dockerfile
19
Dockerfile
@ -1,19 +1,32 @@
|
|||||||
FROM golang:1.17-alpine3.15 as builder
|
FROM golang:1.17-alpine3.15 as builder
|
||||||
|
LABEL boringproxy=builder
|
||||||
|
|
||||||
|
ARG VERSION
|
||||||
|
ARG GOOS="linux"
|
||||||
|
ARG GOARCH="amd64"
|
||||||
|
ARG BRANCH="master"
|
||||||
|
ARG REPO="https://github.com/boringproxy/boringproxy.git"
|
||||||
|
ARG ORIGIN='local'
|
||||||
|
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
|
|
||||||
RUN apk add git
|
RUN apk add git
|
||||||
|
|
||||||
|
RUN if [[ "ORIGIN" == 'remote' ]] ; then git clone --depth 1 --branch "${BRANCH}" ${REPO}; fi
|
||||||
|
|
||||||
COPY go.* ./
|
COPY go.* ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
COPY . .
|
COPY . .
|
||||||
|
RUN export VERSION='2'
|
||||||
|
|
||||||
RUN cd cmd/boringproxy && CGO_ENABLED=0 go build -o boringproxy
|
RUN cd cmd/boringproxy && CGO_ENABLED=0 GOOS=${GOOS} GOARCH=${GOARCH} \
|
||||||
|
go build -ldflags "-X main.Version=${VERSION}" \
|
||||||
|
-o boringproxy
|
||||||
|
|
||||||
FROM scratch
|
FROM scratch
|
||||||
EXPOSE 80 443
|
EXPOSE 80 443
|
||||||
|
|
||||||
COPY --from=builder /build/cmd/boringproxy/boringproxy /
|
COPY --from=builder /build/cmd/boringproxy/boringproxy /
|
||||||
|
|
||||||
ENTRYPOINT ["/boringproxy"]
|
ENTRYPOINT ["/boringproxy"]
|
||||||
CMD ["server"]
|
CMD ["version"]
|
BIN
default_logo.png
Normal file
BIN
default_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 913 B |
2
docker/.gitignore
vendored
2
docker/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
# Docker-compose file with local dev config
|
|
||||||
dev.yml
|
|
@ -1,7 +0,0 @@
|
|||||||
# Ignore everything in config
|
|
||||||
config/*
|
|
||||||
# But not these files...
|
|
||||||
!config/configuration.yaml
|
|
||||||
|
|
||||||
# Ignore everything in development config
|
|
||||||
dev-config/*
|
|
220
scripts/build_docker.sh
Executable file
220
scripts/build_docker.sh
Executable file
@ -0,0 +1,220 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Run from root boringproxy folder and call with ./scripts/build_docker.sh
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# Help #
|
||||||
|
############################################################
|
||||||
|
Help()
|
||||||
|
{
|
||||||
|
# Display Help
|
||||||
|
echo "Script to buid BoringProxy executables using docker"
|
||||||
|
echo "Syntax: build_docker.sh [h|help|local|remote]"
|
||||||
|
echo
|
||||||
|
echo "h & help: Display help documetation"
|
||||||
|
echo
|
||||||
|
echo "local: Build executables from local repo (current folder)"
|
||||||
|
echo "options:"
|
||||||
|
echo " a|arch Architecture to build for build (amd64,arm,arm64)"
|
||||||
|
echo " os Operating System to build for (linux,freebsd,openbsd,windows,darwin)"
|
||||||
|
echo " o|output Output format (image,exec)"
|
||||||
|
echo "example: "
|
||||||
|
echo " build_docker.sh local -a=amd -s=linux -o=image"
|
||||||
|
echo
|
||||||
|
echo "local: Build executables remote repo (Github fork)"
|
||||||
|
echo "options:"
|
||||||
|
echo " a|arch Architecture to build for build (amd64,arm,arm64)"
|
||||||
|
echo " os Operating System to build for (linux,freebsd,openbsd,windows,darwin)"
|
||||||
|
echo " u|user Github user"
|
||||||
|
echo " b|branch Branch/Tree"
|
||||||
|
echo " o|output Output format (image,exec)"
|
||||||
|
echo "example: "
|
||||||
|
echo " generate_docker.sh remote -a=amd -s=linux -u=wgrobler -b=dev -o=exec"
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
############################################################
|
||||||
|
# Main program #
|
||||||
|
############################################################
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
# Check if file was run from correct working directory, if correct script file will exists
|
||||||
|
FILE=./scripts/build_docker.sh
|
||||||
|
if [ ! -f "$FILE" ]; then
|
||||||
|
echo "Script needs to be run from root boringproxy folder, call with ./scripts/build_docker.sh"
|
||||||
|
exit;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$1" ];
|
||||||
|
then
|
||||||
|
echo "No input variabled supplied"
|
||||||
|
echo "Here is the script help documentation:"
|
||||||
|
echo
|
||||||
|
Help
|
||||||
|
exit;
|
||||||
|
else
|
||||||
|
if [ "$1" == "help" ] || [ "$1" == "h" ];
|
||||||
|
then
|
||||||
|
Help
|
||||||
|
exit;
|
||||||
|
fi
|
||||||
|
if [ "$1" == "local" ];
|
||||||
|
then
|
||||||
|
CMD='local'
|
||||||
|
GOARCH='amd64';
|
||||||
|
GOOS='linux';
|
||||||
|
OUTPUT_FORMAT='image';
|
||||||
|
# Get the options
|
||||||
|
for i in "$@"; do
|
||||||
|
case $i in
|
||||||
|
-a=*|--arch=*)
|
||||||
|
GOARCH="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-os=*)
|
||||||
|
GOOS="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-o=*|--output=*)
|
||||||
|
OUTPUT_FORMAT="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-*|--*)
|
||||||
|
echo "Unknown option $i"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ "$1" == "remote" ];
|
||||||
|
then
|
||||||
|
CMD='remote'
|
||||||
|
GOARCH='amd64';
|
||||||
|
GOOS='linux';
|
||||||
|
BRANCH='master';
|
||||||
|
GITHUB_USER="boringproxy"
|
||||||
|
OUTPUT_FORMAT='image';
|
||||||
|
# Get the options
|
||||||
|
for i in "$@"; do
|
||||||
|
case $i in
|
||||||
|
-a=*|--arch=*)
|
||||||
|
GOARCH="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-os=*)
|
||||||
|
GOOS="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-b=*|--branch=*)
|
||||||
|
BRANCH="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-u=*|--user=*)
|
||||||
|
GITHUB_USER="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-o=*|--output=*)
|
||||||
|
OUTPUT_FORMAT="${i#*=}";
|
||||||
|
shift;
|
||||||
|
;;
|
||||||
|
-*|--*)
|
||||||
|
echo "Unknown option $i"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get current timestamp and set at TAG
|
||||||
|
timestamp=$(date +%s)
|
||||||
|
|
||||||
|
# Make build folder if not already exists
|
||||||
|
mkdir -p ./build
|
||||||
|
|
||||||
|
# Check if logo.png exists, if not create
|
||||||
|
FILE=./logo.png
|
||||||
|
if [ -f "$FILE" ];
|
||||||
|
then
|
||||||
|
echo "$FILE exists. Using file in build";
|
||||||
|
else
|
||||||
|
echo "$FILE does not exist. Creating file";
|
||||||
|
cp ./default_logo.png ./logo.png;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CMD" == "local" ];
|
||||||
|
then
|
||||||
|
echo "Building from local git repo"
|
||||||
|
|
||||||
|
# Get current version from git tags
|
||||||
|
version=$(git describe --tags)
|
||||||
|
|
||||||
|
# Set docker image name
|
||||||
|
if [ "$OUTPUT_FORMAT" == "image" ];
|
||||||
|
then DockerImage="boringproxy-$GOOS-$GOARCH";
|
||||||
|
else DockerImage="boringproxy-$GOOS-$GOARCH:$timestamp";
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build docker image(s)
|
||||||
|
docker build -t $DockerImage . \
|
||||||
|
--build-arg VERSION=$(git describe --tags) \
|
||||||
|
--build-arg GOARCH=$GOARCH \
|
||||||
|
--build-arg GOOS=$GOOS;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CMD" == "remote" ];
|
||||||
|
then
|
||||||
|
echo "Building from remote git repo"
|
||||||
|
|
||||||
|
# Set docker image name
|
||||||
|
if [ "$OUTPUT_FORMAT" == "image" ];
|
||||||
|
then DockerImage="$GITHUB_USER.$BRANCH.boringproxy-$GOOS-$GOARCH";
|
||||||
|
else DockerImage="$GITHUB_USER.$BRANCH.boringproxy-$GOOS-$GOARCH:$timestamp";
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build docker image(s)
|
||||||
|
REPO="https://github.com/$GITHUB_USER/boringproxy.git"
|
||||||
|
docker build -t $DockerImage . \
|
||||||
|
--build-arg VERSION="$GITHUB_USER:$BRANCH" \
|
||||||
|
--build-arg GOARCH=$GOARCH \
|
||||||
|
--build-arg GOOS=$GOOS \
|
||||||
|
--build-arg BRANCH=$BRANCH \
|
||||||
|
--build-arg REPO=$REPO;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if DockerImage is set, continue
|
||||||
|
if [ -n "$DockerImage" ];
|
||||||
|
then
|
||||||
|
if [ "$OUTPUT_FORMAT" == "image" ];
|
||||||
|
then
|
||||||
|
# Prune intermediate images
|
||||||
|
docker image prune -f --filter label=boringproxy=builder
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Docker file created with filename: $DockerImage"
|
||||||
|
echo "Use $DockerImage as image name when uploading"
|
||||||
|
else
|
||||||
|
# Prune intermediate images
|
||||||
|
docker image prune -f --filter label=boringproxy=builder
|
||||||
|
|
||||||
|
# Set filename for exec
|
||||||
|
if [ "$CMD" == "local" ];
|
||||||
|
then FILENAME="boringproxy-$GOOS-$GOARCH";
|
||||||
|
else FILENAME="$GITHUB_USER.$BRANCH.boringproxy-$GOOS-$GOARCH";
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy exec from image
|
||||||
|
docker cp $(docker create $DockerImage):/boringproxy ./build/$FILENAME;
|
||||||
|
|
||||||
|
# Remove temp container
|
||||||
|
docker rm $(docker container ls -n 1 | awk '{ print $1 }' | grep -v CONTAINER)
|
||||||
|
|
||||||
|
# Remove image
|
||||||
|
docker rmi $DockerImage;
|
||||||
|
fi
|
||||||
|
fi
|
32
scripts/upload_docker_github.sh
Executable file
32
scripts/upload_docker_github.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This file is used to upload a build docker image to GitHub.
|
||||||
|
# Run build_docker.sh first to create new image
|
||||||
|
# Run from root boringproxy folder and call with ./scripts/upload_docker_image.sh github-username
|
||||||
|
# github-username must be lowercase
|
||||||
|
|
||||||
|
# https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
|
||||||
|
|
||||||
|
if [ -z "$1" ];
|
||||||
|
then {
|
||||||
|
echo "Container name required";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$2" ];
|
||||||
|
then echo "GitHub username required";
|
||||||
|
else {
|
||||||
|
if [ -z "$3" ];
|
||||||
|
then {
|
||||||
|
echo "No TAG set, using latest";
|
||||||
|
tag='latest';
|
||||||
|
}
|
||||||
|
else tag=$3;
|
||||||
|
fi
|
||||||
|
docker image tag $1 ghcr.io/$2/$1:$tag
|
||||||
|
CR_PAT=`cat ~/.auth_tokens/github`
|
||||||
|
echo $CR_PAT | docker login ghcr.io -u $2 --password-stdin
|
||||||
|
docker push ghcr.io/$2/$1:$tag
|
||||||
|
} fi
|
||||||
|
|
Loading…
Reference in New Issue
Block a user