add: build artifacts
This commit is contained in:
47
Dockerfile
Normal file
47
Dockerfile
Normal file
@@ -0,0 +1,47 @@
|
||||
# Multi-stage build to create a minimal Docker image
|
||||
FROM golang:1.25.6-alpine AS builder
|
||||
|
||||
# Install git for go mod download
|
||||
RUN apk add --no-cache git
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy go mod files
|
||||
COPY go.mod go.sum ./
|
||||
|
||||
# Download dependencies
|
||||
RUN go mod download
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build the binary
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o mcgod ./cmd/mcgod
|
||||
|
||||
# Final stage
|
||||
FROM alpine:latest
|
||||
|
||||
# Install ca-certificates for HTTPS requests
|
||||
RUN apk --no-cache add ca-certificates
|
||||
|
||||
# Create non-root user
|
||||
RUN adduser -D -u 10001 mcgod
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /home/mcgod
|
||||
|
||||
# Copy the binary from builder stage
|
||||
COPY --from=builder /app/mcgod .
|
||||
|
||||
# Copy the environment file
|
||||
COPY --from=builder /app/.env ./.env
|
||||
|
||||
# Change ownership to non-root user
|
||||
RUN chown -R mcgod:mcgod /home/mcgod
|
||||
|
||||
# Switch to non-root user
|
||||
USER mcgod
|
||||
|
||||
# Command to run the application
|
||||
CMD ["./mcgod"]
|
||||
89
Makefile
Normal file
89
Makefile
Normal file
@@ -0,0 +1,89 @@
|
||||
# Makefile for mcgod project
|
||||
|
||||
# Variables
|
||||
BINARY_NAME = mcgod
|
||||
DOCKER_IMAGE = docker.tipsy.codes/mcgod:latest
|
||||
DOCKER_PLATFORMS = linux/amd64,linux/arm64
|
||||
|
||||
# Default target
|
||||
.PHONY: build
|
||||
build: build-amd64
|
||||
|
||||
# Build for AMD64
|
||||
.PHONY: build-amd64
|
||||
build-amd64:
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o ${BINARY_NAME} ./cmd/mcgod
|
||||
|
||||
# Build for ARM64
|
||||
.PHONY: build-arm64
|
||||
build-arm64:
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -a -installsuffix cgo -o ${BINARY_NAME} ./cmd/mcgod
|
||||
|
||||
# Build multi-architecture Docker image
|
||||
.PHONY: build-docker
|
||||
build-docker:
|
||||
docker buildx build --platform ${DOCKER_PLATFORMS} -t ${DOCKER_IMAGE} --push .
|
||||
|
||||
# Build Docker image for current architecture
|
||||
.PHONY: build-docker-local
|
||||
build-docker-local:
|
||||
docker build -t ${DOCKER_IMAGE} .
|
||||
|
||||
# Clean build artifacts
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f ${BINARY_NAME}
|
||||
rm -f ${BINARY_NAME}.tar.gz
|
||||
|
||||
# Run the application locally
|
||||
.PHONY: run
|
||||
run:
|
||||
./${BINARY_NAME}
|
||||
|
||||
# Run with Docker
|
||||
.PHONY: run-docker
|
||||
run-docker:
|
||||
docker run --rm -it ${DOCKER_IMAGE}
|
||||
|
||||
# Format Go code
|
||||
.PHONY: fmt
|
||||
fmt:
|
||||
go fmt ./...
|
||||
|
||||
# Lint Go code
|
||||
.PHONY: lint
|
||||
lint:
|
||||
golangci-lint run
|
||||
|
||||
# Test the application
|
||||
.PHONY: test
|
||||
test:
|
||||
go test ./...
|
||||
|
||||
# All targets
|
||||
.PHONY: all
|
||||
all: build clean
|
||||
|
||||
# Generate Go documentation
|
||||
.PHONY: doc
|
||||
doc:
|
||||
go doc ./...
|
||||
|
||||
# Check dependencies
|
||||
.PHONY: deps
|
||||
deps:
|
||||
go list -m all
|
||||
|
||||
# Update dependencies
|
||||
.PHONY: update
|
||||
update:
|
||||
go get -u ./...
|
||||
|
||||
# Run vet
|
||||
.PHONY: vet
|
||||
vet:
|
||||
go vet ./...
|
||||
|
||||
# Run all checks
|
||||
.PHONY: check
|
||||
check: fmt vet lint test
|
||||
Reference in New Issue
Block a user