Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: CI Pipeline

on:
push:
branches:
- main
tags:
- 'v*'
pull_request:
branches:
- main

env:
IMAGE_NAME: quay.io/dminnear/patternizer
GO_VERSION: '1.24'
GOLANGCI_LINT_VERSION: 'v2.1.6'

jobs:
lint-and-format:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: src/go.sum

- name: Run gofmt
run: |
if [ "$(gofmt -s -l . | wc -l)" -gt 0 ]; then
echo "The following files are not formatted:"
gofmt -s -l .
exit 1
fi
working-directory: ./src

- name: Run go vet
run: go vet ./...
working-directory: ./src

- name: Install golangci-lint
run: |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b $(go env GOPATH)/bin ${{ env.GOLANGCI_LINT_VERSION }}

- name: Run golangci-lint
run: $(go env GOPATH)/bin/golangci-lint run
working-directory: ./src

build-and-test:
runs-on: ubuntu-latest
needs: lint-and-format
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: src/go.sum

- name: Build binary
run: go build -v -o patternizer .
working-directory: ./src

- name: Run unit tests
run: go test -v ./...
working-directory: ./src

- name: Run integration tests
run: ./test/integration_test.sh
env:
PATTERNIZER_BINARY: ./src/patternizer

build-container:
runs-on: ubuntu-latest
needs: build-and-test
if: github.event_name == 'push'
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Quay.io
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}

- name: Determine tags
id: meta
run: |
echo "sha_tag=sha-$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
if [[ $GITHUB_REF == refs/tags/* ]]; then
echo "is_tag=true" >> $GITHUB_OUTPUT
echo "git_tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
else
echo "is_tag=false" >> $GITHUB_OUTPUT
fi

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./Containerfile
push: true
tags: |
${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.sha_tag }}
${{ steps.meta.outputs.is_tag == 'true' && format('{0}:{1}', env.IMAGE_NAME, steps.meta.outputs.git_tag) || '' }}
${{ steps.meta.outputs.is_tag == 'false' && format('{0}:latest', env.IMAGE_NAME) || '' }}
60 changes: 0 additions & 60 deletions .github/workflows/push-to-quay.yaml

This file was deleted.

34 changes: 26 additions & 8 deletions Containerfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,34 @@
FROM registry.access.redhat.com/ubi10:10.0
ARG GO_VERSION=1.24-alpine
ARG ALPINE_VERSION=latest

RUN dnf install -y git && dnf clean all
# Build stage
FROM docker.io/library/golang:${GO_VERSION} AS builder

WORKDIR /wd
WORKDIR /build

COPY src/go.mod src/go.sum .
RUN go mod download

COPY src/ .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o patternizer .

# Runtime stage
FROM docker.io/library/alpine:${ALPINE_VERSION}

RUN apk --no-cache add git

COPY --from=builder /build/patternizer /usr/local/bin/patternizer

ARG PATTERNIZER_RESOURCES_DIR=/tmp/resources
WORKDIR ${PATTERNIZER_RESOURCES_DIR}

COPY pattern.sh .
COPY default-cmd.sh .
COPY src/patternizer .
COPY values-secret.yaml.template .

WORKDIR /repo
ARG PATTERN_REPO_ROOT=/repo
WORKDIR ${PATTERN_REPO_ROOT}

ENV USE_SECRETS=false
ENV PATTERNIZER_RESOURCES_DIR=${PATTERNIZER_RESOURCES_DIR}

CMD ["/wd/default-cmd.sh"]
ENTRYPOINT ["patternizer"]
CMD ["help"]
Loading