Entwicklungsprozess nach dem Release der v4 (git-flow, branch, tag)

Hallo zusammen!

Ich habe mich mit @AlexTrovato und @VonOx darüber unterhalten, da die Veröffentlichung bald ansteht, müssen wir unseren Entwicklungsprozess ändern, um vor jeder Veröffentlichung mehr Tests einzuführen.

Bevor wir über dieses Thema diskutieren, nur eine Einschränkung, die wir haben:

Die Release-Builds von Docker-Images für ARM-Plattformen sind extrem langsam (ca. 1 Stunde), und wir können nicht unbegrenzt viele davon durchführen. Ich kenne die Grenzen von CircleCI nicht, aber einige Builds pro Woche/Monat sind in Ordnung, mehrere Builds pro Tag sind nicht möglich.

Wir können also nicht sagen, dass wir systematisch einen Branch (master? dev?) bauen, es muss eine manuelle Aktion sein, um zu sagen: « Wir möchten einen DEV-Build durchführen, damit jeder diese Pre-Release testen kann ».

@AlexTrovato Ich überlasse dir das Wort, wenn du Vorschläge hast :slight_smile:

Äh hallo, ich stelle mich vor, ich heiße… nein, wir haben uns ja schon vorgestellt :stuck_out_tongue:

Ich denke, es könnte interessant sein, einen « testing »- oder « pre-release »-Zweig zu haben, der sozusagen den aktuellen Modus fortsetzt, eine Kandidatenversion, die maximal getestet werden muss (wir wissen ja, dass es schwierig ist, alles zu testen, besonders wenn man sich mit Hardware verbindet…).

Kurz gesagt, wir sollten im Modus der Bilderzeugung pro neuer Dienst bleiben, mit maximalen Tests, um Feedback zu korrigieren, ohne sich die Finger zu verbrennen.

Ich sage « pro neuer Dienst », aber wenn wir genug Tester finden, könnten wir bis zu 3 Dienste gehen; aber ich denke auch, dass es wichtig ist, den Umfang zu begrenzen.

Das bedeutet, dass wir maximal ein Bild pro Tag hätten (weil auch Zeit benötigt wird, um das Feedback zu bearbeiten).

Also:

  • Warten auf die Integration von N neuen Funktionen (Dienste oder Kern)
  • Erzeugen eines Bildes mit einem Umfang, der auf diese N Funktionen begrenzt ist (+ andere Fehler, falls vorhanden)

Wir können uns einem Agile + Git Flow-Prozess annähern:

  • Bereitstellung einer Arbeitsmenge für eine begrenzte « Dauer / Umfang » (mit einer Aufgabenliste)
  • Integration dieser Neuerungen in einen dev-Zweig aus den PRs
  • Validierung (je nach Verfügbarkeit) der Neuerungen (aufgelistet) eine nach der anderen
  • Wenn alles in Ordnung ist, wird alles in master integriert
  • eine neue Version ist geboren

Der Erfolg kommt mit guter Organisation.

Ich rede und rede, aber eure Meinungen interessieren mich.

Hallo ihr beiden,
Ich verstehe nicht ganz, was ihr meint, und das ist normal, ich habe keine Kenntnisse in der Softwareentwicklung.
Aber könntet ihr bitte genauer erklären, was ihr mit Folgendem meint:

Braucht ihr Tester für bestimmte Funktionen oder bestimmte Hardware, bevor ihr sie endgültig in Gladys integriert?
Falls ja, wäre es vielleicht interessant, eine Liste der verfügbaren Benutzer und der Hardware, die sie besitzen, zu erstellen, um Tests durchführen zu können.

Diese Liste wird die Leute nicht verfügbar machen, aber es ist eine ganz gute Idee zu wissen, an wen man sich wenden kann.

Ja, ich mag die Idee der Materialliste.
Ich gehe davon aus, dass, wenn du dein Material angibst, du möchtest, dass es in Gladys integriert wird, und dafür muss es getestet werden.

Ich bin dafür.

Was den Dialog zwischen Alex und Pierre-Gilles angeht, verstehe ich auch nicht alles. Aber es ist interessant, dieses Thema zu lesen, denn meistens sind diese Gespräche privat und Nicht-Entwickler können nicht teilnehmen und ihre Meinung äußern.

Das betrifft auch die Projektüberwachung, sodass Projektleiter oder andere Teamleiter auf organisatorischer Ebene beitragen können.

