WinFuture-Forum.de: Versionsfile automatisch erzeugen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Versionsfile automatisch erzeugen

#1 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 934
  • Beigetreten: 14. August 15
  • Reputation: 81

geschrieben 26. April 2017 - 12:09

folgendes Szenario:

- programmiert wird eine Klasse/Anwendung in PHP
- die Klasse/Anwendung hat eine bestimmte Version
- die Klasse/Anwendung hat eine Updatecheck Funktion, die prüft ob auf Github eine neuere Version vorliegt
- dazu liest die Funktion ein Versionsfile aus, welches auf Github liegt
- diese Funktion muss extra aufgerufen werden, wird also nicht automatisch ausgeführt

Die Frage ist nun folgende:

Wie erzeugt man am besten automatisch ein Versionsfile, welches dann zusammen mit der aktuellen Version der Klasse/Anwendung auf Github hochgeladen werden kann? (Es geht mir nicht darum, wie man ein File öffnet und dort hinein schreibt.)

Ich wollte es so integrieren, dass bei Ausführung der Updatecheck Funktion geprüft wird, ob lokal ein Versionfile vorliegt und dieses dann entweder automatisch erzeugt oder aber aktualisiert wird.

Das Problem bei PHP ist nämlich, dass da nichts kompiliert wird. Schreibt man z.B. in C, dann kann man beim erzeugen des aktuellen Builds auch ein Versionfile erzeugen lassen. Ein Code in PHP ist aber in dem Moment fertig und ausführbar wenn er gespeichert wurde.

Ich finde jedoch die Methode der Erzeugung durch die Klasse/Anwendung nicht ganz optimal. Wäre es nicht besser wenn das der Editor (VSCode) oder Github Desktop automatisch generiert und up-to-date hält? Es ist in meinen Augen nämlich subotimal, wenn man dass jedesmal per Hand anpassen muss.

Vielleicht denke ich auch einfach zu kompliziert. :rolleyes:

Edit: Mir ist klar, da es ein Funktion ist welche möglicherweise öfter verwendet werden kann, könnte man das Ganze auch in eine eigene Klasse verlagern.

Dieser Beitrag wurde von Gispelmob bearbeitet: 26. April 2017 - 12:18

0

Anzeige

#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 7.660
  • Beigetreten: 20. Juli 07
  • Reputation: 847

geschrieben 26. April 2017 - 12:26

Mit PHP bräuchtest Du dazu eine Art 'Release'-Script, welches das bewußte Projekt in ein bereitstellbares Format umbaut. In diesem Kontext kann dann auch über den Zeitstempel der Laufzeit ( via new DateTime() oder dergleichen) irgendeine Form .stamp-Datei generiert werden, worin dann die Version abgelegt werden kann.

Wichtig ist halt nur, daß der Versionierungsstring aus irgendwelcher bereitstehenden Information generiert werden kann. Via Zeitstempel wär die einfachste Option; via Hashwert über zB die gesamte Datei geht aber auch, oder man legt halt irgendwo eine Methode Klasse::Version() an, welche zB (Major,Minor,Patchlevel) zurückliefert und wo man dann natürlich diese drei Werte händisch warten müßte.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 934
  • Beigetreten: 14. August 15
  • Reputation: 81

geschrieben 26. April 2017 - 13:15

Beitrag anzeigenZitat (RalphS: 26. April 2017 - 12:26)

Wichtig ist halt nur, daß der Versionierungsstring aus irgendwelcher bereitstehenden Information generiert werden kann.

In der Klasse sind dafür Konstanten definiert.

_CLASS_VERSION_MAJOR
_CLASS_VERSION_MINOR
_CLASS_VERSION_BUILD
_CLASS_VERSION_REVISION
_CLASS_DATE
_CLASS_TIME
_CLASS_BRANCH
_CLASS_BUILD_CHANNEL

Und noch weitere die hier aber nicht wichtig sind.

Diese muss ich leider noch per Hand ändern, aber es ist möglich sie auszulesen und daraus die Version zu bilden.

