CI: Improve build scripts

This commit is contained in:
Michael Mayer
2022-02-17 19:18:37 +01:00
parent 9e786520c0
commit 1c4473d8dc
4 changed files with 68 additions and 66 deletions

View File

@@ -2,49 +2,49 @@
set -e
PHOTOPRISM_DATE=$(date -u +%y%m%d)
PHOTOPRISM_VERSION=$(git describe --always)
BUILD_DATE=$(date -u +%y%m%d)
BUILD_VERSION=$(git describe --always)
if [[ -z $1 ]] || [[ -z $2 ]]; then
echo "Please provide build mode and output file name" 1>&2
echo "Usage: build.sh [debug|race|static|prod] [filename]" 1>&2
exit 1
fi
if [[ $OS == "Windows_NT" ]]; then
PHOTOPRISM_OS=win32
BUILD_OS=win32
if [[ $PROCESSOR_ARCHITEW6432 == "AMD64" ]]; then
PHOTOPRISM_ARCH=amd64
BUILD_ARCH=amd64
else
if [[ $PROCESSOR_ARCHITECTURE == "AMD64" ]]; then
PHOTOPRISM_ARCH=amd64
BUILD_ARCH=amd64
fi
if [[ $PROCESSOR_ARCHITECTURE == "x86" ]]; then
PHOTOPRISM_ARCH=ia32
BUILD_ARCH=ia32
fi
fi
else
PHOTOPRISM_OS=$(uname -s)
PHOTOPRISM_ARCH=$(uname -m)
BUILD_OS=$(uname -s)
BUILD_ARCH=$(uname -m)
fi
BUILD_ID=${BUILD_DATE}-${BUILD_VERSION}-${BUILD_OS}-${BUILD_ARCH}
echo "Building $1 binary..."
echo "Version: PhotoPrism CE ${BUILD_ID}"
if [[ $1 == "debug" ]]; then
echo "Building development binary..."
go build -ldflags "-X main.version=${PHOTOPRISM_DATE}-${PHOTOPRISM_VERSION}-${PHOTOPRISM_OS}-${PHOTOPRISM_ARCH}-DEBUG" -o $2 cmd/photoprism/photoprism.go
go build -ldflags "-X main.version=${BUILD_ID}-DEBUG" -o $2 cmd/photoprism/photoprism.go
du -h $2
echo "Done."
elif [[ $1 == "race" ]]; then
echo "Building with data race detector..."
go build -race -ldflags "-X main.version=${PHOTOPRISM_DATE}-${PHOTOPRISM_VERSION}-${PHOTOPRISM_OS}-${PHOTOPRISM_ARCH}-DEBUG" -o $2 cmd/photoprism/photoprism.go
go build -race -ldflags "-X main.version=${BUILD_ID}-DEBUG" -o $2 cmd/photoprism/photoprism.go
du -h $2
echo "Done."
elif [[ $1 == "static" ]]; then
echo "Building static production binary..."
go build -a -v -ldflags "-linkmode external -extldflags \"-static -L /usr/lib -ltensorflow\" -s -w -X main.version=${PHOTOPRISM_DATE}-${PHOTOPRISM_VERSION}-${PHOTOPRISM_OS}-${PHOTOPRISM_ARCH}" -o $2 cmd/photoprism/photoprism.go
go build -a -v -ldflags "-linkmode external -extldflags \"-static -L /usr/lib -ltensorflow\" -s -w -X main.version=${BUILD_ID}" -o $2 cmd/photoprism/photoprism.go
du -h $2
echo "Done."
else
echo "Building production binary..."
go build -ldflags "-s -w -X main.version=${PHOTOPRISM_DATE}-${PHOTOPRISM_VERSION}-${PHOTOPRISM_OS}-${PHOTOPRISM_ARCH}" -o $2 cmd/photoprism/photoprism.go
go build -ldflags "-s -w -X main.version=${BUILD_ID}" -o $2 cmd/photoprism/photoprism.go
du -h $2
echo "Done."
fi
echo "Done."

View File