Es wäre tatsächlich gut, einen Testzweig zu haben, um neue Funktionen/Entwicklungen zu validieren, bevor sie in den Hauptzweig integriert werden.
Aber sollten wir sie nach Dienstleistungen aufschlüsseln? Ich glaube nicht, denn sonst testen wir nicht die potenziellen Nebeneffekte auf die anderen in Entwicklung befindlichen Dienste.

Es wäre auch gut, einen Zweig zu haben, um die auf der Release entdeckten Fehler schneller zu beheben => Git flow :+1:

Ich bin auch dafür, Aufgabenlisten zu definieren, die mit PRs verbunden sind und nach Meilensteinen zu integrieren, aber ich merke, dass es schwierig ist, agil zu sein, wenn man nur abends daran arbeitet…
wenn wir einen flexiblen Weg hätten, um festzulegen, welche PRs in die nächste Release integriert werden, abhängig von der Entwicklung unseres Zeitplans, wäre das super.

Mit dieser RC wird @pierre-gilles GAFAM-Investoren finden und uns einstellen!

Cool! :+1:

Übrigens, ich habe ein nettes Bug-Sammel-Tool gefunden, das Node unterstützt. Es gibt einen großen Artikel darüber im Linux Magazin Sonderheft, das gerade erschienen ist:

Kennt ihr das?

Grundsätzlich bin ich dafür. Aber was mir bei diesem Ansatz Angst macht, ist, dass dieser Zweig zu einem „Alles-Mögliche“-Zweig wird, und dass wir irgendwann in einer Situation sind, in der wir zum Beispiel 2 Features haben, die bereit zum Mergen sind, und die durch ein „verrottetes“ Feature blockiert werden, das das Mergen verhindert.

Zum Beispiel: Stell dir vor, du arbeitest an der PR Sonoff HTTP, und jemand arbeitet an der PR Zigbee2mqtt.

Wenn wir beide in „pre-release“ setzen, aber eine der beiden einen kritischen Bug einführt, der lange dauert, um behoben zu werden, dann ist die PR Sonoff blockiert (und der gesamte Entwicklungsfluss mit). Dort, wo wir in unserem aktuellen Ansatz „pro Feature individuell pro Zweig“ arbeiten.

Ich wäre interessiert zu sehen, wie große Open-Source-Projekte, die unserem Use-Case nahe sind, das machen (ich denke zum Beispiel an Home Assistant, sie haben viele Beitragende).

Ja, ich verwende das auf vielen Projekten. Allerdings ist es für Cloud-Projekte geeignet, aber nicht für selbstgehostete Open-Source-Projekte.
1/ Es sendet alle deine Daten an Sentry, das ist das Gegenteil der Projektphilosophie
2/ Abgesehen von den Preisen/Begrenzungen. Es ist überhaupt nicht für unseren Use Case gemacht :slight_smile:

Wenn du kannst, können wir über den Teil Fehlerverfolgung/Telemetrie in einem anderen Thema sprechen. Es ist ein Thema, dem ich nicht abgeneigt bin, aber es muss gut gemacht werden und mit vielen Vorsichtsmaßnahmen, um die Privatsphäre der Gladys Assistant-Nutzer zu respektieren.

@pierre-gilles ich gebe zu, dass der Multi-Feature-Zweig riskant ist. Man könnte dann Folgendes tun:

  • eine Feature / ein Service ist fertig
  • man versichert sich, dass man mit dem „pre-release“-Zweig abgestimmt ist
  • man erstellt ein Image
  • man „garantiert“, dass alles funktioniert
  • man merge in den „pre-release“-Zweig
  1. Feature, dann wieder von vorne

Das wird etwas länger dauern, aber etwas sicherer.
Der größte Nachteil, den ich sehe (auf den ersten Blick), ist die parallele Entwicklung:

  • Feature 1 und 2 sind gleichzeitig fertig
  • man testet sie
  • beide sind in Ordnung
  • aber der Merge von einem kann die Funktionsfähigkeit des anderen beeinträchtigen
  • daher muss man die Testphase von „2“ wiederholen, nachdem „1“ gemerged wurde
    (kleiner Zeitverlust, aber Qualitätsgewinn)

Das gesagt, da die Entwickler nicht in Vollzeit arbeiten, kann man dies als einen Randfall betrachten.

