Desde 4D v19, pode iniciar a compilação de um projecto com um simples comando. Pode estar a perguntar-se para que pode usar isto!
A sua equipa pode ser constituída por vários programadores, então porque não automatizar a compilação em cada código pressionado no seu servidor de controlo de fontes? É sempre mais fácil identificar um erro quando este é rapidamente detectado.
Outro caso é quando o seu projecto é composto por vários componentes. Pode escrever um método que compila, constrói, e depois copia o componente para a base de dados anfitriã.
Este blog irá discutir os diferentes pontos técnicos que são muito úteis para criar as suas próprias ferramentas de automação, juntamente com uma aplicação de exemplo.
Inicie uma aplicação 4D com uma linha de comando
Pode lançar 4D através da linha de comando especificando o projecto a abrir e escolhendo quais as opções a activar. Aqui fica um lembrete de algumas opções que podem ser muito úteis para automatizar uma acção.
Sem cabeça
Para a execução de tarefas repetitivas e automaticamente desencadeadas, a presença de uma interface é desnecessária. Se passar a opção“–headless” na linha de comando, a sua aplicação 4D, Servidor 4D, ou a aplicação fundida será executada sem uma interface.
Para mais detalhes, pode ler este post no blog: Aplicações 4D sem cabeça.
Dataless
A opção“–dataless” permite-lhe pedir 4D para não abrir um ficheiro de dados. Por exemplo, carregar um ficheiro de dados é desnecessário se se criar um script para iniciar uma compilação.
Só para ser claro, o modo sem dados raramente é utilizado. Se abrir 4D em modo sem dados, não pode abrir um ficheiro de dados usando comandos 4D depois de lançar 4D. Encontrará todos os detalhes na documentação.
Parâmetro do utilizador
Automatizar tarefas repetitivas não significa fazer exactamente a mesma coisa de cada vez. Por exemplo, pode desencadear uma tarefa de hora a hora com opções para uma verificação rápida e fácil, e todas as noites, executar outra tarefa que leva mais tempo e recursos.
A opção“–user-param” permite-lhe passar uma string na linha de comando. Depois com a opção “–user-param”. Get database parameter e a constante user param value, é possível fazer passar a corda na linha de comando.
$result:=Get database parameter(User param value;$userParam)
Para mais detalhes, pode ler este post no blogue.
Compilar um projecto UTILIZANDO UM comando
Graças ao comando Compile project pode lançar a compilação de um projecto, passando o seu caminho. O comando também aceita um objecto de opções que lhe permite configurar a sua compilação. Por exemplo, pode especificar as dependências do seu projecto, a Intel e o alvo Silicon, etc.
$status:=Compile project($file; $options)
Se houver um erro, o comando devolve um objecto com a lista de erros composta pela mensagem de erro, o nome do método, e o número da linha. Como lembrete, pode utilizar o comando METHOD OPEN PATH comando para abrir o editor de código directamente na linha em questão. Para descobrir todas as opções deste comando, recomendamos a leitura deste post no blog ou da documentação.
É importante conhecer as possibilidades que este comando oferece, e como utilizá-lo correctamente. Mas a outra grande novidade é que pode executá-lo num projecto em modo interpretado, com as opções“–dataless” e“–headless“, sem uma licença de desenvolvimento! Assim, se utilizar uma solução de servidor externo para compilar a sua aplicação, por exemplo, utilizando a acção de gitHub, não precisa de injectar a sua licença no servidor de terceiros.
Gerar ficheiro de registo
Com as tarefas automáticas, é essencial ter registos para saber que a tarefa foi executada, e para recuperar os erros em caso de problema. Mas, na realidade, não é assim tão simples. A gestão é diferente entre macOS e Windows. A arquitectura dos ficheiros nos servidores pode ser diferente. E o script pode ser executado num dos seus servidores ou num servidor externo.
A solução que propomos é a utilização do comando LOG EVENT com a constante Into system standard outputs. Depois, pode redireccionar o fluxo padrão e o fluxo de erros para um ou vários ficheiros na linha de comando. Assim, é simples adaptar-se ao seu ambiente sem alterar o guião.
Por último, mas não menos importante, saber quando o script foi executado, quando o erro ocorreu, pode ser útil. O Timestamp é perfeito para isto; devolve uma sequência de caracteres que podem ser facilmente adicionados a um ficheiro de registo com uma precisão de milissegundos.
LOG EVENT(Into system standard outputs; Timestamp+" - Eu sou uma informação"; Error information)
LOG EVENT (Into system standard outputs; Timestamp+" - Eu sou um erro"; Error message)
Exemplos concretos
Voilà! Seguindo todas as dicas anteriores, criámos um projecto disponível no GitHub para compilar um projecto. Passamos um objecto de stringified para“–user-param“, que contém três atributos:
- caminho: o caminho do projecto a compilar (atributo obrigatório)
- opções: objeto opções passado para o comando Compile Project (atributo opcional)
- desistir: passar falso para não fechar 4D após compilação, útil para testes; por defeito, 4D fecha após execução (atributo opcional)
Projecto de Compilação Automática
Aqui estão alguns exemplos de linhas de comando, não se esqueça de adaptar os caminhos.
Lance uma verificação de sintaxe:
- 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
Aqui está o conteúdo do nosso ficheiro infolog.txt; o ficheiro errlog.txt está vazio:
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
Compilação com as configurações padrão:
- 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
A compilação com opções passou para o comando Compile project:
- 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
O que se segue?
Agora depende de si. Não hesite em partilhar no GitHub ou no fórum as suas ideias ou soluções para automatizar tarefas.