Skip to content

feat: adicionar configuração inicial do sonar CI #228

feat: adicionar configuração inicial do sonar CI

feat: adicionar configuração inicial do sonar CI #228

Workflow file for this run

# Nome do workflow, um repositório pode ter um ou mais workflows.
name: CI
# Define em quais situações esse workflow será executado
on:
push:
branches: [master, development, "[0-9]+.x.x"]
pull_request:
branches: [master, development, "[0-9]+.x.x"]
types: [opened, reopened, synchronize, closed]
# Os jobs são conjuntos de actions que são executados na mesma máquina virtual.
# É possível ter mais de um job e assim executar ações paralelamente.
jobs:
# discord_notification_on_pr:
# runs-on: ubuntu-latest
# if: github.event_name == 'pull_request' && github.event.pull_request.merged == false
# steps:
# - name: Notify Discord on PR
# env:
# DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
# run: |
# AUTHOR="${{ github.event.pull_request.user.login }}"
# PR_TITLE="${{ github.event.pull_request.title }}"
# PR_URL="${{ github.event.pull_request.html_url }}"
# curl -X POST -H "Content-Type: application/json" \
# -d "{\"content\": \"🚀 **PR Criada com Sucesso 🚀**\\n- Autor: $AUTHOR\\n- Título: $PR_TITLE\\n- Link: $PR_URL\"}" \
# $DISCORD_WEBHOOK_URL
lint:
if: github.event_name != 'pull_request' || github.event.action != 'closed'
runs-on: ubuntu-20.04
# As etapas do workflow são definidas nessa tag.
steps:
# Definição da action
- uses: actions/checkout@v3
# Parâmetros para a ação
with:
fetch-depth: 0
- uses: wagoid/commitlint-github-action@v5
- uses: actions/setup-node@v3
with:
node-version: 18
# Executa um comando do projeto na máquina virtual
- run: npm i
- run: npm run format:check
- run: npm run lint:storage
- run: npm run lint:sync
- run: npm run lint:ui
- run: npm run lint:templates
- run: npm run lint:code-editor
build:
name: Build packages
if: github.event_name != 'pull_request' || github.event.action != 'closed'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
- run: npm run build
- run: npm run build:portal:docs
- run: npm run build:portal:prod
- uses: actions/upload-artifact@v3
with:
name: portal
path: dist/portal
sonar_analysis:
name: SonarQube Analysis
if: github.event_name == 'pull_request' && github.event.action != 'closed'
runs-on: ubuntu-20.04
needs: [test-ui, test-templates, test-code-editor, test-storage, test-sync]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
# Baixa os artefatos de cobertura gerados pelos jobs de teste e extrai para o diretório correto
- name: Download UI coverage report
uses: actions/download-artifact@v3
with:
name: ui-coverage
path: coverage/ui
- name: Download Code Editor coverage report
uses: actions/download-artifact@v3
with:
name: code-editor-coverage
path: coverage/code-editor
- name: Download Storage coverage report
uses: actions/download-artifact@v3
with:
name: storage-coverage
path: coverage/storage
- name: Download Sync coverage report
uses: actions/download-artifact@v3
with:
name: sync-coverage
path: coverage/sync
- name: Download Templates coverage report
uses: actions/download-artifact@v3
with:
name: templates-coverage
path: coverage/templates
# Verifica se os arquivos de cobertura foram baixados corretamente
- name: Verificar arquivos de cobertura
run: ls -la coverage/code-editor/lcov.info coverage/storage/lcov.info coverage/sync/lcov.info coverage/templates/lcov.info coverage/ui/lcov.info
- name: Run SonarQube for PR
run: |
export SONARQUBE_SCANNER_PARAMS='{
"sonar.pullrequest.key": "${{ github.event.pull_request.number }}",
"sonar.pullrequest.branch": "${{ github.head_ref }}",
"sonar.pullrequest.base": "${{ github.base_ref }}"
}'
npm run sonarqube -- --url=${{ secrets.SONAR_HOST_URL }} --projectKey=${{ secrets.SONAR_PROJECT_KEY }} --token=${{ secrets.SONAR_TOKEN }}
# Verifica o Quality Gate
- name: Check SonarQube Quality Gate for PR
id: sonarqube-quality-gate-check
uses: sonarsource/sonarqube-quality-gate-action@master
timeout-minutes: 5
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
# Fails the job if the Quality Gate fails
- name: Fail if Quality Gate fails
if: steps.sonarqube-quality-gate-check.outputs.quality-gate-status != 'PASSED'
run: exit 1
test-ui:
name: Test ui
if: github.event_name != 'pull_request' || github.event.action != 'closed'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
- run: npm run test:ui
- run: npm run test:ui:schematics
# Salva o relatório de cobertura como artefato no GitHub Actions
- name: Upload coverage report
uses: actions/upload-artifact@v3
with:
name: ui-coverage
path: coverage/ui/lcov.info
test-templates:
name: Test templates
if: github.event_name != 'pull_request' || github.event.action != 'closed'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
- run: npm run build:ui:lite
- run: npm run test:templates
- run: npm run test:templates:schematics
# Salva o relatório de cobertura como artefato no GitHub Actions
- name: Upload coverage report
uses: actions/upload-artifact@v3
with:
name: templates-coverage
path: coverage/templates/lcov.info
test-code-editor:
name: Test code editor
if: github.event_name != 'pull_request' || github.event.action != 'closed'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
- run: npm run test:code-editor
- run: npm run test:code-editor:schematics
# Salva o relatório de cobertura como artefato no GitHub Actions
- name: Upload coverage report
uses: actions/upload-artifact@v3
with:
name: code-editor-coverage
path: coverage/code-editor/lcov.info
test-storage:
name: Test storage
if: github.event_name != 'pull_request' || github.event.action != 'closed'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
- run: npm run test:storage
- run: npm run test:storage:schematics
# Salva o relatório de cobertura como artefato no GitHub Actions
- name: Upload coverage report
uses: actions/upload-artifact@v3
with:
name: storage-coverage
path: coverage/storage/lcov.info
test-sync:
name: Test sync
if: github.event_name != 'pull_request' || github.event.action != 'closed'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
- run: npm run build:storage:lite
- run: npm run test:sync
- run: npm run test:sync:schematics
# Salva o relatório de cobertura como artefato no GitHub Actions
- name: Upload coverage report
uses: actions/upload-artifact@v3
with:
name: sync-coverage
path: coverage/sync/lcov.info
# Job para excluir a ramificação do SonarQube após o merge
# delete_sonar_branch:
# if: github.event.pull_request.merged == true
# runs-on: ubuntu-20.04
# steps:
# - name: Excluir Ramificação do SonarQube
# env:
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
# SONAR_PROJECT_KEY: ${{secrets.SONAR_PROJECT_KEY}}
# BRANCH_NAME: ${{ github.head_ref }}
# run: |
# curl -u "${{ secrets.SONAR_TOKEN }}:" -X POST "${{ secrets.SONAR_HOST_URL }}/api/project_branches/delete" \
# -H "Content-Type: application/x-www-form-urlencoded" \
# -d "project=${{secrets.SONAR_PROJECT_KEY}}" \
# -d "branch=${{ github.head_ref }}"