@@ -12,26 +12,26 @@ fi
NUMERIC='^[0-9]+$'
GOPROXY=${GOPROXY:-'https://proxy.golang.org,direct'}
DOCKER_TAG=$(date -u +%Y%m%d)
BUILD_DATE=$(date -u +%y%m%d)
echo "docker/build: building photoprism/$1 from docker/${1/-//}$3/Dockerfile...";
echo "Building image 'photoprism/$1' from docker/${1/-//}$3/Dockerfile...";
if [[ $1 ]] && [[ -z $2 || $2 == "preview" ]]; then
echo "build tags: preview"
echo "Build Tags: preview"
docker build \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-t photoprism/$1:preview \
-f docker/${1/-//}$3/Dockerfile .
elif [[ $2 =~ $NUMERIC ]]; then
echo "build tags: $2, latest"
echo "Build Tags: $2, latest"
if [[ $4 ]]; then
echo "build params: $4"
echo "Build Params: $4"
fi
docker build $4\
@@ -44,36 +44,36 @@ elif [[ $2 =~ $NUMERIC ]]; then
-t photoprism/$1:$2 \
-f docker/${1/-//}$3/Dockerfile .
elif [[ $2 == *"preview"* ]]; then
echo "build tags: $2"
echo "Build Tags: $2"
if [[ $4 ]]; then
echo "build params: $4"
echo "Build Params: $4"
fi
docker build $4\
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-t photoprism/$1:$2 \
-f docker/${1/-//}$3/Dockerfile .
else
echo "build tags: $DOCKER_TAG-$2, $2"
echo "Build Tags: $BUILD_DATE-$2, $2"
if [[ $4 ]]; then
echo "build params: $4"
echo "Build Params: $4"
fi
docker build $4\
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-t photoprism/$1:$2 \
-t photoprism/$1:$DOCKER_TAG-$2 \
-t photoprism/$1:$BUILD_DATE-$2 \
-f docker/${1/-//}$3/Dockerfile .
fi
echo "docker/build: done"
echo "Done."

View File

@@ -10,10 +10,10 @@ fi
NUMERIC='^[0-9]+$'
GOPROXY=${GOPROXY:-'https://proxy.golang.org,direct'}
DOCKER_TAG=$(date -u +%Y%m%d)
BUILD_DATE=$(date -u +%y%m%d)
# kill old multi builder if still alive.
echo "docker/buildx-multi: removing existing multibuilder..."
echo "Removing existing multibuilder..."
docker buildx rm multibuilder 2>/dev/null
# wait 3 seconds.
@@ -22,26 +22,27 @@ sleep 3
# create new multibuilder.
docker buildx create --name multibuilder --use || { echo 'failed'; exit 1; }
echo "docker/buildx-multi: building photoprism/$1 from docker/${1/-//}$4/Dockerfile..."
echo "Starting 'photoprism/$1' multi-arch build from docker/${1/-//}$4/Dockerfile..."
echo "Build Arch: $2"
if [[ $1 ]] && [[ $2 ]] && [[ -z $3 || $3 == "preview" ]]; then
echo "build tags: preview"
echo "Build Tags: preview"
docker buildx build \
--platform $2 \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-f docker/${1/-//}$4/Dockerfile \
-t photoprism/$1:preview \
--push .
elif [[ $3 =~ $NUMERIC ]]; then
echo "build tags: $3, latest"
echo "Build Tags: $3, latest"
if [[ $5 ]]; then
echo "build params: $5"
echo "Build Params: $5"
fi
docker buildx build \
@@ -56,48 +57,48 @@ elif [[ $3 =~ $NUMERIC ]]; then
-t photoprism/$1:$3 $5 \
--push .
elif [[ $4 ]] && [[ $3 == *"preview"* ]]; then
echo "build tags: $3"
echo "Build Tags: $3"
if [[ $5 ]]; then
echo "build params: $5"
echo "Build Params: $5"
fi
docker buildx build \
--platform $2 \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-f docker/${1/-//}$4/Dockerfile \
-t photoprism/$1:$3 $5 \
--push .
elif [[ $4 ]]; then
echo "build tags: $DOCKER_TAG-$3, $3"
echo "Build Tags: $BUILD_DATE-$3, $3"
if [[ $5 ]]; then
echo "build params: $5"
echo "Build Params: $5"
fi
docker buildx build \
--platform $2 \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-f docker/${1/-//}$4/Dockerfile \
-t photoprism/$1:$3 \
-t photoprism/$1:$DOCKER_TAG-$3 $5 \
-t photoprism/$1:$BUILD_DATE-$3 $5 \
--push .
else
echo "build tags: $3"
echo "Build Tags: $3"
docker buildx build \
--platform $2 \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-f docker/${1/-//}/Dockerfile \
@@ -105,7 +106,7 @@ else
--push .
fi
echo "docker/buildx-multi: removing multibuilder..."
echo "Removing multibuilder..."
docker buildx rm multibuilder
echo "docker/buildx-multi: done"
echo "Done."

View File

@@ -10,28 +10,29 @@ fi
NUMERIC='^[0-9]+$'
GOPROXY=${GOPROXY:-'https://proxy.golang.org,direct'}
DOCKER_TAG=$(date -u +%Y%m%d)
BUILD_DATE=$(date -u +%y%m%d)
echo "docker/buildx: building photoprism/$1 from docker/${1/-//}$4/Dockerfile..."
echo "Starting 'photoprism/$1' $2 build from docker/${1/-//}$4/Dockerfile..."
echo "Build Arch: $2"
if [[ $1 ]] && [[ $2 ]] && [[ -z $3 || $3 == "preview" ]]; then
echo "build tags: preview"
echo "Build Tags: preview"
docker buildx build \
--platform $2 \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-f docker/${1/-//}$4/Dockerfile \
-t photoprism/$1:preview \
--push .
elif [[ $3 =~ $NUMERIC ]]; then
echo "build tags: $3, latest"
echo "Build Tags: $3, latest"
if [[ $5 ]]; then
echo "build params: $5"
echo "Build Params: $5"
fi
docker buildx build \
@@ -46,40 +47,40 @@ elif [[ $3 =~ $NUMERIC ]]; then
-t photoprism/$1:$3 $5 \
--push .
elif [[ $4 ]] && [[ $3 == *"preview"* ]]; then
echo "build tags: $3"
echo "Build Tags: $3"
if [[ $5 ]]; then
echo "build params: $5"
echo "Build Params: $5"
fi
docker buildx build \
--platform $2 \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-f docker/${1/-//}$4/Dockerfile \
-t photoprism/$1:$3 $5 \
--push .
else
echo "build tags: $DOCKER_TAG-$3, $3"
echo "Build Tags: $BUILD_DATE-$3, $3"
if [[ $5 ]]; then
echo "build params: $5"
echo "Build Params: $5"
fi
docker buildx build \
--platform $2 \
--pull \
--no-cache \
--build-arg BUILD_TAG=$DOCKER_TAG \
--build-arg BUILD_TAG=$BUILD_DATE \
--build-arg GOPROXY \
--build-arg GODEBUG \
-f docker/${1/-//}$4/Dockerfile \
-t photoprism/$1:$3 \
-t photoprism/$1:$DOCKER_TAG-$3 $5 \
-t photoprism/$1:$BUILD_DATE-$3 $5 \
--push .
fi
echo "docker/buildx: done"
echo "Done."