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
# 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
with:
# Las 4 pruebas de Rust de `tauri-plugin-network-manager` estaban escritas y no las corría
# nadie: este repositorio no pasaba `pruebas_rust` al flujo compartido, así
# que ningún pull request las ejecutaba. No es que fallen; es que nadie las
# miraba, que es peor.
#
# La lista de paquetes es la de este grafo, no la de Tauri: son los
# `Depends` de `libwebkit2gtk-4.1-dev` más el compilador de C, que necesitan
# los crates que traen código en C. Que un `.pc` falte no se ve como un
# `.pc` que falta: los `build.rs` de los crates `-sys` llaman a
# `process::exit(1)`, así que se lee como un crate que no compila, a mitad
# del grafo y muy lejos de la causa.
pruebas_rust: -p tauri-plugin-network-manager
paquetes_rust: libwebkit2gtk-4.1-dev build-essential
# 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 }}