Um auf die Prozesse großer Open-Source-Projekte vergleichbarer Größe einzugehen, hier ist, wie Home Assistant vorgeht:

  1. Ein « dev »-Branch, der unserem Master-Branch entspricht. Alle PRs werden in diesen Branch gemerged, und einmal pro Woche wird ein « beta »-Image gebaut. Ich nehme an, dass einige Power-User Home-Assistant Beta statt der « prod »-Version laufen lassen.

  2. Ein Master-Branch, der die Prod-Version ist. Alle zwei Wochen rebasen sie den « master »-Branch auf den dev-Branch. (Master wird zum Inhalt von dev, der normalerweise seit einer Woche über den beta-Tag getestet wird.)

Ich finde das nicht schlecht, aber meine Frage ist: Was passiert, wenn es ein großes Problem in ihrem dev-Branch gibt?

Außerdem sehe ich am Ende wenig Unterschied zu unserem aktuellen Flow.

Wir mergen die PRs in master (der ihrem dev entspricht). Dann fehlt uns nur noch eine manuelle CI-Aufgabe, um master zu bauen, wenn wir es brauchen (zu einem Docker-dev-Tag), und wenn wir bereit sind, machen wir ein versioiniertes Tag, damit es in die Produktion geht!

Ja, im Großen und Ganzen ist es dasselbe, es ist vor allem die Test- und Genehmigungsphase, die « streng » sein muss.

Genau, ein PR sollte nur gemerged werden, wenn es wirklich perfekt funktioniert.

Ach übrigens, das erinnert mich daran, dass es cool wäre, wenn jeder PR mindestens ein amd64-Build in den automatischen Tests durchläuft, um sicherzustellen, dass das Docker-Image immer perfekt funktioniert. (Ich sage amd64, weil das schnelle Builds sind, wenn wir ARM-Builds testen müssen, dauert das viel länger.) Derzeit sind wir ein bisschen blind, wenn wir den Docker-Teil mergen. @VonOx, was denkst du?

Ich bin einverstanden, aber das große Hindernis bei den PRs ist die Verwaltung der Geheimnisse.

Um das zu umgehen, könnten wir ein dediziertes CI-System (z. B. Travis) aufbauen, das es ermöglicht, genauer zu steuern, wer die Build-Logs sieht.

Das ist nur eine spontane Idee.

Beim Build für amd64 in den PRs meinte ich nur einen Build ohne Push! Also keine Probleme mit Geheimnissen :slight_smile:

Man ist quasi gezwungen, sich vor dem Build einzuloggen, es gibt jetzt sogar ein Rate Limit beim Pull.

Nein, wir sind vorerst nicht auf CircleCI umgestiegen!

Sie haben dazu kommuniziert:

CircleCI hat sich mit Docker zusammengetan, um sicherzustellen, dass unsere Nutzer weiterhin auf Docker Hub ohne Rate Limits zugreifen können. Ab dem 1. November sollten Sie, mit wenigen Ausnahmen, bei der Nutzung von Docker Hub über CircleCI nicht von Rate Limits betroffen sein.

Diese Rate Limits könnten jedoch in Zukunft für CircleCI-Nutzer in Kraft treten. Deshalb ermutigen wir Sie und Ihr Team, Docker Hub-Authentifizierung zu Ihrer CircleCI-Konfiguration hinzuzufügen und ggf. Ihren Docker Hub-Tarif zu aktualisieren, um zukünftige Auswirkungen von Rate Limits zu vermeiden.

Ja, das ist natürlich keine langfristige Lösung, aber vorerst funktioniert es :slight_smile:

Für mich ist es klar, dass sie eine Lösung für Open-Source-Projekte in Bezug auf die Rate Limits umsetzen werden, denn wir sind sicher nicht die Einzigen, die dieses Problem haben.

Was die Builds und Pushes in den PRs angeht, bin ich voll und ganz damit einverstanden, dass wir immer noch das Problem mit den Secrets haben, aber ich denke, dass es mit nur amd64-Builds funktioniert!

Ach das habe ich gar nicht gesehen! Dann ja, kein Problem. Man kann sogar GitHub-Aktionen für Pull Requests nutzen.

Ich fasse es kurz, bevor ich mit dem PR beginne:

  • @pierre-gilles du erstellst einen dev-Zweig
  • wir bauen ein Docker-Beta-Image auf diesem Zweig (wir können GitHub Actions verwenden, um das Kontingent zu erhalten)
  • Wir fügen einen amd64-Build zu den PRs ohne Push und ohne Secrets hinzu.

PS: Wenn wir Images auf PRs bauen müssen, kann ich das (mit einem Travis zum Beispiel) tun.