From 7928949a8f3be25459e966d49e2c4464ccd1cd13 Mon Sep 17 00:00:00 2001 From: Logan Cox Date: Wed, 19 Jun 2024 11:37:02 +0100 Subject: [PATCH] feat: add base CI --- .github/workflows/ci.yaml | 22 ++++++++++++++++++++++ Dockerfile | 21 +++++++++++---------- Makefile | 25 +++++++++++++------------ docker-compose-test.yaml | 10 ++++++++++ 4 files changed, 56 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/ci.yaml create mode 100644 docker-compose-test.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..214cdb8 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,22 @@ +name: CI + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + lint: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/setup-go@v4 + with: + go-version: '1.22.3' + cache: true + - uses: actions/checkout@v3 + - name: golangci-lint + uses: golangci/golangci-lint-action@v6.0.1 + with: + version: latest diff --git a/Dockerfile b/Dockerfile index 8b6055c..26fb654 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,25 +2,26 @@ FROM alpine:3.20.0 AS base RUN apk update RUN apk upgrade -RUN apk add --update go=1.22.3-r0 - -FROM base AS tester - -WORKDIR /opt/url-short - -ADD . /opt/url-short - -CMD ["go", "test"] FROM base AS builder +RUN apk add --update go=1.22.3-r0 + WORKDIR /build ADD . /build RUN go build -o main . -FROM builder AS production +FROM base AS tester + +RUN apk add --update go=1.22.3-r0 + +RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.59.1 + +WORKDIR /opt/url-short/ + +FROM base AS production WORKDIR /opt/url-short/ diff --git a/Makefile b/Makefile index a17fc74..9498495 100644 --- a/Makefile +++ b/Makefile @@ -1,32 +1,33 @@ +COMPOSE_TEST_FILE="${PWD}/docker-compose-test.yaml" + fmt: - go fmt ./... + COMPOSE_FILE=${COMPOSE_TEST_FILE} docker compose run --rm --remove-orphans api go fmt .PHONY:fmt lint: fmt - golangci-lint run -v + COMPOSE_FILE=${COMPOSE_TEST_FILE} docker compose run --rm --remove-orphans api golangci-lint run -v .PHONY:lint -vet: lint - go vet ./... -.PHONY:vet - build: - docker build . -t "url-short:latest" + docker build . -t "url-short:latest" .PHONY:build +build/test: + docker build . -t "url-short:test" --target tester +.PHONY:build/test + run: - docker compose up -d + docker compose up -d .PHONY:run stop: - docker compose down + docker compose down .PHONY:stop test: - docker build . -t "url-short:test" --target tester - docker run -t "url-short:test" + COMPOSE_FILE=${COMPOSE_TEST_FILE} docker compose run --rm --remove-orphans api go test ./... .PHONY:test migrate: - goose -dir sql/schema postgres "postgres://url_short:password@localhost:5002/url_short" up + goose -dir sql/schema postgres "postgres://url_short:password@localhost:5002/url_short" up .PHONY:migrate diff --git a/docker-compose-test.yaml b/docker-compose-test.yaml new file mode 100644 index 0000000..7b8c1fb --- /dev/null +++ b/docker-compose-test.yaml @@ -0,0 +1,10 @@ +version: '3.1' + +services: + api: + image: url-short:test + env_file: + - .env + volumes: + - ./:/opt/url-short +