diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..ce86106 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,29 @@ +name: ci + +on: + push: + pull_request: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Go setup + uses: actions/setup-go@v6 + with: + go-version: "1.26.1" + cache: false + - name: Install deps + run: go mod tidy + - name: Golangci-lint + uses: golangci/golangci-lint-action@v9 + with: + args: --timeout=5m + skip-cache: true + - name: Run tests + run: go test ./... + - name: Build + run: go build -o backend ./cmd/main.go diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..63c41a7 --- /dev/null +++ b/dockerfile @@ -0,0 +1,22 @@ +FROM golang:1.26.1 as builder + +WORKDIR /app + +COPY . . +ENV CGO_ENABLED=0 +ENV GIN_MODE=release +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + go mod download && \ + go build -ldflags "-s -w" -o backend ./cmd/main.go + +FROM alpine:3.23.0 + +RUN apk add --no-cache curl openssl bash + +COPY --from=builder /app/backend . + +EXPOSE 8080 +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "curl --fail http://localhost:8080/health" ] + +CMD ["./backend"]