Skip to content

Commit

Permalink
build: refactoring build configurations
Browse files Browse the repository at this point in the history
  • Loading branch information
felipeversiane committed Jun 2, 2024
1 parent 693be71 commit 6f89a52
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 32 deletions.
35 changes: 16 additions & 19 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,23 @@ on:
pull_request:
branches: [ main ]

env:
PORT: ${{ secrets.PORT }}
GIN_MODE: ${{ secrets.GIN_MODE }}
LOG_LEVEL: ${{ secrets.LOG_LEVEL }}
LOG_OUTPUT: ${{ secrets.LOG_OUTPUT }}
AUTHORIZATION_URL: ${{ secrets.AUTHORIZATION_URL }}
POSTGRES_HOST: ${{ secrets.POSTGRES_HOST }}
POSTGRES_PORT: ${{ secrets.POSTGRES_PORT }}
POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
POSTGRES_DB: ${{ secrets.POSTGRES_DB }}
POSTGRES_URL: ${{ secrets.POSTGRES_URL }}

jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Create .env file
run: |
echo "PORT=${{ secrets.PORT }}" >> .env
echo "GIN_MODE=${{ secrets.GIN_MODE }}" >> .env
echo "JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}" >> .env
echo "JWT_SECRET_REFRESH_KEY=${{ secrets.JWT_SECRET_REFRESH_KEY }}" >> .env
echo "LOG_LEVEL=${{ secrets.LOG_LEVEL }}" >> .env
echo "LOG_OUTPUT=${{ secrets.LOG_OUTPUT }}" >> .env
echo "AUTHORIZATION_URL=${{ secrets.AUTHORIZATION_URL }}" >> .env
echo "POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}" >> .env
echo "POSTGRES_PORT=${{ secrets.POSTGRES_PORT }}" >> .env
echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}" >> .env
echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}" >> .env
echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}" >> .env
echo "POSTGRES_URL=${{ secrets.POSTGRES_URL }}" >> .env
- uses: actions/checkout@v3

- name: Set up Go
Expand All @@ -38,7 +35,7 @@ jobs:

- name: Test
run: go test -v ./internal/...

check:
needs: build
runs-on: ubuntu-22.04
Expand All @@ -49,7 +46,7 @@ jobs:
run: docker-compose up -d --build

- name: Run project
run: make ci
run: make build-ci

- name: Set up Go for E2E tests
uses: actions/setup-go@v3
Expand All @@ -67,4 +64,4 @@ jobs:

- name: Tear Down
if: always()
run: docker-compose down
run: docker-compose down
42 changes: 30 additions & 12 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,15 +1,33 @@
.PHONY: up
up:
docker compose up -d
# Developer commands
.PHONY: dev-up
dev-up:
docker-compose -f docker-compose.dev.yml up -d

.PHONY: down
down:
docker compose down
.PHONY: dev-down
dev-down:
docker-compose -f docker-compose.dev.yml down

.PHONY: ci
ci:
docker compose up -d --build api
.PHONY: dev-ci
dev-ci:
docker-compose -f docker-compose.dev.yml up -d --build api

.PHONY: runapi
runapi:
go run cmd/api/main.go
.PHONY: dev-runapi
dev-runapi:
go run cmd/api/main.go

# Build commands
.PHONY: build-up
build-up:
docker-compose -f docker-compose.ci.yml up -d

.PHONY: build-down
build-down:
docker-compose -f docker-compose.ci.yml down

.PHONY: build-ci
build-ci:
docker-compose -f docker-compose.ci.yml up -d --build api

.PHONY: build-runapi
build-runapi:
go run cmd/api/main.go
15 changes: 15 additions & 0 deletions build/api/Dockerfile-build
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM golang:1.22-alpine3.20 as builder

WORKDIR /app
COPY . .

ENV GIN_MODE=${GIN_MODE:-release}

RUN go get -d -v ./...
RUN CGO_ENABLED=0 GOOS=linux go build -o api ./cmd/api/main.go

FROM scratch
WORKDIR /
COPY --from=builder /app/api ./

ENTRYPOINT ["./api"]
File renamed without changes.
65 changes: 65 additions & 0 deletions docker-compose.ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
version: '3.0'

services:
db:
container_name: pg01
environment:
- POSTGRES_HOST=${POSTGRES_HOST}
- POSTGRES_PORT=${POSTGRES_PORT}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
build:
context: .
dockerfile: build/db/Dockerfile-build
volumes:
- local_postgres_data:/var/lib/postgresql/data
ports:
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
networks:
- golangnetwork
healthcheck:
test: ["CMD-SHELL", "pg_isready -q -d ${POSTGRES_DB} -U ${POSTGRES_USER} || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 20s

migrate:
image: migrate/migrate
container_name: mg01
volumes:
- ./migrations:/migrations
command: ["-path", "/migrations", "-database", "${POSTGRES_URL}", "up"]
depends_on:
db:
condition: service_healthy
networks:
- golangnetwork

api:
build:
context: .
dockerfile: build/api/Dockerfile
image: app
container_name: go01
restart: unless-stopped
environment:
- PORT=${PORT}
- GIN_MODE=${GIN_MODE}
- LOG_LEVEL=${LOG_LEVEL}
- LOG_OUTPUT=${LOG_OUTPUT}
- AUTHORIZATION_URL=${AUTHORIZATION_URL}
ports:
- "${PORT}:${PORT}"
depends_on:
- db
- migrate
networks:
- golangnetwork

volumes:
local_postgres_data: {}

networks:
golangnetwork:
2 changes: 1 addition & 1 deletion docker-compose.yaml → docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ services:
env_file: .env
build:
context: .
dockerfile: build/db/Dockerfile
dockerfile: build/db/Dockerfile-dev
volumes:
- local_postgres_data:/var/lib/postgresql/data
ports:
Expand Down

0 comments on commit 6f89a52

Please sign in to comment.