Refactor Docker (#254)
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
Refactor docker to use makefile build commands Reviewed-on: #254 Co-authored-by: Rhys Lloyd <krakow20@gmail.com> Co-committed-by: Rhys Lloyd <krakow20@gmail.com>
This commit was merged in pull request #254.
This commit is contained in:
109
.drone.yml
109
.drone.yml
@@ -7,7 +7,43 @@ platform:
|
||||
arch: amd64
|
||||
|
||||
steps:
|
||||
- name: api
|
||||
- name: build-backend
|
||||
image: golang:1.24.0
|
||||
environment:
|
||||
GIT_USER:
|
||||
from_secret: GIT_USER
|
||||
GIT_PASS:
|
||||
from_secret: GIT_PASS
|
||||
commands:
|
||||
- echo "machine git.itzana.me login $${GIT_USER} password $${GIT_PASS}" > ~/.netrc
|
||||
- chmod 600 ~/.netrc
|
||||
- make build-backend
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
- staging
|
||||
|
||||
- name: build-validator
|
||||
image: clux/muslrust:1.86.0-stable
|
||||
commands:
|
||||
- make build-validator
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
- staging
|
||||
|
||||
- name: build-frontend
|
||||
image: oven/bun:1.2.8
|
||||
commands:
|
||||
- apt-get update
|
||||
- apt-get install make
|
||||
- make build-frontend
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
- staging
|
||||
|
||||
- name: image-backend
|
||||
image: plugins/docker
|
||||
settings:
|
||||
registry: registry.itzana.me
|
||||
@@ -19,8 +55,10 @@ steps:
|
||||
from_secret: REGISTRY_USER
|
||||
password:
|
||||
from_secret: REGISTRY_PASS
|
||||
dockerfile: Containerfile
|
||||
dockerfile: Dockerfile
|
||||
context: .
|
||||
depends_on:
|
||||
- build-backend
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
@@ -28,7 +66,7 @@ steps:
|
||||
event:
|
||||
- push
|
||||
|
||||
- name: frontend
|
||||
- name: image-frontend
|
||||
image: plugins/docker
|
||||
settings:
|
||||
registry: registry.itzana.me
|
||||
@@ -42,6 +80,8 @@ steps:
|
||||
from_secret: REGISTRY_PASS
|
||||
dockerfile: web/Containerfile
|
||||
context: web
|
||||
depends_on:
|
||||
- build-frontend
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
@@ -49,7 +89,7 @@ steps:
|
||||
event:
|
||||
- push
|
||||
|
||||
- name: validator
|
||||
- name: image-validator
|
||||
image: plugins/docker
|
||||
settings:
|
||||
registry: registry.itzana.me
|
||||
@@ -63,6 +103,8 @@ steps:
|
||||
from_secret: REGISTRY_PASS
|
||||
dockerfile: validation/Containerfile
|
||||
context: validation
|
||||
depends_on:
|
||||
- build-validator
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
@@ -83,9 +125,9 @@ steps:
|
||||
PASSWORD:
|
||||
from_secret: ARGO_PASS
|
||||
depends_on:
|
||||
- api
|
||||
- frontend
|
||||
- validator
|
||||
- image-backend
|
||||
- image-frontend
|
||||
- image-validator
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
@@ -94,64 +136,19 @@ steps:
|
||||
- push
|
||||
|
||||
# pr dry run
|
||||
- name: api-pr
|
||||
image: plugins/docker
|
||||
settings:
|
||||
registry: registry.itzana.me
|
||||
repo: registry.itzana.me/strafesnet/maptest-validator
|
||||
tags:
|
||||
- ${DRONE_BRANCH}-${DRONE_BUILD_NUMBER}
|
||||
- ${DRONE_BRANCH}
|
||||
dockerfile: Containerfile
|
||||
context: .
|
||||
dry_run: true
|
||||
when:
|
||||
event:
|
||||
- pull_request
|
||||
|
||||
- name: frontend-pr
|
||||
image: plugins/docker
|
||||
settings:
|
||||
registry: registry.itzana.me
|
||||
repo: registry.itzana.me/strafesnet/maptest-validator
|
||||
tags:
|
||||
- ${DRONE_BRANCH}-${DRONE_BUILD_NUMBER}
|
||||
- ${DRONE_BRANCH}
|
||||
dockerfile: web/Containerfile
|
||||
context: web
|
||||
dry_run: true
|
||||
when:
|
||||
event:
|
||||
- pull_request
|
||||
|
||||
- name: validator-pr
|
||||
image: plugins/docker
|
||||
settings:
|
||||
registry: registry.itzana.me
|
||||
repo: registry.itzana.me/strafesnet/maptest-validator
|
||||
tags:
|
||||
- ${DRONE_BRANCH}-${DRONE_BUILD_NUMBER}
|
||||
- ${DRONE_BRANCH}
|
||||
dockerfile: validation/Containerfile
|
||||
context: validation
|
||||
dry_run: true
|
||||
when:
|
||||
event:
|
||||
- pull_request
|
||||
|
||||
- name: build-pr
|
||||
image: alpine
|
||||
commands:
|
||||
- echo "Success!"
|
||||
depends_on:
|
||||
- api-pr
|
||||
- frontend-pr
|
||||
- validator-pr
|
||||
- build-backend
|
||||
- build-validator
|
||||
- build-frontend
|
||||
when:
|
||||
event:
|
||||
- pull_request
|
||||
---
|
||||
kind: signature
|
||||
hmac: 11e6d7f1eb839d3798fdcb642ca5523c011bd14c1f3a0343a9c3106bab9ef142
|
||||
hmac: 9880a1bb4725c81e38b5d185bbfccaf70ddf8021299557d1815f78e78817c5e6
|
||||
|
||||
...
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
build
|
||||
.idea
|
||||
/target
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
# Stage 1: Build
|
||||
FROM registry.itzana.me/docker-proxy/golang:1.24 AS builder
|
||||
|
||||
# Set the working directory in the container
|
||||
WORKDIR /app
|
||||
|
||||
# Copy go.mod and go.sum files
|
||||
COPY go.mod go.sum ./
|
||||
|
||||
# Copy the entire project
|
||||
COPY . .
|
||||
|
||||
# Build the Go application
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o service ./cmd/maps-service/service.go
|
||||
|
||||
# Stage 2: Run
|
||||
FROM registry.itzana.me/docker-proxy/alpine:3.21
|
||||
|
||||
# Set up a non-root user for security
|
||||
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
||||
USER appuser
|
||||
|
||||
# Set the working directory in the container
|
||||
WORKDIR /home/appuser
|
||||
|
||||
# Copy the built application from the builder stage
|
||||
COPY --from=builder /app/service .
|
||||
|
||||
# Expose application port (adjust if needed)
|
||||
EXPOSE 8081
|
||||
|
||||
# Command to run the application
|
||||
ENTRYPOINT ["./service"]
|
||||
3
Dockerfile
Normal file
3
Dockerfile
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM alpine
|
||||
COPY build/server /
|
||||
ENTRYPOINT ["/server"]
|
||||
46
Makefile
46
Makefile
@@ -1,12 +1,42 @@
|
||||
submissions:
|
||||
DOCKER_BUILDKIT=1 docker build . -f Containerfile -t maps-service-submissions
|
||||
clean:
|
||||
rm -rf build
|
||||
rm -rf web/build
|
||||
|
||||
web:
|
||||
docker build web -f web/Containerfile -t maps-service-web
|
||||
# build
|
||||
build-backend:
|
||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o build/server cmd/maps-service/service.go
|
||||
|
||||
validation:
|
||||
docker build validation -f validation/Containerfile -t maps-service-validation
|
||||
build-validator:
|
||||
cargo build --release --target x86_64-unknown-linux-musl --bin maps-validation
|
||||
|
||||
all: submissions web validation
|
||||
build-frontend:
|
||||
rm -rf web/build
|
||||
cd web && bun install --frozen-lockfile
|
||||
cd web && bun run build
|
||||
|
||||
.PHONY: submissions web validation
|
||||
build: build-backend build-validator build-frontend
|
||||
|
||||
# image
|
||||
image-backend:
|
||||
docker build . -t maptest-api
|
||||
|
||||
image-validator:
|
||||
docker build . -f validation/Containerfile -t maptest-validator
|
||||
|
||||
image-frontend:
|
||||
docker build web -f web/Containerfile -t maptest-frontend
|
||||
|
||||
# docker
|
||||
docker-backend:
|
||||
make build-backend
|
||||
make image-backend
|
||||
docker-validator:
|
||||
make build-validator
|
||||
make image-validator
|
||||
docker-frontend:
|
||||
make build-frontend
|
||||
make image-frontend
|
||||
|
||||
docker: docker-backend docker-validator docker-frontend
|
||||
|
||||
.PHONY: clean build-backend build-validator build-frontend build image-backend image-validator image-frontend docker-backend docker-validator docker-frontend docker
|
||||
|
||||
@@ -13,7 +13,7 @@ services:
|
||||
|
||||
submissions:
|
||||
image:
|
||||
maps-service-submissions
|
||||
maptest-api
|
||||
container_name: submissions
|
||||
command: [
|
||||
# debug
|
||||
@@ -45,7 +45,7 @@ services:
|
||||
|
||||
web:
|
||||
image:
|
||||
maps-service-web
|
||||
maptest-frontend
|
||||
networks:
|
||||
- maps-service-network
|
||||
ports:
|
||||
@@ -56,7 +56,7 @@ services:
|
||||
|
||||
validation:
|
||||
image:
|
||||
maps-service-validation
|
||||
maptest-validator
|
||||
container_name: validation
|
||||
env_file:
|
||||
- ../auth-compose/strafesnet_staging.env
|
||||
|
||||
@@ -1,24 +1,3 @@
|
||||
# Using the `rust-musl-builder` as base image, instead of
|
||||
# the official Rust toolchain
|
||||
FROM registry.itzana.me/docker-proxy/clux/muslrust:1.86.0-stable AS chef
|
||||
USER root
|
||||
RUN cargo install cargo-chef
|
||||
WORKDIR /app
|
||||
|
||||
FROM chef AS planner
|
||||
COPY . .
|
||||
RUN cargo chef prepare --recipe-path recipe.json
|
||||
|
||||
FROM chef AS builder
|
||||
COPY --from=planner /app/recipe.json recipe.json
|
||||
COPY api ./api
|
||||
# Notice that we are specifying the --target flag!
|
||||
RUN cargo chef cook --release --target x86_64-unknown-linux-musl --recipe-path recipe.json
|
||||
COPY . .
|
||||
RUN cargo build --release --target x86_64-unknown-linux-musl --bin maps-validation
|
||||
|
||||
FROM registry.itzana.me/docker-proxy/alpine:3.21 AS runtime
|
||||
RUN addgroup -S myuser && adduser -S myuser -G myuser
|
||||
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/maps-validation /usr/local/bin/
|
||||
USER myuser
|
||||
ENTRYPOINT ["/usr/local/bin/maps-validation"]
|
||||
FROM alpine:3.21 AS runtime
|
||||
COPY /target/x86_64-unknown-linux-musl/release/maps-validation /
|
||||
ENTRYPOINT ["/maps-validation"]
|
||||
|
||||
Reference in New Issue
Block a user