feat: allow using custom container prefix

This commit is contained in:
Paul Pan 2024-02-19 15:42:45 +08:00
parent db16b3e76f
commit a193dee410
Signed by: Paul
GPG Key ID: D639BDF5BA578AF4
6 changed files with 53 additions and 26 deletions

View File

@ -9,6 +9,8 @@ LDFLAGS += -X $(PKG_BASE)/cmd.BuildTime=$(BUILD_TIME)
LDFLAGS += -X $(PKG_BASE)/cmd.Version=$(VERSION) LDFLAGS += -X $(PKG_BASE)/cmd.Version=$(VERSION)
LDFLAGS += -X $(PKG_BASE)/cmd.GitCommit=$(GIT_COMMIT) LDFLAGS += -X $(PKG_BASE)/cmd.GitCommit=$(GIT_COMMIT)
LDFLAGS += -X $(PKG_BASE)/cmd.SentryDSN=$(shell cat dsn.txt) LDFLAGS += -X $(PKG_BASE)/cmd.SentryDSN=$(shell cat dsn.txt)
LDFLAGS += -X $(PKG_BASE)/internal/service/runner.ContainerImageFull=$(CONTAINER_IMAGE_FULL)
LDFLAGS += -X $(PKG_BASE)/internal/service/runner.ContainerImageRun=$(CONTAINER_IMAGE_RUN)
LDFLAGS += -s -w LDFLAGS += -s -w
GOBUILD := $(GO) build -ldflags '$(LDFLAGS)' GOBUILD := $(GO) build -ldflags '$(LDFLAGS)'

View File

@ -8,6 +8,10 @@ WORKDIR /builder
RUN apk add --no-cache git make RUN apk add --no-cache git make
RUN --mount=type=cache,id=golang,target=/go/pkg go install github.com/swaggo/swag/cmd/swag@latest RUN --mount=type=cache,id=golang,target=/go/pkg go install github.com/swaggo/swag/cmd/swag@latest
ARG IMAGE_PREFIX=git.0x7f.app/woj
ENV CONTAINER_IMAGE_FULL=${IMAGE_PREFIX}/ubuntu-full:latest
ENV CONTAINER_IMAGE_RUN=${IMAGE_PREFIX}/ubuntu-run:latest
COPY go.mod /builder/go.mod COPY go.mod /builder/go.mod
COPY go.sum /builder/go.sum COPY go.sum /builder/go.sum
RUN --mount=type=cache,id=golang,target=/go/pkg go mod download RUN --mount=type=cache,id=golang,target=/go/pkg go mod download

View File

@ -2,54 +2,63 @@
. resource/runner/scripts/common.sh . resource/runner/scripts/common.sh
# version # Version
VERSION="$(cat VERSION)" VERSION="$(cat VERSION)"
log_info "VERSION: $VERSION" log_info "VERSION: $VERSION"
# Image Prefix
IMAGE_PREFIX=${IMAGE_PREFIX:-"git.0x7f.app/woj"}
function docker_build() {
tag_name="$IMAGE_PREFIX/$1"
docker_file="$2"
shift 2
$DOCKER build -t "$tag_name" -f "$docker_file" --build-arg "IMAGE_PREFIX=$IMAGE_PREFIX" "$@" . ||
{ log_error "[!] Failed to build $tag_name"; exit 1; }
}
function build_base() { function build_base() {
log_info "[+] Building Base Images" log_info "[+] Building Base Images"
pushd resource/runner || exit 1 pushd resource/runner || exit 1
$DOCKER build -t git.0x7f.app/woj/ubuntu-full:latest -f scripts/ubuntu-full.Dockerfile . || docker_build "ubuntu-full:latest" "scripts/ubuntu-full.Dockerfile"
{ log_error "Build Full Image failed"; exit 1; } docker_build "ubuntu-run:latest" "scripts/ubuntu-run.Dockerfile"
$DOCKER build -t git.0x7f.app/woj/ubuntu-run:latest -f scripts/ubuntu-run.Dockerfile . ||
{ log_error "Build Tiny Image failed"; exit 1; }
popd || exit 1 popd || exit 1
} }
function push_base() { function push_base() {
log_info "[+] Pushing Base Images" log_info "[+] Pushing Base Images"
$DOCKER push "git.0x7f.app/woj/ubuntu-full:latest" $DOCKER push "$IMAGE_PREFIX/ubuntu-full:latest"
$DOCKER push "git.0x7f.app/woj/ubuntu-run:latest" $DOCKER push "$IMAGE_PREFIX/ubuntu-run:latest"
} }
function build_server() { function build_server() {
log_info "[+] Building Server" log_info "[+] Building Server"
$DOCKER build -t "git.0x7f.app/woj/woj-server:latest" -f Server.Dockerfile . || docker_build "woj-server:latest" "Server.Dockerfile"
{ log_error "[!] Failed to build Server"; exit 1; }
} }
function build_runner() { function build_runner() {
log_info "[+] Building Runner" log_info "[+] Building Runner"
$DOCKER build \ if [[ "$DOCKER" == "docker" ]]; then
--cap-add=sys_admin \ # docker do not support --cap-add during build time
--security-opt label=disable \ docker_build "woj-runner:latest" "Runner.Dockerfile" --allow security.insecure
-t "git.0x7f.app/woj/woj-runner:latest" \ else
-f Runner.Dockerfile . || # podman
{ log_error "[!] Failed to build Runner"; exit 1; } docker_build "woj-runner:latest" "Runner.Dockerfile" --cap-add=sys_admin --security-opt label=disable
fi
} }
function push_server() { function push_server() {
log_info "[+] Pushing Server Images" log_info "[+] Pushing Server Images"
$DOCKER push "git.0x7f.app/woj/woj-server:latest" $DOCKER push "$IMAGE_PREFIX/woj-server:latest"
$DOCKER tag "git.0x7f.app/woj/woj-server:latest" "git.0x7f.app/woj/woj-server:$VERSION" $DOCKER tag "$IMAGE_PREFIX/woj-server:latest" "$IMAGE_PREFIX/woj-server:$VERSION"
$DOCKER push "git.0x7f.app/woj/woj-server:$VERSION" $DOCKER push "$IMAGE_PREFIX/woj-server:$VERSION"
} }
function push_runner() { function push_runner() {
log_info "[+] Pushing Runner Images" log_info "[+] Pushing Runner Images"
$DOCKER push "git.0x7f.app/woj/woj-runner:latest" $DOCKER push "$IMAGE_PREFIX/woj-runner:latest"
$DOCKER tag "git.0x7f.app/woj/woj-runner:latest" "git.0x7f.app/woj/woj-runner:$VERSION" $DOCKER tag "$IMAGE_PREFIX/woj-runner:latest" "$IMAGE_PREFIX/woj-runner:$VERSION"
$DOCKER push "git.0x7f.app/woj/woj-runner:$VERSION" $DOCKER push "$IMAGE_PREFIX/woj-runner:$VERSION"
} }
if [ "$1" == "base" ]; then if [ "$1" == "base" ]; then

