-
Notifications
You must be signed in to change notification settings - Fork 0
94 lines (85 loc) · 4.34 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# .github/workflows/build.yml
# Basado en la documentacion de GitHub Actions
# => https://docs.github.com/en/actions
name: build
# "on" controla cuando se ejecuta la action. En este caso, dispara el workflow
# ante un evento de "push" o de "pull request", pero solo cuando ocurra
# en las ramas de nombre "main" o "master". Un PR a "develop", o un commit
# en un branch sin PRs orientados a esas dos que indicamos no lo activará.
on:
push:
branches: [featureObserver]
pull_request:
branches: [featureObserver]
# "jobs" describe los diferentes trabajos a realizar.
jobs:
# En esta ocasión tenemos uno solo, para buildear, testear y subir la info de coverage.
gradle-plus-coverage:
# "runs-on" es el encargado de correr el job. En nuestro caso una VM con ubuntu.
runs-on: ubuntu-latest
# "steps" enumera todos los pasos a seguir cuando se ejecute este job.
steps:
# Primero hacemos checkout a nuestro repo para que el job pueda acceder al mismo.
- name: Checkout Repo
# Para muchas funcionalidades, podemos aprovechar workflow pre-construidos mediante "uses"
uses: actions/checkout@v4
# Configuramos el Java apropiado en nuestro ubuntu.
- name: Set Up Java
uses: actions/setup-java@v4
# "with" nos deja especificar parametros del action que importamos, tales como versión y distribución a usar.
with:
distribution: 'temurin'
java-version: '21'
# También podemos ejecutar comandos de bash, mediante "run"
- run: |
chmod +x ./gradlew
# Para buildear, testear y correr jacoco tenemos una meta de gradle, runOnGithub, agregada a nuestro proyecto.
- uses: gradle/actions/setup-gradle@v3
with:
arguments: runOnGitHub
# runOnGitHub, mediante jacoco, genera reportes de cobertura en distintos formatos (html, csv, lcov, entre otros).
# Con el reporte en formato csv generamos una imagen svg que publica el % de código cubierto por los tests.
# Cabe aclarar que esto se crea en el ubuntu de GH Actions (donde corre el CI), pero no se encuentra en el repositorio (todavÃa).
- name: Generate JaCoCo Badge
uses: cicirello/jacoco-badge-generator@v2
with:
badges-directory: .github/badges
generate-coverage-badge: true
coverage-badge-filename: jacoco.svg
jacoco-csv-file: build/reports/jacoco/test/jacocoTestReport.csv
# Para persistir el badge de cobertura que generamos, podemos hacer un push a la rama desde el ubuntu.
# Siendo ejecutado "por github mismo", tendrá permiso para commitear.
- name: Commit and push badge
# Mediante "if" restringimos para no hacer este paso en un pull request, de forma tal que no se persista
# el cambio en la medalla tras cada push a la rama final, hasta mergear definitivamente los cambios.
if: ${{ github.event_name != 'pull_request' }}
run: |
cd .github/badges
if [[ `git status --porcelain *.svg` ]]; then
git config --global user.name 'github-actions'
git config --global user.email '41898282+github-actions[bot]@users.noreply.github.com'
git add *.svg
git commit -m "Autogenerated JaCoCo coverage badge" *.svg
git push
fi
# ¡Pero en un PR podemos comentar la cobertura! Haremos el chequeo inverso para cubrirlo
- name: Post coverage summary in PR
if: ${{ github.event_name == 'pull_request' }}
uses: madrapps/[email protected]
with:
paths: ${{ github.workspace }}/build/reports/jacoco/test/jacocoTestReport.xml
token: ${{ secrets.GITHUB_TOKEN }}
title: Estado Actual de Cobertura
# Finalmente, subimos un artefacto con el reporte de jacoco en formato HTML.
# Estos archivos quedarán disponibles para descargar y revisar en Github durante un tiempo, y luego se borrarán.
- name: Upload Jacoco coverage report
uses: actions/upload-artifact@v4
with:
name: jacoco-report
path: build/jacocoHtml/
# # Opcional: PodrÃamos subir nuestro reporte a un servicio como codecov.
# - name: Send JaCoCo reports to CodeCov
# run: |
# curl -Os https://uploader.codecov.io/latest/linux/codecov
# chmod +x codecov
# ./codecov -t ${{ CODECOV_TOKEN }}