Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env example
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
POSTGRES_HOST="seu host"
POSTGRES_DB="seu banco"
POSTGRES_USER='usario do banco'
POSTGRES_PASSWORD="senha do banco"
POSTGRES_PORT=5432
92 changes: 92 additions & 0 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: CI/CD Pipeline

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
build:
name: Build and Test
runs-on: ubuntu-latest

steps:
- name: Checkout código
uses: actions/checkout@v4

- name: Configurar Node.js
uses: actions/setup-node@v4
with:
node-version: 18

- name: Instalar dependências
run: npm install

- name: Executar testes
run: npm test

sonar:
needs: build
name: Verificar qualidade do código
runs-on: ubuntu-latest

steps:
- name: Checkout código
uses: actions/checkout@v4

- name: Configurar Node.js
uses: actions/setup-node@v4
with:
node-version: 18

- name: Instalar dependências
run: npm install

- name: Analisar com SonarQube
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
npx sonarqube-scanner \
-Dsonar.projectKey=Toiste_venhaparaoleds-devops \
-Dsonar.organization=toiste \
-Dsonar.host.url=https://sonarcloud.io \
-Dsonar.sources=src \
-Dsonar.exclusions=**/node_modules/**, **/*.spec.js

- name: Quebrar pipeline se qualidade for menor que 80%
run: |
QUALITY=$(curl -s -u ${{ secrets.SONAR_TOKEN }}: \
"https://sonarcloud.io/api/qualitygates/project_status?projectKey=Toiste_venhaparaoleds-devops" \
| jq -r '.projectStatus.status')

if [ "$QUALITY" != "OK" ]; then
echo "Qualidade abaixo do esperado. CI interrompido."
exit 1
fi

deploy:
needs: sonar
name: Publicar no GitHub Packages
runs-on: ubuntu-latest

steps:
- name: Checkout código
uses: actions/checkout@v4

- name: Login no GitHub Packages
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin

- name: Construir imagem Docker
run: |
REPO_NAME=$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')
docker build -t ghcr.io/$REPO_NAME/api:latest .



- name: Publicar imagem no GitHub Packages
run: |
REPO_NAME=$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')
docker push ghcr.io/$REPO_NAME/api:latest
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/node_modules
/.env
/.scannerwork
27 changes: 27 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Usa uma imagem oficial do Node.js como base
FROM node:18-alpine

# Define o diretório de trabalho dentro do container
WORKDIR /app

# Copia apenas os arquivos essenciais para instalar dependências
COPY package.json package-lock.json ./

# Instala as dependências do projeto
RUN npm install --production

# Copia todo o código do projeto para o container
COPY . .

# Expõe a porta que a API usa
EXPOSE 3000

# Define as variáveis de ambiente para o PostgreSQL
ENV DB_USER=postgres
ENV DB_HOST=localhost
ENV DB_NAME=postgres
ENV DB_PASSWORD=secret
ENV DB_PORT=5432

# Comando para rodar a aplicação
CMD ["node", "src/index.js"]
Loading