View File

@ -17,9 +17,9 @@ var (
TmpDir = "./tmp/" TmpDir = "./tmp/"
) )
const ( var (
ContainerImageFull = "git.0x7f.app/woj/ubuntu-full:latest" ContainerImageFull string
ContainerImageRun = "git.0x7f.app/woj/ubuntu-run:latest" ContainerImageRun string
) )
type JudgeMetaRun struct { type JudgeMetaRun struct {
@ -48,6 +48,16 @@ func init() {
ProblemDir = path.Join(Prefix, ProblemDir) ProblemDir = path.Join(Prefix, ProblemDir)
UserDir = path.Join(Prefix, UserDir) UserDir = path.Join(Prefix, UserDir)
TmpDir = path.Join(Prefix, TmpDir) TmpDir = path.Join(Prefix, TmpDir)
fmt.Println("ImageFull:", ContainerImageFull)
fmt.Println("ImageRun:", ContainerImageRun)
if ContainerImageFull == "" {
ContainerImageFull = "git.0x7f.app/woj/ubuntu-full:latest"
}
if ContainerImageRun == "" {
ContainerImageRun = "git.0x7f.app/woj/ubuntu-run:latest"
}
} }
func (s *service) ProblemExists(meta *JudgeMeta) bool { func (s *service) ProblemExists(meta *JudgeMeta) bool {

View File

@ -9,7 +9,7 @@ RUN apt-get update && apt-get upgrade -y && apt-get install -y software-prope
gcc g++ clang make cmake autoconf m4 libtool gperf \ gcc g++ clang make cmake autoconf m4 libtool gperf \
python3 pypy3 \ python3 pypy3 \
&& apt-get clean && rm -rf /var/lib/apt/lists && apt-get clean && rm -rf /var/lib/apt/lists
RUN wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz && rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz && rm go1.21.6.linux-amd64.tar.gz RUN wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz && rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz && rm go1.22.0.linux-amd64.tar.gz
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH=/usr/local/go/bin:/root/.cargo/bin:$PATH ENV PATH=/usr/local/go/bin:/root/.cargo/bin:$PATH

View File

@ -1,4 +1,6 @@
FROM git.0x7f.app/woj/ubuntu-full:latest AS builder ARG IMAGE_PREFIX=git.0x7f.app/woj
FROM ${IMAGE_PREFIX}/ubuntu-full:latest AS builder
FROM docker.io/library/ubuntu:22.04 FROM docker.io/library/ubuntu:22.04
RUN apt-get update && apt-get upgrade -y \ RUN apt-get update && apt-get upgrade -y \