Come automatizzare la compilazione

Tradotto automaticamente da Deepl

Dalla versione 4D v19, è possibile avviare la compilazione di un progetto con un semplice comando. Vi starete chiedendo a cosa possa servire!

Il vostro team potrebbe essere composto da diversi sviluppatori, quindi perché non automatizzare la compilazione a ogni push di codice sul vostro server di controllo sorgente? È sempre più facile identificare un errore quando viene individuato rapidamente.

Un altro caso è quello in cui il progetto è composto da diversi componenti. Si può scrivere un metodo che compila, costruisce e poi copia il componente nel database host.

In questo blog verranno illustrati i diversi punti tecnici che sono molto utili per creare i propri strumenti di automazione, insieme a un esempio di applicazione.

Avviare un’applicazione 4D con la riga di comando

È possibile avviare 4D tramite la riga di comando, specificando il progetto da aprire e scegliendo le opzioni da attivare. Ecco un promemoria di alcune opzioni che possono essere molto utili per automatizzare un’azione.

Senza testa

Per l’esecuzione di attività ripetitive e attivate automaticamente, la presenza di un’interfaccia non è necessaria. Se si passa l’opzione“–headless” nella riga di comando, l’applicazione 4D, 4D Server o l’applicazione unita verranno eseguite senza interfaccia.

Per maggiori dettagli, potete leggere questo post del blog: Applicazioni 4D senza testa.

Senza dati

L’opzione“–dataless” consente di chiedere a 4D di non aprire un file di dati. Ad esempio, il caricamento di un file di dati non è necessario se si crea uno script per lanciare una compilazione.

Per essere chiari, la modalità senza dati è usata raramente. Se si apre 4D in modalità senza dati, non è possibile aprire un file di dati utilizzando i comandi di 4D dopo aver lanciato 4D. Troverete tutti i dettagli nella documentazione.

Parametri utente

Automatizzare le attività ripetitive non significa fare esattamente la stessa cosa ogni volta. Ad esempio, è possibile attivare un’attività ogni ora con opzioni per un controllo rapido e semplice e, ogni sera, eseguire un’altra attività che richiede più tempo e risorse.

L’opzione“–user-param” consente di passare una stringa nella riga di comando. Quindi, con il Get database parameter e la costante user param value, è possibile ottenere la stringa passata nella riga di comando.

$result:=Get database parameter(User param value;$userParam)

Per maggiori dettagli, potete leggere questo post del blog.

Compilare un progetto UTILIZZANDO un comando

Grazie al Compile project è possibile lanciare la compilazione di un progetto passando il suo percorso. Il comando accetta anche un oggetto opzioni che consente di impostare la compilazione. Ad esempio, è possibile specificare le dipendenze del progetto, il target Intel e Silicon, ecc.

$status:=Compile project($file; $options)

In caso di errore, il comando restituisce un oggetto con l’elenco degli errori composto dal messaggio di errore, dal nome del metodo e dal numero di riga. Come promemoria, è possibile utilizzare il comando METHOD OPEN PATH per aprire l’editor di codice direttamente sulla riga interessata. Per scoprire tutte le opzioni di questo comando, si consiglia di leggere questo post del blog o la documentazione.

È importante conoscere le possibilità offerte da questo comando e sapere come usarlo correttamente. Ma l’altra grande novità è che potete eseguirlo in un progetto in modalità interpretata, con le opzioni“–dataless” e“–headless“, senza una licenza di sviluppo! Quindi, se si utilizza una soluzione server esterna per compilare la propria applicazione, ad esempio utilizzando l’azione git su GitHub, non è necessario iniettare la licenza sul server di terze parti.

Generare un file di log

Con i task automatici, è essenziale avere dei log per sapere che il task è stato eseguito e per recuperare gli errori in caso di problemi. Ma in realtà non è così semplice. La gestione è diversa tra macOS e Windows. L’architettura dei file sui server può essere diversa. E lo script può essere eseguito su uno dei vostri server o su un server esterno.