Eine Art "Release Script" ist eine Idee. Ich muss derzeit noch die Projekte per Hand in den Github Ordner kopieren. Wenn ich dafür ein Script erzeuge, welches auch gleich das Versionsfile anlegt, wäre das eine Möglichkeit.

Dieser Beitrag wurde von Gispelmob bearbeitet: 26. April 2017 - 13:16

0

#4 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 7.660
  • Beigetreten: 20. Juli 07
  • Reputation: 847

geschrieben 26. April 2017 - 18:21

_CLASS_VERSION_MAJOR
müßtest Du reinschreiben.
_CLASS_VERSION_MINOR
Ebenso.
_CLASS_VERSION_BUILD
könnte ein Release-Script auslesen, um 1 erhöhen (oder sonstwas) und wieder speichern.
_CLASS_VERSION_REVISION
Je nachdem wie sich die Revision bestimmt, entweder per Hand oder aus andere Information abgeleitet. Letzteres könnte das script machen. Ersteres natürlich eher nicht.
_CLASS_DATE
Per DateTime() oder sowas.
_CLASS_TIME
Ebenfalls, nur halt der Time-Teil davon.
_CLASS_BRANCH
Wenn Du da Zugriff hast, kannst Du ggf den Branch aus dem VCS auslesen. Und sei es nur mit system(git branch).
_CLASS_BUILD_CHANNEL
Wäre die Frage, was das genau ist. Aber so ein Channel sollte ja zumindest theoretisch auch irgendwo hinterlegt sein, wo das ausgelesen und ins Script reingeschrieben werden kann.


Von der Implementierung könntest Du da ein Template mit @TEMPLATESTRINGS@ reinpacken und das dann per preg_replace() und einem Eingabeobjekt ersetzen lassen, sodaß dann aus version.php.in eine Version.php generiert wird. Oder aber Du hast einfach eine Zuweisung über ein Array, sagen wir VERSION_MAJOR = $__version['major'], und dann hast Du eine extra Minidatei, wo nur $__version[] definiert ist und welche dann durch das Release-Script gelesen und überschrieben werden kann.

Per 7z oder zip einpacken wäre dann sozusagen der Abschluß, wenn es nicht eh eingecheckt werden soll zB via git add. Aber auch das kann das Script ggf noch machen, wenn man sich das nicht vorher sicherheitshalber nochmal anschauen will.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#5 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 934
  • Beigetreten: 14. August 15
  • Reputation: 81

geschrieben 26. April 2017 - 19:10

BRANCH ist der Entwicklungszweig, meistens ist es master, es sei denn ich muss debuggen, versuch eine andere methode oder bau was neues ein. Ich hab es aber hauptsächlich integriert damit es Github kompatible ist.

/*
*
* branch	   suffix     desc
*
* morning star     ms	      new ideas
* dbg		   dbg	      with error output informations	 
* master		      master branch
*
*/


BUILD_CHANNEL ist quasi der build a la Mozilla und etwas erweitert.

/*
*
* channel	  suffix      desc
*
* shadow copy     sc	      experimental
* nightly	  nightly     nightly build
* aurora          alpha	      alpha build
* sunrise	  beta	      beta build
* daylight        rc	      release candidate
* high noon		      release
*
*/


BRANCH kann ich vom Verzeichnis ableiten, denn das liegt jeweils in einem anderen Verzeichnis. BUILD_CHANNEL muss wohl anders regeln, wahrscheinlich gehts nur manuell.

Insgesamt versuch ich mich sowieso beim Versioning etc. an Standards zu halten. Beim Branch ist es einfach, aber Build Channel, da hab ich die Integration noch nicht optimal gelöst.
0

#6 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.500
  • Beigetreten: 28. Mai 06
  • Reputation: 177

geschrieben 09. Mai 2017 - 12:37

Ich persönlich würde das ganze einfach über eine Changelog.md Datei managen. Muss man zwar immer noch händisch machen, aber dann hat man alle infos dabei die man braucht.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0