diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f2806b81..ff0a19b3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -28,7 +28,7 @@ jobs: cat .env - name: Remove old docker image - run: echo ${{ secrets.SERVER_USER_PASSWORD }} | sudo -S docker compose down --rmi all + run: echo ${{ secrets.SERVER_USER_PASSWORD }} | sudo -S make prod-down - name: Create new docker image - run: echo ${{ secrets.SERVER_USER_PASSWORD }} | sudo -S docker compose up -d --force-recreate + run: echo ${{ secrets.SERVER_USER_PASSWORD }} | sudo -S make prod-up diff --git a/Dockerfile b/Dockerfile index a98af1c5..4306b753 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM node:18.18-alpine as node +RUN apk add --no-cache make + WORKDIR /usr/app COPY package.json package-lock.json ./ diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..06397390 --- /dev/null +++ b/Makefile @@ -0,0 +1,97 @@ +.PHONY: * + +TAG_OR_COMMIT := $(shell git describe --tags --always) +DOCKER_REGISTRY = ghcr.io +IMAGE_NAME = $(DOCKER_REGISTRY)/sos-rs/backend +CONTAINER_BACKEND = sos-rs-api + +install: + @npm install + +prisma: + @npx prisma generate + @npm run migrations:dev + +setup: + make file-mode + make create.env.file + @$(MAKE) install + @$(MAKE) prisma + +file-mode: + @echo "Configuring git fileMode to false" + git config core.fileMode false + +create.env.file: + if [ ! -f .env ]; then \ + cp .env.local .env; \ + fi + +start: + @$(MAKE) setup + @npm run start:dev + +start-debug: + @$(MAKE) setup + @npm run start:debug + +build: + @npm run build + +clean: + @rm -rf dist + +format: + @npm run format + +lint: + @npm run lint + +test: + @npm run test + +test-coverage: + @npm run test:cov + +test-debug: + @npm run test:debug + +test-e2e: + @npm run test:e2e + +dev-up: + @docker-compose -f docker-compose.dev.yml up -d --build + +setup-docker: + make file-mode + make create.env.file + make dev-up + +dev-down: + @docker-compose -f docker-compose.dev.yml down + +bash: + docker exec -it ${CONTAINER_BACKEND} sh + +dev-logs: + docker-compose -f docker-compose.dev.yml logs -f + +dev-db-load-dump: + @docker-compose -f docker-compose.dev.yml cp prisma/dev_dump.sql db:/tmp/backup.sql + @docker-compose -f docker-compose.dev.yml exec db psql -U root -d sos_rs -f /tmp/backup.sql + +# Para ser usado no workflow de build +docker-build: + @docker build . -t sos-rs-backend + +docker-tag: + @docker tag sos-rs-backend $(IMAGE_NAME):$(TAG_OR_COMMIT) + @docker tag sos-rs-backend $(IMAGE_NAME):latest + +# Para ser usado no workflow de deploy +prod-up: + @docker-compose -f docker-compose.yml up -d --build --force-recreate + +prod-down: + @docker-compose -f docker-compose.yml down --rmi all + diff --git a/README.md b/README.md index 99e4c850..d3a17eb7 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,17 @@ autenticação de usuários, gerenciamento de abrigos e suprimentos, e muito mai Se você quiser discutir ideias, problemas ou contribuições, sinta-se à vontade para se juntar ao nosso servidor do Discord [aqui](https://discord.gg/vjZS6BQXvM). +## Workspace Dependencies +- [Node 18.18](https://nodejs.org/) +- [Docker](https://www.docker.com/get-started/) +- Make + - [Windows](https://gnuwin32.sourceforge.net/packages/make.htm) + - Linux + ```bash + sudo apt update + sudo apt install make + ``` + ## 🛠 Tecnologias Utilizadas - **🟢 Node.js**: Ambiente de execução para JavaScript. @@ -20,14 +31,7 @@ Discord [aqui](https://discord.gg/vjZS6BQXvM). Para iniciar com dados de exemplo, utilize o dump do banco disponível em `prisma/migration/dev_dump.sql`. Este arquivo pode ser executado após as migrations estarem aplicadas. -Se estiver usando Docker, os comandos para carregar o dump são: - -```bash -# Copiar o dump para a pasta temporária do Docker -docker exec -it cp backup.sql POSTGRES_CONTAINER_ID:/tmp/backup.sql -# Importar o dump para o banco -docker exec -i POSTGRES_CONTAINER_ID psql -U root -d DATABASE_NAME -f /tmp/backup.sql -``` +Se estiver usando Docker, você pode usar o comando `make dev-db-load-dump` para carregar automaticamente. ## 🐳 Configuração com Docker @@ -42,31 +46,47 @@ Para desenvolvedores de frontend que não precisam executar localmente a API e o ```bash docker-compose -f docker-compose.dev.yml up ``` +Usando make: -Adicione a porta do serviço de banco no `docker-compose.dev.yml` para acessos externos: + ```bash + make setup-docker +``` +Usando make: -```yaml -ports: - - '5432:5432' - - '4000:4000' + ```bash + make setupDocker ``` ## 🚀 Configuração Inicial Local +Se você estiver recebendo algum erro relacionado a PORT da DATABASE_URL, tem uma linha comentada no .env que pode ser +descomentada para resolver o problema. + +## Configuração inicial para rodar localmente 1. Clone o repositório: ```bash git clone https://github.com/seuusuario/projeto-enchentes-backend.git ``` 2. Instale as dependências: + ```bash + make setup + + # ou sem make + npm install npx prisma generate npx prisma migrate dev npm run start:dev + ``` 3. Inicie o servidor: + ```bash - npm start + make start + + # ou sem make + npm start ``` A API estará disponível em `http://localhost:4000`. @@ -100,9 +120,49 @@ ports: - **📝 POST /supply-categories** - Registra uma nova categoria de suprimentos. - **🔧 PUT /supply-categories/:categoryId** - Atualiza uma categoria. +Claro, aqui está a documentação para esses comandos: + +--- + +### Comandos Make + + + + +### Comandos Make + +Command | Docker | Locally | Description +---- | ------- | ------- | ------- +install | - | `make install` | Instala as dependências do projeto usando o npm. +prisma | - | `make prisma` | Gera os artefatos do Prisma executando `npx prisma generate` e aplica as migrações do banco de dados executando `npx run migrations:dev`. +setup | `make setup-docker` | `make setup` | Configura o ambiente de desenvolvimento, desativando o `fileMode` do Git, criando um arquivo `.env` se ele não existir e executando os comandos `install` e `prisma`. +file-mode | - | `make file-mode` | Configura o Git para desativar o `fileMode`. +create.env.file | - | `make create.env.file` | Cria um arquivo `.env` a partir de `.env.local` se o arquivo `.env` ainda não existir. +start | - | `make start` | Inicia o projeto em modo de desenvolvimento executando `npm run start:dev`, após configurar o ambiente com `setup`. +start-debug | - | `make start-debug` | Inicia o projeto em modo de depuração executando `npm run start:debug`, após configurar o ambiente com `setup`. +build | - | `make build` | Compila o projeto executando `npm run build`. +test | - | `make test` | Executa os testes do projeto. +test-coverage | - | `make test-coverage` | Executa os testes com cobertura. +test-debug | - | `make test-debug` | Executa os testes em modo de depuração. +test-e2e | - | `make test-e2e` | Executa os testes end-to-end. +dev-up | `make dev-up` | - | Inicia os serviços de desenvolvimento usando Docker Compose (`docker-compose.dev.yml`). +dev-down | `make dev-down` | - | Desliga os serviços de desenvolvimento iniciados com Docker Compose. +bash | `make bash` | - | Acessa o terminal do contêiner específico `sos-rs-api` para execução de comandos específicos. +dev-logs | `make dev-logs` | - | Exibe os logs dos serviços de desenvolvimento iniciados com Docker Compose. +dev-db-load-dump | `make dev-db-load-dump` | - | Carrega um dump no banco de dados de desenvolvimento. +docker-build | `make docker-build` | - | Constrói a imagem Docker do projeto. +docker-tag | `make docker-tag` | - | Adiciona tags à imagem Docker para identificação. +prod-up | `make prod-up` | - | Inicia os serviços de produção usando Docker Compose.make +prod-down | `make prod-down` | - | Desliga os serviços de produção e remove as imagens Docker. + + +--- + + ## 🤝 Contribuição Contribuições são muito bem-vindas! Se deseja ajudar, faça um fork do repositório, crie uma branch com suas modificações, e envie um pull request. Sua ajuda é crucial para apoiar a comunidade afetada pelas enchentes no Rio Grande do Sul! + diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index ba40eebc..50f1a349 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -23,6 +23,7 @@ services: - PORT=${PORT} command: > sh -c "npm install && + apk add --no-cache make && npx prisma generate && npx prisma migrate dev && npm run start:dev -- --preserveWatchOutput" @@ -34,3 +35,4 @@ services: environment: - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_USER=${DB_USER} +