O Abstract CI Worker é um módulo Node.js que é responsável por fazer o build dos componentes visuais (widgets) e publicá-los nos repositórios de recursos compilados.
Nesta imagem, o Abstract CI Worker é o componente que fica entre o Source Code Repository e o Compiled Assets Repository
Invocar via linha de comando:
node .\bin\cli.js --workdir /projects/thea-repos/workspaces/thea.core
onde: --workdir /projects/thea-repos/workspaces/thea.core
é o local onde está o projeto com o código-fonte que deverá ser compilado e publicado
O Compiled Assets Repository (referenciado neste documento como CAR) é o repositório onde os componentes compilados são primariamente publicados.
Este repositório, inicialmente seria um repositório GIT. Porém, por questões de segurança e complexidade, foi decidido que, na primeira versão ele será simplemente uma tabela em um banco postgresql. Um App será criado e disponibilizará uma API para que seja feito o upload dos componentes compilados.
O Abstract CI Worker tem o objetivo de pegar o código-fonte de um widget (ou lib front) compilar, gerando os assets de produção e de dev e, publicá-los no CAR. A publicação em ambientes de dev, tst, prod, store, etc. Será feita por outro Aplicativo que será desenvolvido no futuro.
Nesta seção será detalhado o funcionamento do abstract-ci
O abstract-ci funciona basicamente, compilando o código-fonte de um componente visual, comprimindo e subindo para o CAR.
O seguinte diagrama descreve o funcionamento geral:
A seguir, a documentação detalhada do código:
O código faz as seguintes importações de módulos Node.js:
const abstractCI = require("../index");
const utl = require("../lib/utils");
const package = require("../package.json");
const fs = require("fs");
const path = require("path");
global.stdout = require('../lib/STDOut').initialize({unformated:true});
const artifactPublisher = require('../lib/ArtifactPublisher');
-
abstractCI
é um módulo que contém a implementação principal do Abstract CI Worker; -
utl
é um módulo com funções utilitárias; -
package
é um objeto JSON que contém informações sobre o pacote do Node.js em execução; -
fs
é um módulo que fornece uma API para interagir com o sistema de arquivos; -
path
é um módulo que fornece ferramentas para trabalhar com caminhos de arquivos e diretórios; -
global.stdout
é um objeto que contém a implementação da saída padrão usada pelo Abstract CI Worker; -
artifactPublisher
é um módulo que contém a implementação da publicação de artefatos do Abstract CI Worker.
A função exitWithError
é uma função auxiliar que é usada para imprimir uma mensagem de erro na saída padrão e sair do processo com um código de erro (-1). A função recebe um objeto error
como parâmetro, que contém informações sobre o erro.
A função openManifest
é uma função assíncrona que é responsável por abrir o arquivo de manifesto thea-compose.json
e devolver o objeto JSON correspondente. A função recebe um parâmetro workDir
que indica o diretório em que o arquivo de manifesto está localizado. Se o arquivo não for encontrado, a função rejeita a promessa com um objeto Error
. Se o arquivo for encontrado, a função lê o arquivo e devolve o objeto JSON correspondente na promessa resolvida.
A função publishArtifacts
é uma função assíncrona que é responsável por publicar os artefatos gerados pela execução do Abstract CI Worker em um determinado ambiente. A função recebe dois parâmetros: environment
que indica o ambiente de destino e manifest
que contém as informações do manifesto. A função verifica se as informações de publicação para o ambiente de destino estão definidas no manifesto. Se estiverem, a função inicia o processo de publicação de artefatos, caso contrário, a função rejeita a promessa com um objeto Error
.
A função start
é a função principal do módulo que é responsável por iniciar o processo de execução do Abstract CI Worker. A função imprime uma mensagem de informação com a versão do pacote na saída padrão. Em seguida, a função obtém o diretório de trabalho e o ambiente de destino a partir dos argumentos de linha de comando usando o módulo utl
. A função chama a função openManifest
para abrir o arquivo de manifesto thea-compose.json
. Se a função openManifest
for resolvida com sucesso, a função inicia a execução do Abstract CI Worker chamando a função abstractCI.getTaskRunner
com os parâmetros taskRunner
, que contém o nome do executor de tarefas definido no manifesto, e manifest
, que contém as informações do manifesto. A função abstractCI.getTaskRunner
retorna um objeto que implementa a interface TaskRunner
, que é responsável por executar as tarefas definidas no manifesto. A função startTask
é chamada no objeto TaskRunner
para iniciar a execução das tarefas. Se a execução das tarefas for bem-sucedida, a função chama a função publishArtifacts
para publicar os artefatos gerados. Se a publicação for bem-sucedida, a função chama a função process.exit
para encerrar o processo com código de sucesso (0). Se ocorrer algum erro durante a execução do Abstract CI Worker, a função exitWithError
é chamada para imprimir uma mensagem de erro na saída padrão e encerrar o processo com um código de erro (-1).
A função principal start
é chamada ao final do código para iniciar a execução do Abstract CI Worker.