Initial commit

This commit is contained in:
jpgiannetti
2026-01-31 11:45:11 +01:00
commit f99fb3c614
166 changed files with 115155 additions and 0 deletions

146
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,146 @@
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
test:
name: Test
runs-on: ubuntu-latest
services:
postgres:
image: postgis/postgis:16-3.4-alpine
env:
POSTGRES_DB: roadwave_test
POSTGRES_USER: roadwave
POSTGRES_PASSWORD: test_password
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
redis:
image: redis:7-alpine
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6379:6379
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Cache Go modules
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Install dependencies
run: |
go mod download
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
- name: Generate sqlc code
run: sqlc generate
- name: Run migrations
env:
DATABASE_URL: postgres://roadwave:test_password@localhost:5432/roadwave_test?sslmode=disable
run: migrate -path migrations -database "$DATABASE_URL" up
- name: Run unit tests
run: go test -v -race -short -coverprofile=coverage.out ./...
- name: Run BDD tests
run: |
go install github.com/cucumber/godog/cmd/godog@latest
godog run features/
- name: Check coverage
run: |
coverage=$(go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//')
echo "Total coverage: $coverage%"
if (( $(echo "$coverage < 80" | bc -l) )); then
echo "❌ Coverage $coverage% is below 80%"
exit 1
fi
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./coverage.out
flags: unittests
name: codecov-umbrella
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v4
with:
version: latest
args: --timeout=5m
build:
name: Build
runs-on: ubuntu-latest
needs: [test, lint]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Build binary
run: |
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -o bin/api ./cmd/api
- name: Build Docker image
run: docker build -f docker/Dockerfile -t roadwave:${{ github.sha }} .
- name: Log in to Docker registry (main branch only)
if: github.ref == 'refs/heads/main'
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- name: Push Docker image (main branch only)
if: github.ref == 'refs/heads/main'
run: |
docker tag roadwave:${{ github.sha }} ${{ secrets.DOCKER_REGISTRY }}/roadwave:latest
docker tag roadwave:${{ github.sha }} ${{ secrets.DOCKER_REGISTRY }}/roadwave:${{ github.sha }}
docker push ${{ secrets.DOCKER_REGISTRY }}/roadwave:latest
docker push ${{ secrets.DOCKER_REGISTRY }}/roadwave:${{ github.sha }}