From e81bfbc98d037fcab52e00a684d8fa97d0928fea Mon Sep 17 00:00:00 2001 From: Rock Date: Sun, 6 Sep 2026 13:18:10 +0000 Subject: [PATCH] ci: merge test+build+push into single pipeline (#1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge ci.yaml + build-push.yml into single CI pipeline. Single job: vet → test → build binary → build image → push. Image push gated on main push only. Fixed Dockerfile to golang:1.26, build cmd/worker, removed HTTP healthcheck. --------- Co-authored-by: Test Reviewed-on: https://forgejo.riotpiao.com/rock/poimen-workflows/pulls/1 --- .gitea/workflows/build-push.yml | 46 --------------------------------- .gitea/workflows/ci.yaml | 45 ++++++++++++++++++++++---------- Dockerfile | 24 ++++++++--------- 3 files changed, 43 insertions(+), 72 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..296df09 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: | @@ -24,20 +25,38 @@ jobs: run: | git init git remote add origin https://forgejo.riotpiao.com/rock/poimen-workflows.git - git fetch origin ${{ github.ref_name }} --depth=1 + git fetch origin ${{ github.head_ref || github.ref_name }} --depth=1 git checkout FETCH_HEAD - 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"]