ci: merge test+build+push into single pipeline
CI / test-build-push (pull_request) Failing after 8s

- 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
This commit is contained in:
Test
2026-09-06 06:12:16 -07:00
parent 7ed0642819
commit bc86fb7242
3 changed files with 42 additions and 71 deletions
-46
View File
@@ -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 }}"
+31 -12
View File
@@ -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 }}"
+11 -13
View File
@@ -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"]