Repository navigation
ci(macos): El CI de macOS instala y desinstala el cask con el paquete recién construido - #2062
Conversation
Implements #2060: El CI de macOS instala y desinstala el cask con el paquete recién construido - tap local de usar y tirar con el cask del tap reescrito a file://, sin escribir en el tap real
sgomez
left a comment
There was a problem hiding this comment.
NEEDS_FIXES
Alcance: completo (primera revisión), contra origin/main, head 38cc4327. Especificación: #2060 (TD-139, ID-553). Checks todavía en curso en 38cc4327: Plataformas / macOS, Plataformas / Windows, Cadena TypeScript, Cadena Java, Cadena Rust, Imagen nativa, Analyze (python), Analyze (java-kotlin). Ninguno de ellos ejecuta build.yml: el paso nuevo solo corre con la etiqueta preview o en release.yml, así que el CI de esta PR no lo prueba.
[blocking]
.github/workflows/build.yml:269: el jobmacoscorre enmacos-14(Sonoma) y el cask del tap declaradepends_on macos: :sequoia. Con eso,brew install --caskse niega en ese runner («This software does not run on macOS versions older than Sequoia») antes de llegar a/Applications, y aunque se saltara esa comprobación, la.appexigeminimumSystemVersion15.4 (ADR-0040) y no arrancaría. El paso falla siempre, y como solo corre enbuild.yml, lo primero que rompería es la Release (el jobmacoscae ycollect-packagesno corre). Arreglo: ejecutar la verificación enmacos-15(arm64). La forma menos invasiva es un job aparte enmacos-15que descargue el artefactobundle-macosy ejecuteverify-cask.sh, del que dependacollect-packages; así el runner de compilación y la caché que calientawarm-release-cache.ymlno cambian. Antes del merge, una pasada con la etiquetapreviewpara ver el paso en verde conbrewreal.
[fix]
packaging/macos/verify-cask.sh:37: Homebrew 7 pone siempre la cuarentena (ID-553), y la app no va firmada por Apple. Lanzar el binario en cuarentena depende de cómo tenga Gatekeeper el runner: con la evaluación activa, se mata el proceso o se queda esperando un diálogo que nadie va a ver. Antes de--version, ejecutarxattr -c "$app", que es justo lo que loscaveatsdel cask piden a la persona usuaria; así la prueba sigue su mismo camino.packaging/macos/verify-cask.test.sh:33: no se comprueba que el script lance--version. Si quitas la línea 37 deverify-cask.sh, la prueba sigue pasando, aunque el plan de pruebas dice que cubre «arranca». Haz que elrfirmade mentira deje constancia de sus argumentos (p. ej.echo "$*" > "$FAKE_LAUNCH_LOG") y comprueba que han sido--version.
[note]
- El tap nunca se escribe: el cask se lee por
curlderaw.githubusercontent.comy se copia a un tap--no-gitde usar y tirar, que se retira con eltrap. Cumple el tercer criterio. file://ysha256reescritos: elsedsolo tocaurl "…"(no laurl :urldellivecheck), y Homebrew aceptafile://enbrew install --cask. Las demás piezas (glob del.dmg, igual que la subida del artefacto;/Applicationsescribible por el usuario administrador del runner) están bien.- Reescribir
versiona"0.0.0"sobra ahora que elurles fijo; cuando el tap tenga una versión de verdad, el cask instalado mostrará0.0.0. No hace daño. - El cuerpo de la PR dice que la prueba se añade a
just test-scripts; en realidad va encheck-repo.
| run: just bundle | ||
|
|
||
| - name: Instala y desinstala el cask con ese .dmg | ||
| run: packaging/macos/verify-cask.sh rfirma-app/src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*.dmg |
There was a problem hiding this comment.
[blocking] Este job corre en macos-14 (Sonoma) y el cask del tap declara depends_on macos: :sequoia: brew install --cask se niega aquí, y la .app pide además minimumSystemVersion 15.4 (ADR-0040). El paso falla siempre, y como build.yml solo corre con preview o en la Release, lo primero que rompería es la Release. Lleva la verificación a macos-15: un job aparte que descargue bundle-macos y ejecute verify-cask.sh, del que dependa collect-packages. Así no cambian el runner de compilación ni la caché de warm-release-cache.yml. Antes del merge, pásala con la etiqueta preview.
| brew install --cask "$tap/rfirma" | ||
| app="$applications/rfirma.app" | ||
| [ -d "$app" ] || { echo "$app no existe tras instalar" >&2; exit 1; } | ||
| "$app/Contents/MacOS/rfirma" --version |
There was a problem hiding this comment.
[fix] Homebrew 7 pone siempre la cuarentena (ID-553) y la app no va firmada por Apple, así que lanzar este binario depende de cómo tenga Gatekeeper el runner. Ejecuta antes xattr -c "$app", lo mismo que los caveats del cask piden a la persona usuaria.
| install) | ||
| cp "$FAKE_REPO/Casks/rfirma.rb" "$FAKE_INSTALLED_CASK" | ||
| mkdir -p "$APPLICATIONS_DIR/rfirma.app/Contents/MacOS" | ||
| printf '#!/bin/sh\necho "rfirma 1.0.0"\n' > "$APPLICATIONS_DIR/rfirma.app/Contents/MacOS/rfirma" |
There was a problem hiding this comment.
[fix] Si quitas el --version de verify-cask.sh, la prueba sigue pasando. Haz que este rfirma de mentira guarde sus argumentos (p. ej. echo "$*" > "$FAKE_LAUNCH_LOG") y comprueba que han sido --version.
Closes #2060
What changed
verify-caskenbuild.yml(macos-15, tras el jobmacos) que ejecutapackaging/macos/verify-cask.shcon el .dmg dejust bundle. El script crea un tap local de usar y tirar (brew tap-new --no-git), copia el cask del tap público conversion,sha256yurl(file://) reescritos, instala, comprueba/Applications/rfirma.appy--version, desinstala y comprueba que desaparece.collect-packagesdepende de él.build-tree.shcopia a/macos/el .dmg de cada versión estable que lo trae, para que la web lo descargue del servidor propio (docs(web): la web y el manual explican cómo instalar rFirma en macOS #2061). Va aquí y no en docs(web): la web y el manual explican cómo instalar rFirma en macOS #2061 porquepublish.ymlconstruye el árbol con elbuild-tree.shdemain.Test plan
packaging/macos/verify-cask.test.sh(brew simulado); añadido ajust test-scripts.brew7: build.yml en esta rama (run 39400730001), todos los jobs en verde.build-tree.test.sh:/macos/trae el .dmg de cada versión que lo tiene, y no uno fuera del manifiesto — lo corre el CI de Linux.