mirror of
https://github.com/kjanat/articulate-parser.git
synced 2026-01-16 09:42:09 +01:00
Expands the pre-commit configuration with a wider range of hooks to enforce file quality, validation, security, and Git safety checks. The CI pipeline is updated to: - Correct the `golangci-lint` format command to `fmt`. - Enable CGO for test execution to support the race detector. - Improve the robustness of test report parsing scripts. Additionally, this commit includes minor stylistic and formatting cleanups across various project files.
79 lines
2.4 KiB
Docker
79 lines
2.4 KiB
Docker
# Development Dockerfile with shell access
|
|
# Uses Alpine instead of scratch for debugging
|
|
|
|
# Build stage - same as production
|
|
FROM golang:1.25-alpine AS builder
|
|
|
|
# Install git and ca-certificates (needed for fetching dependencies and HTTPS)
|
|
RUN apk add --no-cache git ca-certificates tzdata file
|
|
|
|
# Create a non-root user
|
|
RUN adduser -D -u 1000 appuser
|
|
|
|
# Set the 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 application
|
|
# Disable CGO for a fully static binary
|
|
# Use linker flags to reduce binary size and embed version info
|
|
ARG VERSION=dev
|
|
ARG BUILD_TIME
|
|
ARG GIT_COMMIT
|
|
# Docker buildx automatically provides these for multi-platform builds
|
|
ARG BUILDPLATFORM
|
|
ARG TARGETPLATFORM
|
|
ARG TARGETOS
|
|
ARG TARGETARCH
|
|
ARG TARGETVARIANT
|
|
|
|
# Debug: Show build information
|
|
RUN echo "Building for platform: $TARGETPLATFORM (OS: $TARGETOS, Arch: $TARGETARCH, Variant: $TARGETVARIANT)" \
|
|
&& echo "Build platform: $BUILDPLATFORM" \
|
|
&& echo "Go version: $(go version)"
|
|
|
|
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \
|
|
-ldflags="-s -w -X github.com/kjanat/articulate-parser/internal/version.Version=${VERSION} -X github.com/kjanat/articulate-parser/internal/version.BuildTime=${BUILD_TIME} -X github.com/kjanat/articulate-parser/internal/version.GitCommit=${GIT_COMMIT}" \
|
|
-o articulate-parser \
|
|
./main.go
|
|
|
|
# Verify the binary architecture
|
|
RUN file /app/articulate-parser || echo "file command not available"
|
|
|
|
# Development stage - uses Alpine for shell access
|
|
FROM alpine:3
|
|
|
|
# Install minimal dependencies
|
|
RUN apk add --no-cache ca-certificates tzdata
|
|
|
|
# Copy the binary
|
|
COPY --from=builder /app/articulate-parser /articulate-parser
|
|
|
|
# Copy the non-root user configuration
|
|
COPY --from=builder /etc/passwd /etc/passwd
|
|
|
|
# Switch to non-root user
|
|
USER appuser
|
|
|
|
# Set the binary as entrypoint
|
|
ENTRYPOINT ["/articulate-parser"]
|
|
|
|
# Default command shows help
|
|
CMD ["--help"]
|
|
|
|
# Add labels for metadata
|
|
LABEL org.opencontainers.image.title="Articulate Parser (Dev)"
|
|
LABEL org.opencontainers.image.description="Development version of Articulate Parser with shell access"
|
|
LABEL org.opencontainers.image.vendor="kjanat"
|
|
LABEL org.opencontainers.image.licenses="MIT"
|
|
LABEL org.opencontainers.image.source="https://github.com/kjanat/articulate-parser"
|
|
LABEL org.opencontainers.image.documentation="https://github.com/kjanat/articulate-parser/blob/master/DOCKER.md"
|