La soluzione che proponiamo è quella di utilizzare il comando LOG EVENT con la costante Into system standard outputs. In questo modo, è possibile reindirizzare il flusso standard e il flusso di errori a uno o più file nella riga di comando. In questo modo è facile adattarsi al proprio ambiente senza modificare lo script.

Infine, può essere utile sapere quando lo script è stato eseguito e quando si è verificato l’errore. Il comando Timestamp è perfetto per questo; restituisce una stringa di caratteri che può essere facilmente aggiunta a un file di log con precisione al millisecondo.

LOG EVENT(Into system standard outputs; Timestamp+" - Sono un'informazione"; Error information)
LOG EVENT (Into system standard outputs; Timestamp+" - Sono un errore"; Error message)

Esempi concreti

Voilà! Seguendo tutti i suggerimenti precedenti, abbiamo creato un progetto disponibile su GitHub per compilare un progetto. Passiamo un oggetto stringato a“–user-param“, che contiene tre attributi:

  • path: il percorso del progetto da compilare (attributo obbligatorio)
  • opzioni: oggetto opzioni passato al comando Compila progetto (attributo opzionale)
  • quit: passare false per non chiudere 4D dopo la compilazione, utile per i test; per impostazione predefinita, 4D si chiude dopo l’esecuzione (attributo opzionale)

Automatizzare la compilazione del progetto

Ecco alcuni esempi di linee di comando, senza dimenticare di adattare i percorsi.

Avvia un controllo della sintassi:

  • macOS
/.../Contents/MacOS/4D 
--structure /.../Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[]}}"
--headless --dataless 
2>.../errlog.txt 1>.../infolog.txt
  • Windows
C:\...DD.exe 
--structure C:\...\Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[]}}"
--headless --dataless 
2>C:\...\errlog.txt 1>C:\...\infolog.txt

Ecco il contenuto del nostro file infolog.txt; il file errlog.txt è vuoto:

2021-08-25T17:38:52.197Z - Start script
2021-08-25T17:38:54.961Z - user-param: {"path":"/.../myProject.4DProject","options":{"targets":[]}}
2021-08-25T17:38:54.964Z - {"success":true,"errors":[]}
2021-08-25T17:38:54.999Z - End script

Compilazione con le impostazioni predefinite:

  • macOS
/.../Contents/MacOS/4D 
--structure /.../Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\"}" 
--headless --dataless 
2>.../errlog.txt 1>.../infolog.txt
  • Windows
C:\...DD.exe
--structure C:\...\Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\"}" 
--headless --dataless 
2>C:\...\errlog.txt 1>C:\...\infolog.txt

Compilazione con le opzioni passate al comando Compila progetto:

  • macOS
/.../Contents/MacOS/4D 
--structure /.../Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[\"x86_64_generic\"]}}" 
--headless --dataless 
2>.../errlog.txt 1>.../infolog.txt
  • Windows
C:\...DD.exe
--structure C:\...\Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[\"x86_64_generic\"]}}" 
--headless --dataless 
2>C:\...\errlog.txt 1>C:\...\infolog.txt

Cosa succede ora?

Ora tocca a voi. Non esitate a condividere su GitHub o sul forum le vostre idee o soluzioni per automatizzare le attività.

Vanessa Talbot
- Product Owner - Vanessa Talbot è entrata a far parte del team di 4D Program nel giugno 2014. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente. Ha lavorato sulla maggior parte delle nuove funzionalità di multi-threading preemptive e anche su un argomento molto complesso: la nuova architettura per le applicazioni con motore. Vanessa si è laureata presso Telecom Saint-Etienne. Ha iniziato la sua carriera presso il Criminal Research Institute come sviluppatrice per il dipartimento audiovisivo. Ha lavorato anche nei settori dei media e della medicina come esperta di supporto tecnico, produzione e documentazione di nuove funzionalità.