Shell Buildscript for Kongregate Deploy – Teil 1 / 3

Das Ziel meines Build Scripts ist es wichtige Developmentzeit zu sparen durch einen automatisierten Prozess. Dev-Time ist die wertvollste Resource, die man auf jedenfall sinnvoll nutzen muss. Automatisierung kann dabei helfen Monkey-Work dem Rechner zu überlassen.

Außerdem will ich mit diesem Blog-Post mein eigenes Script dokumentieren. Wenn der Buildprozess einmal automatisiert ist, dann werde ich das Script nur noch benutzen und schnell manche Details vergessen.

Optionen

Im Script kann man verschiedene Einstellungen vornehmen.

set DEPLOY_FOLDER=Deploy
set BUILD_FOLDER=Development
set BUILD_NUMBER=0
set CANVAS_WIDTH=800
set CANVAS_HEIGHT=600

Im DEPLOY_FOLDER werden die finalen Dateien erstellt. Aus dem BUILD_FOLDER werden alle Dateien extrahiert. BUILD_NUMBER sollte nicht verändert werden. Die Zahl gibt die laufende Nummer für den ersten Build an. CANVAS_WIDTH und CANVAS_HEIGHT definieren die finale Größe des HTML Canvas. Auch das sollte nicht geändert werden.

Setlocal EnableExtensions EnableDelayedExpansion
set ARTIFACTS_FOLDER=%DEPLOY_FOLDER%_Artifacts
set LOG_FOLDER=%DEPLOY_FOLDER%_Log

Der ARTIFACTS_FOLDER und der LOG_FOLDER enthalten einige extra Infos. Die sind solange irrelevant, bis ein Fehler auftaucht. Dann kann man hier nachlesen, wo es gehapert hat oder im ARTIFACTS_FOLDER die nicht minimalisierte .js finden. Das kann hilfreich sein, wenn es ums debuggen geht.

Setlocal EnableExtensions EnableDelayedExpansion müßt ihr setzen, damit ihr bei den Berechnungen keine Probleme bekommt. Lest einfach unter https://ss64.com/nt/setlocal.html mehr dazu.

Timestamp, Date and Time

:: The format of %DATE% is DD.MM.YYYY for example 25.11.2016
set TEMP=%DATE%
set /A MYDATE=%TEMP:~6,4%%TEMP:~3,2%%TEMP:~0,2%

:: The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99 (CS=Centiseconds)
set TEMP=%TIME%
set /A MYTIME=%TEMP:~0,2%%TEMP:~3,2%%TEMP:~6,2%%TEMP:~9,2%0
set TIMESTAMP=%MYDATE%_%MYTIME%

MYDATE und MYTIME sind für den TIMESTAMP notwendig. set /a ermöglist es im Batchfile Arithmetische Operationen auszuführen.

Buildnumber Extrahieren

for /r %%f in (%DEPLOY_FOLDER%\*.buildnumber) do (
  set BUILD_NUMBER=%%~nf
  set /a BUILD_NUMBER += 1
)

Die BUILD_NUMBER ist wichtig, um die Buids klar voneinander zu trennen. Diese wird immer um eins incrementiert. Dabei ist die aktuelle Buildnummer in einer leeren Datei im
DEPLOY_FOLDER gespeichert. Wichtig ist nur der Name der Datei: [BUILD_NUMBER].buildnumber

Log File vorbereiten

set LOGFILE=%LOG_FOLDER%\%TIMESTAMP%_build_%BUILD_NUMBER%.log

@echo Start Deploying > %LOGFILE%
@echo  -- Settings >> %LOGFILE%

@echo     TIMESTAMP    : %TIMESTAMP%  (YYYYMMDD_HHMMSSms) >> %LOGFILE%
@echo     BUILD_NUMBER : %BUILD_NUMBER% >> %LOGFILE%
@echo     DEPLOY_FOLDER: \%DEPLOY_FOLDER% >> %LOGFILE%
@echo     BUILD_FOLDER : \%BUILD_FOLDER% >> %LOGFILE%

Mit obigen Zeilen wird das Logfile vorbereitet und enthält die korrekte Startzeit und Buildnummer. Jeder Build hat sein eigenes Logfile, die alle im LOG_FOLDER zu finden sind.

Alles sauber halten

Um den Deploy clean zu halten werden der alte DEPLOY_FOLDER und 
ARTIFACTS_FOLDER folder komplett gelöscht und danach erst die wichtigen Dateien kopiert.

RD /S /Q %DEPLOY_FOLDER%
RD /S /Q %ARTIFACTS_FOLDER%
mkdir %DEPLOY_FOLDER%
mkdir %ARTIFACTS_FOLDER%
XCOPY %BUILD_FOLDER% /s %DEPLOY_FOLDER% /i

:: Delete unnecessary folders
RD /S /Q %DEPLOY_FOLDER%\.git
RD /S /Q %DEPLOY_FOLDER%\.idea
RD /S /Q %DEPLOY_FOLDER%\Testing 

Mit dem RD /S /Q werden unnötige Folder gelöscht. Das geschiet für alle Subfolder (/S) und ohne Y/N Abfrage (/Q).

Im 2. Teil erkäre ich, wie ihr die .js Files konkateniert und minimiert.
Im 3. Teil erkläre ich, wie ich die dazugehörige .html Datei mit einem script erzeuge.


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.