diff --git a/deployments/compose.yaml b/deployments/compose.local.yaml similarity index 100% rename from deployments/compose.yaml rename to deployments/compose.local.yaml diff --git a/deployments/compose.test.yaml b/deployments/compose.test.yaml new file mode 100644 index 00000000..416adbb4 --- /dev/null +++ b/deployments/compose.test.yaml @@ -0,0 +1,25 @@ +--- +services: + test-db: + image: postgres:17.2-alpine3.21 + ports: + - 5432:5432 + environment: + POSTGRES_DB: ${DB_NAME} + POSTGRES_PASSWORD: ${DB_PASS} + POSTGRES_USER: ${DB_USER} + expose: + - 5432 + volumes: + - test-db-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - test-server-network +volumes: + test-db-data: +networks: + test-server-network: diff --git a/scripts/Taskfile.yml b/scripts/Taskfile.yml index 0bd7d5f2..c57376bc 100644 --- a/scripts/Taskfile.yml +++ b/scripts/Taskfile.yml @@ -33,16 +33,21 @@ tasks: - touch .env fullsuite: cmds: - - task deps:tidy - - task build - - task lint - - task test:unit - - task test:integration:cmd:nocache + - task: deps:tidy + - task: compose:clean:test + - task: generate + - task: build:nogen + - task: lint:nogen + - task: test:unit:nogen + - task: test:integration:cmd:nocache build: deps: - generate cmds: - - task docker:build + - task: build:nogen + build:nogen: + cmds: + - task: docker:build generate: deps: - db:generate @@ -52,22 +57,25 @@ tasks: deps: - generate cmds: - - task go:lint - - task db:lint - - task yaml:lint - - task json:lint - - task docker:lint - - task compose:lint - - task openapi:lint + - task: lint:nogen + lint:nogen: + cmds: + - task: go:lint + - task: db:lint + - task: yaml:lint + - task: json:lint + - task: docker:lint + - task: compose:lint + - task: openapi:lint lint:fix: cmds: - - task go:lint:fix - - task openapi:lint - - task db:lint - - task yaml:lint - - task json:lint:fix - - task docker:lint - - task compose:lint + - task: go:lint:fix + - task: openapi:lint + - task: db:lint + - task: yaml:lint + - task: json:lint:fix + - task: docker:lint + - task: compose:lint go:lint: cmds: - golangci-lint run diff --git a/scripts/compose.yml b/scripts/compose.yml index 846d28a3..5d8af94f 100644 --- a/scripts/compose.yml +++ b/scripts/compose.yml @@ -4,30 +4,62 @@ version: '3' vars: - COMPOSE_FILE: "deployments/compose.yaml" + LOCAL_COMPOSE_FILE: "deployments/compose.local.yaml" + TEST_COMPOSE_FILE: "deployments/compose.test.yaml" tasks: + build:test: + cmds: + - task: build + vars: + COMPOSE_FILE: '{{.TEST_COMPOSE_FILE}}' build: + vars: + COMPOSE_FILE: '{{.COMPOSE_FILE | default .LOCAL_COMPOSE_FILE}}' cmds: - docker compose -f {{.COMPOSE_FILE}} build + up:test: + cmds: + - docker compose -f {{.TEST_COMPOSE_FILE}} up --no-recreate -d up: cmds: - - docker compose -f {{.COMPOSE_FILE}} up --no-recreate -d - - task compose:init + - docker compose -f {{.LOCAL_COMPOSE_FILE}} up --no-recreate -d + - task: init init: cmds: - aws sqs create-queue --queue-name $QNAME_DOCUMENT_CLEAN - aws sqs create-queue --queue-name $QNAME_DOCUMENT_INIT - aws sqs create-queue --queue-name $QNAME_QUERY_RUNNER - aws s3 mb s3://$BUCKET_IN + down:test: + cmds: + - task: down + vars: + COMPOSE_FILE: '{{.TEST_COMPOSE_FILE}}' down: + vars: + COMPOSE_FILE: '{{.COMPOSE_FILE | default .LOCAL_COMPOSE_FILE}}' cmds: - docker compose -f {{.COMPOSE_FILE}} down - clean: - deps: - - down + clean:test: cmds: + - task: down:test + - docker volume rm deployments_test-db-data + clean: + cmds: + - task: down - docker volume rm deployments_db-data lint: + cmds: + - task: lint:file + vars: + COMPOSE_FILE: '{{.LOCAL_COMPOSE_FILE}}' + - task: lint:file + vars: + COMPOSE_FILE: '{{.TEST_COMPOSE_FILE}}' + lint:file: + internal: true + vars: + COMPOSE_FILE: '{{.COMPOSE_FILE | default .LOCAL_COMPOSE_FILE}}' cmds: - docker compose -f {{.COMPOSE_FILE}} config -q --resolve-image-digests diff --git a/scripts/database.yml b/scripts/database.yml index 804d3428..65f5eaaa 100644 --- a/scripts/database.yml +++ b/scripts/database.yml @@ -8,13 +8,19 @@ vars: tasks: generate: + deps: + - mig cmds: - - task db:mig - sqlc generate --file sqlc.yml - lint: + deps:up: + internal: true + cmds: + - task compose:up:test + - sleep 3 + lint: + deps: + - deps:up cmds: - - task compose:up - - sleep 2 - sqlc vet --file sqlc.yml mig:create: cmds: @@ -23,7 +29,7 @@ tasks: test -z "$name" && echo "Error: Name is required." && exit 1 migrate create -ext sql -dir {{.MIGRATIONS}} $name mig: + deps: + - deps:up cmds: - - task compose:up - - sleep 2 - migrate -path {{.MIGRATIONS}} -database {{.DB_URI}} up diff --git a/scripts/dependencies.yml b/scripts/dependencies.yml index c56b41ad..f3f35287 100644 --- a/scripts/dependencies.yml +++ b/scripts/dependencies.yml @@ -4,9 +4,6 @@ version: '3' tasks: - download: - cmds: - - go mod download tidy:novendor: cmds: - go mod tidy diff --git a/scripts/tests.yml b/scripts/tests.yml index 2eaee76f..54d95552 100644 --- a/scripts/tests.yml +++ b/scripts/tests.yml @@ -14,23 +14,33 @@ tasks: cmds: - rm -rf mocks/* - mockery + unit: + cmds: + - task: unit:nocoverage + - task: unit:getcoverage unit:short: deps: - mocks:generate cmds: - go test -short {{.INTERNAL}} {{.API}} {{.PKG}} - unit:nocoverage: - deps: - - mocks:generate + unit:nogen: + cmds: + - task: unit:cmd + - task: unit:getcoverage + unit:cmd: + internal: true cmds: - mkdir -p {{.OUT_DIR}} - | go test {{.INTERNAL}} {{.API}} {{.PKG}} \ -coverpkg={{.INTERNAL}},{{.API}},{{.PKG}} \ -coverprofile={{.COVERAGE_FILE}} - unit: + unit:nocoverage: deps: - - unit:nocoverage + - mocks:generate + cmds: + - task: unit:cmd + unit:getcoverage: vars: TMP_FILE: "{{.OUT_DIR}}/coverage.tmp" FILTER_COVERAGE_FILE: "{{.OUT_DIR}}/filtered_coverage.out" @@ -53,7 +63,7 @@ tasks: cmds: - task generate - task docker:build - - task test:integration:cmd:nocache + - task: integration:cmd:nocache integration:cmd:nocache: cmds: - go test -count=1 -v ./test/...