feat: adicionar configuração inicial do sonar CI #245
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 }}" |