diff --git a/.air.toml b/.air.toml new file mode 100644 index 0000000..bd932ff --- /dev/null +++ b/.air.toml @@ -0,0 +1,42 @@ +root = "." +testdata_dir = "testdata" +tmp_dir = "tmp" + +[build] +args_bin = [] +bin = "./tmp/main" +cmd = "go build -buildvcs=false -o ./tmp/main ./cmd" +delay = 0 +exclude_dir = ["assets", "tmp", "vendor", "testdata"] +exclude_file = [] +exclude_regex = ["_test.go"] +exclude_unchanged = false +follow_symlink = false +full_bin = "" +include_dir = ["cmd"] +include_ext = ["go", "tpl", "tmpl", "html"] +include_file = [] +kill_delay = "0s" +log = "build-errors.log" +rerun = false +rerun_delay = 500 +send_interrupt = false +stop_on_error = false + +[color] +app = "" +build = "yellow" +main = "magenta" +runner = "green" +watcher = "cyan" + +[log] +main_only = false +time = false + +[misc] +clean_on_exit = true + +[screen] +clear_on_rebuild = true +keep_scroll = true diff --git a/.dockerignore b/.dockerignore index 76ec9f5..5e73239 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,12 @@ -cli \ No newline at end of file +# git dir +.git +.github +assets + +# environment vars +.env +.env.dev +.env.prod + +# CLI dir +cli diff --git a/.gitignore b/.gitignore index 2eea525..0b56046 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -.env \ No newline at end of file +.env +.env.dev +.env.prod diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 60936bc..0000000 --- a/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM golang:1.18-alpine3.15 - -WORKDIR /app - -COPY go.* ./ -RUN go mod download - -COPY . ./ - -RUN cd server/cmd && go build -v -o server - -EXPOSE 8000 - -# Run the executable -CMD ["/app/server/cmd/server"] \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..7a41f80 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,18 @@ +ARG BUILD_IMAGE_TAG=1.19-bullseye + +FROM golang:${BUILD_IMAGE_TAG} + +WORKDIR /usr/src/app + +COPY go.mod go.sum . + +RUN go mod download + +RUN go install github.com/cosmtrek/air@latest && \ + go install github.com/go-delve/delve/cmd/dlv@latest + +COPY . . + +EXPOSE 8000 + +CMD ["air", "-c", ".air.toml"] diff --git a/Makefile b/Makefile index 5b45d71..4803f9f 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +## Proto files commands + .PHONY: generate-proto-protoc generate-proto-protoc: protoc -I ./api \ @@ -12,8 +14,32 @@ generate-proto: .PHONY: clean-proto clean-proto: - rm -rf pkg/protobuf pkg/google + rm -rf pkg/{protobuf,google} .PHONY: run-server run-server: go run cmd/main.go + +## Development Server docker-compose commands +DOCKER_COMPOSE_DEV_FILE=docker-compose-dev.yml +DOCKER_COMPOSE_DEV_SERVER_SERVICE=okane_api + +.PHONY: compose-dev-build +compose-dev-build: + @echo "Running Okane API docker compose dev build" + docker compose -f $(DOCKER_COMPOSE_DEV_FILE) build + +.PHONY: compose-dev-up +compose-dev-up: + @echo "Running Okane API docker compose dev up in detach mode" + docker compose -f $(DOCKER_COMPOSE_DEV_FILE) up -d + +.PHONY: compose-dev-logs +compose-dev-logs: + @echo "Running Okane API docker compose dev logs" + docker compose -f $(DOCKER_COMPOSE_DEV_FILE) logs $(DOCKER_COMPOSE_DEV_SERVER_SERVICE) -f + +.PHONY: compose-dev-down +compose-dev-down: + @echo "Running Okane API docker compose dev down" + docker compose -f $(DOCKER_COMPOSE_DEV_FILE) down diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml new file mode 100644 index 0000000..4f6f252 --- /dev/null +++ b/docker-compose-dev.yml @@ -0,0 +1,54 @@ +version: "3.9" + +services: + okane_api: + container_name: okane_api + build: + context: . + dockerfile: Dockerfile.dev + + volumes: + - type: bind + source: . + target: /usr/src/app + + ports: + - "8000:8000" + + env_file: + - '.env' + + links: + - redis + + depends_on: + - redis + + networks: + - backend + + restart: unless-stopped + + redis: + container_name: redis + image: redis:6.2-alpine + + command: redis-server --save 20 1 --loglevel warning --requirepass foobar + + volumes: + - redis_data:/data + + ports: + - "6379:6379" + + networks: + - backend + + restart: unless-stopped + + +volumes: + redis_data: + +networks: + backend: diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index dd58adb..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: "3.7" -services: - server: - build: . - restart: always - ports: - - "8000:8000" - depends_on: - - redis - redis: - image: redis:6.2-alpine - restart: always - ports: - - "6379:6379"