From bc86fb72424057e5e9a4216190d9e78cee2504e4 Mon Sep 17 00:00:00 2001 From: Test Date: Sun, 6 Sep 2026 06:12:16 -0700 Subject: [PATCH] ci: merge test+build+push into single pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Single job: vet → test → build binary → build image → push - Image build/push only on main push (skip on PR) - Fixed Dockerfile: golang:1.26, build cmd/worker, removed HTTP healthcheck - Removed separate build-push.yml --- .gitea/workflows/build-push.yml | 46 --------------------------------- .gitea/workflows/ci.yaml | 43 +++++++++++++++++++++--------- Dockerfile | 24 ++++++++--------- 3 files changed, 42 insertions(+), 71 deletions(-) delete mode 100644 .gitea/workflows/build-push.yml diff --git a/.gitea/workflows/build-push.yml b/.gitea/workflows/build-push.yml deleted file mode 100644 index e37506b..0000000 --- a/.gitea/workflows/build-push.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Build & Push Workflows Image - -on: - push: - branches: - - main - -jobs: - build-push: - runs-on: golang - env: - REGISTRY: forgejo.riotpiao.com - IMAGE: forgejo.riotpiao.com/rock/poimen-workflows - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Download dependencies - run: go mod download - - - name: Get short SHA - id: sha - run: | - SHORT_SHA=$(git rev-parse --short HEAD) - echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT - - - name: Registry login - run: | - echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" \ - --username "${REGISTRY_USER}" --password-stdin - env: - REGISTRY_USER: ${{ secrets.FORGEJO_REGISTRY_USER }} - REGISTRY_TOKEN: ${{ secrets.FORGEJO_REGISTRY_TOKEN }} - - - name: Build image - run: | - docker build --no-cache \ - -t "${IMAGE}:${{ steps.sha.outputs.short_sha }}" \ - -t "${IMAGE}:latest" \ - . - - - name: Push image - run: | - docker push "${IMAGE}:${{ steps.sha.outputs.short_sha }}" - docker push "${IMAGE}:latest" - echo "✓ Image pushed: ${IMAGE}:${{ steps.sha.outputs.short_sha }}" diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 910fbe2..480f6e4 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -1,4 +1,4 @@ -name: ci +name: CI on: push: @@ -6,13 +6,14 @@ on: pull_request: jobs: - test: + test-build-push: runs-on: golang container: image: golang:1.26 env: GOPRIVATE: forgejo.riotpiao.com - GITHUB_TOKEN: ${{ secrets.REGISTRY_PAT }} + REGISTRY: forgejo.riotpiao.com + IMAGE: forgejo.riotpiao.com/rock/poimen-workflows steps: - name: Configure git authentication run: | @@ -30,14 +31,32 @@ jobs: - name: Download dependencies run: go mod download - - name: Tidy modules - run: go mod tidy - - - name: Test - run: go test -v ./... - - - name: Build - run: go build -o /tmp/poimen-bin/ ./cmd/... - - name: Vet run: go vet ./... + + - name: Test + run: go test ./... + + - name: Build binary + run: CGO_ENABLED=0 GOOS=linux go build -o /tmp/poimen-worker ./cmd/worker + + - name: Get short SHA + id: sha + run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + - name: Registry login + if: github.ref == 'refs/heads/main' && github.event_name == 'push' + run: | + echo "${{ secrets.FORGEJO_REGISTRY_TOKEN }}" | docker login "${REGISTRY}" \ + --username "${{ secrets.FORGEJO_REGISTRY_USER }}" --password-stdin + + - name: Build and push image + if: github.ref == 'refs/heads/main' && github.event_name == 'push' + run: | + docker build \ + -t "${IMAGE}:${{ steps.sha.outputs.short_sha }}" \ + -t "${IMAGE}:latest" \ + . + docker push "${IMAGE}:${{ steps.sha.outputs.short_sha }}" + docker push "${IMAGE}:latest" + echo "✓ Pushed ${IMAGE}:${{ steps.sha.outputs.short_sha }}" diff --git a/Dockerfile b/Dockerfile index 45291be..f2e8261 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,20 @@ -FROM golang:1.21-alpine as builder +FROM golang:1.26-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download - COPY . . -RUN CGO_ENABLED=0 GOOS=linux go build -o workflows ./cmd/poimen/main.go -FROM alpine:latest +# Re-use CI-built binary if present, otherwise build +ARG BINARY_PATH= +RUN if [ -n "$BINARY_PATH" ] && [ -f "$BINARY_PATH" ]; then \ + cp "$BINARY_PATH" worker; \ + else \ + CGO_ENABLED=0 GOOS=linux go build -o worker ./cmd/worker; \ + fi +FROM alpine:3.20 RUN apk --no-cache add ca-certificates - WORKDIR /app -COPY --from=builder /app/workflows . - -EXPOSE 8080 - -HEALTHCHECK --interval=10s --timeout=5s --start-period=10s --retries=3 \ - CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1 - -ENTRYPOINT ["./workflows"] +COPY --from=builder /app/worker . +ENTRYPOINT ["./worker"]