Wydania
Tuist korzysta z systemu ciągłego wydawania, który automatycznie publikuje nowe wersje za każdym razem, gdy znaczące zmiany zostaną scalone z główną gałęzią. Takie podejście zapewnia, że ulepszenia szybko docierają do użytkowników bez ręcznej interwencji opiekunów.
Przegląd#
Stale wydajemy trzy główne komponenty:
- Tuist CLI - Narzędzie wiersza poleceń
- Serwer Tuist - Usługi zaplecza
- Tuist App - Aplikacje macOS i iOS (aplikacja iOS jest stale wdrażana tylko w TestFlight, zobacz więcej tutaj.
Każdy komponent ma swój własny potok wydań, który działa automatycznie przy każdym wypchnięciu do głównej gałęzi.
Jak to działa#
1. Konwencje zobowiązań#
Używamy Conventional Commits do strukturyzowania naszych komunikatów commit. Pozwala to naszym narzędziom zrozumieć naturę zmian, określić skoki wersji i wygenerować odpowiednie dzienniki zmian.
Format: typ(zakres): opis
Rodzaje zobowiązań i ich wpływ#
| Typ | Opis | Wersja Impact | Przykłady |
|---|---|---|---|
wyczyn |
Nowa funkcja lub możliwość | Drobna zmiana wersji (x.Y.z) | feat(cli): dodanie wsparcia dla Swift 6 |
poprawka |
Poprawka błędu | Uderzenie wersji poprawki (x.y.Z) | fix(app): usunięcie awarii podczas otwierania projektów |
dokumenty |
Zmiany w dokumentacji | Brak wydania | dokumenty: instrukcja instalacji aktualizacji |
styl |
Zmiany w stylu kodu | Brak wydania | style: formatowanie kodu za pomocą swiftformat |
refaktoryzacja |
Refaktoryzacja kodu | Brak wydania | refactor(server): uproszczenie logiki autoryzacji |
perf |
Ulepszenia wydajności | Ulepszenie wersji łatki | perf(cli): optymalizacja rozdzielczości zależności |
test |
Dodatki/zmiany testowe | Brak wydania | test: dodanie testów jednostkowych dla pamięci podręcznej |
chore |
Zadania konserwacyjne | Brak wydania | chore: aktualizacja zależności |
ci |
Zmiany CI/CD | Brak wydania | ci: dodanie przepływu pracy dla wydań |
Przełomowe zmiany#
Zmiany przełomowe powodują zwiększenie wersji (X.0.0) i powinny być wskazane w treści zatwierdzenia:
feat(cli): change default cache location
BREAKING CHANGE: The cache is now stored in ~/.tuist/cache instead of .tuist-cache.
Users will need to clear their old cache directory.
2. Wykrywanie zmian#
Każdy komponent używa git cliff do:
- Analiza zatwierdzeń od ostatniego wydania
- Filtrowanie zatwierdzeń według zakresu (cli, aplikacja, serwer)
- Określenie, czy istnieją zmiany, które można zwolnić
- Automatyczne generowanie dzienników zmian
3. Rurociąg zwalniający#
Po wykryciu zmian, które można zwolnić:
- Obliczanie wersji: Potok określa następny numer wersji
- Generowanie dziennika zmian: git cliff tworzy dziennik zmian z wiadomości o zatwierdzeniu
- Proces kompilacji: Komponent jest budowany i testowany
- Tworzenie wydania: Wydanie GitHub jest tworzone z artefaktami
- Dystrybucja: Aktualizacje są przekazywane do menedżerów pakietów (np. Homebrew dla CLI).
4. Filtrowanie zakresu#
Każdy komponent jest wydawany tylko wtedy, gdy wprowadzi odpowiednie zmiany:
- CLI: zatwierdzenia z zakresem
(cli)lub bez zakresu - Aplikacja: Zatwierdzenia z zakresem
(aplikacja) - Serwer: Zatwierdzenia z zakresem
(serwer)
Pisanie dobrych wiadomości commit#
Ponieważ komunikaty o zatwierdzeniach mają bezpośredni wpływ na informacje o wydaniu, ważne jest, aby pisać jasne, opisowe komunikaty:
Do:#
- Używaj czasu teraźniejszego: "dodaj funkcję", a nie "dodano funkcję".
- Bądź zwięzły, ale opisowy
- Uwzględnienie zakresu, gdy zmiany są specyficzne dla komponentów
- Zagadnienia referencyjne, jeśli mają zastosowanie:
fix(cli): rozwiązanie problemu z pamięcią podręczną kompilacji (#1234)
Nie rób tego:#
- Używaj niejasnych komunikatów, takich jak "napraw błąd" lub "zaktualizuj kod".
- Łączenie wielu niepowiązanych zmian w jednym zatwierdzeniu
- Zapomnij dołączyć informacje o zmianach awaryjnych
Przełomowe zmiany#
W przypadku zmian przełomowych należy dołączyć BREAKING CHANGE: w treści
zatwierdzenia:
feat(cli): change cache directory structure
BREAKING CHANGE: Cache files are now stored in a new directory structure.
Users need to clear their cache after updating.
Przepływy pracy wydania#
Przepływy pracy wydania są zdefiniowane w:
.github/workflows/cli-release.yml- wydania CLI.github/workflows/app-release.yml- Wydania aplikacji.github/workflows/server-release.yml- Wydania serwera
Każdy przepływ pracy:
- Działa po naciśnięciu przycisku głównego
- Może być wyzwalany ręcznie
- Używa git cliff do wykrywania zmian
- Obsługuje cały proces wydania
Monitorowanie wydań#
Możesz monitorować wydania poprzez:
- strona GitHub Releases.
- Karta GitHub Actions dla przepływów pracy
- Pliki dziennika zmian w każdym katalogu komponentów
Korzyści#
Podejście ciągłego wydawania zapewnia:
- Szybka dostawa: Zmiany docierają do użytkowników natychmiast po scaleniu
- Redukcja wąskich gardeł: Brak oczekiwania na ręczne wydania
- Przejrzysta komunikacja: Zautomatyzowane dzienniki zmian z wiadomości commit
- Spójny proces: Ten sam przepływ wersji dla wszystkich komponentów
- Zapewnienie jakości: Wydawane są tylko przetestowane zmiany
Rozwiązywanie problemów#
Jeśli zwolnienie nie powiedzie się:
- Sprawdź dzienniki GitHub Actions pod kątem nieudanego przepływu pracy
- Upewnij się, że wiadomości commit są zgodne z konwencjonalnym formatem
- Sprawdź, czy wszystkie testy zakończyły się pomyślnie
- Sprawdź, czy komponent został pomyślnie skompilowany
Dla pilnych poprawek, które wymagają natychmiastowego wydania:
- Upewnij się, że Twój commit ma jasny zakres
- Po scaleniu monitoruj przepływ pracy wydania
- W razie potrzeby uruchom zwolnienie ręczne
Wydanie App Store#
Podczas gdy CLI i Server są zgodne z opisanym powyżej procesem ciągłego wydawania, aplikacja iOS jest wyjątkiem ze względu na proces weryfikacji App Store firmy Apple:
- Ręczne wersje: Wersje aplikacji iOS wymagają ręcznego przesłania do App Store.
- Opóźnienia w przeglądzie: Każda wersja musi przejść przez proces weryfikacji Apple, który może potrwać od 1 do 7 dni.
- Zmiany zbiorcze: Wiele zmian jest zazwyczaj łączonych w każdym wydaniu iOS.
- TestFlight: Wersje beta mogą być dystrybuowane za pośrednictwem TestFlight przed wydaniem w App Store.
- Informacje o wersji: Musi być napisana specjalnie dla wytycznych App Store
Aplikacja na iOS nadal przestrzega tych samych konwencji zatwierdzania i używa git cliff do generowania dziennika zmian, ale faktyczne wydanie dla użytkowników odbywa się w rzadszym, ręcznym harmonogramie.