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
# Los chequeos viven en el repositorio `.github` de la organización, así que
# acá sólo se los llama. Cambiarlos es cambiarlos en un solo lugar.
name: CI
on:
push:
branches:
pull_request:
jobs:
app:
# Sólo lectura. Estos chequeos clonan, instalan dependencias y comprueban:
# no comentan, no etiquetan, no publican.
#
# El workflow llamado declara lo mismo en su trabajo, que es donde el
# permiso se aplica; esto lo escribe también acá porque el análisis
# estático de este repositorio no puede ver el otro archivo, y ahí un
# trabajo sin `permissions` se lee como permisos por omisión.
permissions:
contents: read
uses: Vasak-OS/.github/.github/workflows/app.yml@main
# Sólo el token de SonarQube Cloud, y por nombre: `secrets: inherit`
# le daría también el de crates.io y el de npm a un trabajo que
# instala dependencias de terceros.
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# La publicación, también compartida. Va después de los chequeos y sólo en
# `main`: publicar algo que no pasó las comprobaciones es peor que no
# publicar, y de crates.io no se puede borrar una versión, sólo retirarla.
#
# No hace falta acordarse de nada: el flujo mira si la versión del manifiesto
# está en el registro y sube sólo si falta. Un push que no toca la versión no
# hace nada.
publicar:
needs: app
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
permissions:
contents: read
uses: Vasak-OS/.github/.github/workflows/publicar-plugin.yml@main
# Los dos secretos por nombre y no `inherit`: `inherit` le entrega al flujo
# llamado todo lo que este repositorio tenga, y lo que necesita para
# publicar son estos dos. Si mañana el compartido cambia, lo que puede ver
# sigue siendo esto.
secrets:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}