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
125 changes: 76 additions & 49 deletions .github/workflows/02-tests-ci.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: "Nível 2: Testes Automatizados"

on:
pull_request:
branches: [ main ]
Expand All @@ -20,59 +21,85 @@ jobs:
- name: "Checkout do código"
uses: actions/checkout@v4

# INSIRA AQUI A LÓGICA PARA RODAR OS TESTES E VERIFICAR A COBERTURA
###
###
###
- name: "Configurar Node.js ${{ env.NODE_VERSION }}"
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'

- name: "Instalar dependências"
run: npm ci

- name: "Executar testes com cobertura"
run: npx nyc --reporter=lcov --reporter=text-summary npm test

- name: "Extrair porcentagem de cobertura" # Esse step será validado pelo desafio, não altere o nome. No final, ele deve gerar o output "coverage" com a porcentagem de cobertura.
- name: "Validar cobertura mínima (${{ env.COVERAGE_MIN }}%)"
run: |
# Extrai a porcentagem de cobertura do sumário de texto
COVERAGE=$(npx nyc report --reporter=text-summary | grep -oP 'Statements\s*:\s*\K[0-9\.]+(?=%)' | head -1)

# Converte para número inteiro para comparação
COVERAGE_INT=$(echo "$COVERAGE" | cut -d'.' -f1)

echo "Cobertura atual: $COVERAGE%"
echo "Cobertura mínima exigida: ${{ env.COVERAGE_MIN }}%"

# Compara a cobertura atual com a mínima exigida
if [ "$COVERAGE_INT" -lt "${{ env.COVERAGE_MIN }}" ]; then
echo "Erro: A cobertura de testes ($COVERAGE%) está abaixo do mínimo exigido de ${{ env.COVERAGE_MIN }}%."
exit 1 # Falha o workflow se a cobertura for baixa
else
echo "Sucesso: A cobertura de testes está dentro do esperado."
fi

- name: "Extrair porcentagem de cobertura"
id: coverage
run: |
COVERAGE=$(npx nyc report --reporter=text-summary | grep -oP 'Statements\s*:\s*\K[0-9\.]+(?=%)' | head -1)
echo "Coverage: $COVERAGE%"
echo "coverage=$COVERAGE" >> $GITHUB_OUTPUT

generate-certificate: # DAQUI PARA BAIXO, NÃO ALTERAR
name: "Desafio Nível 2 - Certificado"
runs-on: ubuntu-latest
needs: tests-and-coverage
if: success() && needs.tests-and-coverage.outputs.coverage != ''

steps:
- name: "Gerar certificado"
run: |
mkdir -p certificates
cat > certificates/level-2-certificate.md << EOF
# Certificado de Conclusão - Nível 2

**Descomplicando Github Actions - GitHub Actions Edition**
---

Este certificado atesta que **${{ github.actor }}** concluiu com sucesso:
## Nível 2: Testes Automatizados

**Competências desenvolvidas:**
- Automação de testes
- Análise de cobertura
- Lógica de validação com coverage mínimo
- Upload de artefatos

**Cobertura:** >= ${{ env.COVERAGE_MIN }}%
**Data de conclusão:** $(date)
**Repositório:** ${{ github.repository }}
**Workflow:** ${{ github.run_id }}

---
**Badge conquistado:** Testes Automatizados

---
*Certificado gerado automaticamente pelo GitHub Actions*
*LINUXtips*
EOF

- name: "Upload do certificado"
uses: actions/upload-artifact@v4
with:
name: level-2-certificate
path: certificates/
retention-days: 30
generate-certificate:
name: "Desafio Nível 2 - Certificado"
runs-on: ubuntu-latest
needs: tests-and-coverage
if: success() && needs.tests-and-coverage.outputs.coverage != ''

steps:
- name: "Gerar certificado"
run: |
mkdir -p certificates
cat > certificates/level-2-certificate.md << EOF
# Certificado de Conclusão - Nível 2

**Descomplicando Github Actions - GitHub Actions Edition**
---

Este certificado atesta que **${{ github.actor }}** concluiu com sucesso:
## Nível 2: Testes Automatizados

**Competências desenvolvidas:**
- Automação de testes
- Análise de cobertura
- Lógica de validação com coverage mínimo
- Upload de artefatos

**Cobertura:** >= ${{ needs.tests-and-coverage.outputs.coverage }}%
**Data de conclusão:** $(date)
**Repositório:** ${{ github.repository }}
**Workflow Run ID:** ${{ github.run_id }}

---
**Badge conquistado:** Testes Automatizados

---
*Certificado gerado automaticamente pelo GitHub Actions*
*LINUXtips*
EOF

- name: "Upload do certificado"
uses: actions/upload-artifact@v4
with:
name: level-2-certificate
path: certificates/
retention-days: 30
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Bem-vindo ao **Descomplicando GitHub Actions**! Este projeto foi criado pela com

Este projeto foi desenhado para ser o material de apoio do vídeo "Descomplicando GitHub Actions" no [canal da LINUXtips no YouTube](https://youtube.com/linuxtips). A ideia é que você possa codificar junto e aprender na prática.

## O que você vai aprender
## O que você vai aprender##

Neste projeto você aprenderá:

Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@
"author": "LINUXtips",
"license": "MIT",
"dependencies": {
"express": "^4.18.2",
"cors": "^2.8.5",
"helmet": "^7.0.0",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"helmet": "^7.0.0",
"node-fetch": "^3.3.2"
},
"devDependencies": {
"jest": "^29.7.0",
"supertest": "^6.3.4",
"nyc": "^17.1.0"
"nyc": "^17.1.0",
"supertest": "^6.3.4"
},
"engines": {
"node": ">=16.0.0"
Expand Down