Skip to content

CI wydania + instalacja przez Homebrew (cask) - #7

Merged
mbeczynski merged 4 commits into
mainfrom
ci/homebrew
Oct 6, 2026
Merged

mbeczynski merged 4 commits into
mainfrom
ci/homebrew

Conversation

@mbeczynski

Copy link
Copy Markdown
Contributor

Co

  • release.yml: tag vX.Y.Z buduje i wypuszcza wydanie, krok po kroku:
    1. sprawdza, czy tag zgadza się z mac-app/VERSION;
    2. uruchamia swift test;
    3. buduje uniwersalny CloudMachine.app (arm64 + x86_64);
    4. podpisuje go stałym certyfikatem;
    5. publikuje DMG z plikiem .sha256 w GitHub Release;
    6. generuje cask i wypycha go do RenaCode/homebrew-tap.
  • PR, który dotyka budowania, przechodzi ten sam potok na sucho: podpis ad-hoc, bez wydania i bez tapu. DMG i cask są do pobrania jako artefakty przebiegu.
  • packaging/homebrew/cloudmachine.rb.in: szablon caska.
  • packaging/README.md: jednorazowa konfiguracja (certyfikat, tap, token) i procedura wydania.
  • build-app --universal.

Poprawione błędy znalezione po drodze

  • Agent wołany z PATH nie znał swojej ścieżki. Wynik cd /tmp && cloudmachine-agent version był taki: Build z drzewa roboczego. Przez pełną ścieżkę ta sama binarka pokazywała 1.2.0 (110). install-launchd wywołany z PATH wpisałby agentom nieistniejącą binarkę /tmp/cloudmachine-agent. Po poprawce wywołanie przez dowiązanie z PATH zwraca 1.2.0 (110) 00db9ac.
  • setup-signing-cert padał na każdym Macu. /usr/bin/openssl to LibreSSL 3.3.6, a ten nie zna flagi -legacy (sprawdzone: exit 1).

Celowe decyzje w casku

  • Brak uninstall launchctl:. Homebrew wykonuje uninstall także przy brew upgrade, a zatrzymanie gdrive-buffer zrywa montowanie na ok. 20 minut.
  • Brak przeładowania agentów po upgradzie. Kroki caska w Homebrew 7 działają w sandboxie bez dostępu do ~/Library/LaunchAgents. Upgrade podmienia bundle na nowe pliki, a to jest procedura, po której agenci startują poprawnie.
  • zap nie rusza ~/.cloudmachine, bo tam leży bufor niewysłanych kopii.
  • Kwarantanna zdejmowana w postflight_steps. Aplikacja nie jest notaryzowana.
  • Wydanie bez certyfikatu się nie zbuduje. Podpis ad-hoc cofałby Pełny dostęp do dysku po każdym upgradzie.

Sprawdzone lokalnie

  • swift test: 295 testów, 0 błędów; swift format lint --strict przechodzi.
  • build-app --universal: binarki x86_64 arm64, codesign --verify --deep --strict przechodzi; make-dmg działa.
  • Cask: brew style --cask i brew audit --cask --strict bez uwag (Homebrew 7.0.8).
  • brew install / uninstall testowej kopii caska z lokalnego DMG do katalogu tymczasowego: aplikacja instaluje się i odpowiada, odinstalowanie sprząta.

Niesprawdzone, wyjdzie przy pierwszym tagu

  • Import certyfikatu i podpis na runnerze.
  • Wypchnięcie do tapu.
  • Zdjęcie kwarantanny przy pobraniu z GitHuba.

Wymaga sekretów CM_SIGNING_P12_* i HOMEBREW_TAP_TOKEN oraz repozytorium RenaCode/homebrew-tap. Szczegóły w packaging/README.md.

🤖 Generated with Claude Code

mbeczynski and others added 4 commits October 6, 2026 07:43
`CommandLine.arguments[0]` przy wywolaniu z PATH to sama nazwa, a
`URL(fileURLWithPath:)` doklejala ja do biezacego katalogu. Skutek:
`cd /tmp && cloudmachine-agent version` meldowal "Build z drzewa roboczego"
zamiast 1.2.0, a `install-launchd` wpisalby launchd nieistniejaca
`/tmp/cloudmachine-agent`. Dotyczy dowiazania w /usr/local/bin i kazdej
instalacji z Homebrew.

Sciezke bierzemy z `Bundle.main.executableURL` (od jadra) po rozwinieciu
dowiazan; Resources szukamy tez obok prawdziwej binarki.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`/usr/bin/openssl` to LibreSSL 3.3.6, ktory nie zna `-legacy` i konczy
`pkcs12 -export` bledem - komenda padala na kazdym nowym Macu. Flage
dostaje juz tylko prawdziwy OpenSSL 3; LibreSSL i tak domyslnie pisze
3DES/RC2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Katalog z binarkami bierzemy z `swift build --show-bin-path`, bo przy kilku
architekturach SwiftPM nie uzywa `.build/release`, a nazwa katalogu zmienia
sie miedzy wersjami narzedzi.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tag vX.Y.Z: testy, uniwersalny CloudMachine.app podpisany stalym
certyfikatem, DMG + sha256 w GitHub Release, cask wypychany do
RenaCode/homebrew-tap (`brew install --cask renacode/tap/cloudmachine`).

Wydanie bez certyfikatu sie nie buduje: podpis ad-hoc cofalby Pelny dostep
do dysku po kazdym `brew upgrade`. Tag niezgodny z mac-app/VERSION tez.
PR dotykajacy budowania przechodzi ten sam potok na sucho.

Cask nie zatrzymuje agentow launchd (Homebrew wykonuje `uninstall` takze
przy upgradzie, a gdrive-buffer trzyma montowanie) i `zap` nie rusza
~/.cloudmachine (bufor niewyslanych kopii). Konfiguracja: packaging/README.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mbeczynski
mbeczynski merged commit 784497b into main Oct 6, 2026
3 checks passed
mbeczynski added a commit that referenced this pull request Oct 6, 2026
- sekcja "Installing" z `brew install --cask renacode/tap/cloudmachine`
- instrukcja budowania kopiowala `cp -R` na zainstalowany bundle; to
  nadpisuje pliki w miejscu i AMFI zabija agentow (OS_REASON_CODESIGNING)
  przy przechodzacym `codesign --verify` - najpierw trzeba usunac stara appke
- usuniete "no prebuilt release yet" i opis release.yml sprzed #7

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@mbeczynski
mbeczynski deleted the ci/homebrew branch October 6, 2026 07:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant