Open Source, Helm e Javascript
Published: 2020-07-09 11:49:58

Salve terraqueos, tudo em ordem?

Atrasei um pouco o artigo dessa semana, mas foi por uma boa causa. Além de estar trabalhando bastante, ando passando por um momento de grandes revoluções pessoais e vou falar um pouco sobre isso também hoje. O artigo será divido em duas partes, a primeira onde vou falar um pouco sobre alguns acontecimentos e mudanças de atitude e a segunda com um exemplo prático bem legal!

# Open-Source

Eu sempre fui declaradamente apaixonado por Open Source. Pra quem não é familiarizado com o termo, este é um modelo colaborativo de desenvolvimento, que permite a livre consulta, modificação e distribuição do código-fonte de um software sem a necessidade de pagar por uma licença comercial. Eu acho incrível o poder que uma comunidade com um interesse  comum possui de construir coisas realmente grandiosas. E assim como eu sempre me beneficiei de tudo que é oferecido gratuitamente, também sempre tive uma grande vontade contribuir para que outras pessoas sintam o mesmo. E aí entra uma questão bastante comum: Como eu posso contribuir com a comunidade? Vou tentar abordar um pouco sobre o assunto em cima de algumas experiências recentes.

Eu sempre fui muito perfeccionista (no sentido ruim mesmo), onde eu acho que nada nunca tá perfeito e se não tiver perfeito não serve. E esse "perfeito" muitas vezes nunca chega. Eu também sempre gostei de fazer muita coisa ao mesmo tempo e essas duas características em conjunto, fizeram com que eu tivesse um certo bloqueio durante algum tempo. Eu estava sempre fazendo muitas coisas e nenhuma delas estava perfeita o suficiente, logo, não serviam.

# Iniciando a revolução

A primeira coisa que fiz foi mudar meu mindset em relação a essas questões. Eu entendi que a perfeição que eu buscava era algo impossível e que eu precisava direcionar meu foco para terminar projetos de forma mais simples. Então eu comecei a planejar meu tempo de uma forma inteligente, colocando data e horário pra tudo que eu desejava fazer com antecedência. E a primeira coisa que eu decidi fazer na prática, foi começar a escrever aqui no dev.to, que também é uma forma de contribuir com a comunidade compartilhando conhecimento. Vale lembrar que existem diversas formas de contribuição, como escrever artigos, participar de talks, eventos, ajudar membros da comunidade e claro, escrevendo muito código! E assim, iniciei a fase dois do meu plano para dominar o mundo.

# Hands-on

Bom, então vamos de hands-on! Eu sempre usei bastante nosso querido [Github](https://github.com) (a maior comunidade de código open-source do mundo), porém de uma forma muito pessoal, guardando projetos, templates, compartilhando com pessoas mais próximas e esse tipo de coisa. Então, o segundo passo após começar a escrever aqui, foi começar a contribuir também com projetos que possam ser relevantes para a comunidade. E como a primeira vez tem que ser especial (e dizem que a gente nunca essquece), decidi começar compartilhando algo relacionado a duas das minhas tecnologias favoritas: Javascript e Kubernetes <3.

O Kubernetes é uma ferramenta para orquestração e gerenciamento de containers extremamente poderosa. Quem trabalha com essa tecnologia provavelmente conhece o [Helm](https://helm.sh), uma ferramenta para facilitar o gerenciamento de aplicações em Kubernetes. Em um projeto que ando trabalhando recentemente, surgiu a uma necessidade de utilizar o Helm, que é uma ferramenta CLI, através do NodeJS e foi assim que surgiu meu [primeiro pacote publicado no NPM](https://www.npmjs.com/package/helm-wrapper) (O gerenciador de pacotes do NodeJS). E claro, o código é totalmente open-source e está disponível no [Github](https://github.com/thiagomr/helm-wrapper)! 


# Helm Wrapper

Eu criei um [wrapper](https://www.npmjs.com/package/helm-wrapper) para o Helm, permitindo utilizar as funcionalidades da mesmo via Node JS. Criei as funcionalidades mais utilizadas (install, upgrade, uninstall, list, history, rollback), com possibilidade de passar todas as flags suportadas. E caso seja necessário utilizar alguma função não implementada, também criei uma função que permite receber um comando custom, sendo possível executar outros comandos (sem o mesmo padrão nas respostas dos métodos). Vou demonstrar de forma breve como utilizar (para mais detalhes, basta acessar o [repositório](https://www.npmjs.com/package/helm-wrapper)):

Instalando o pacote:

```js
const helm = require('./index');
```

Utilizando algumas funcionalidades:

```js
/**
 * install a release
 */
helm.install('nginx', 'bitnami/nginx');
 
/**
 * install a release with flags
 */
helm.install('nginx', 'bitnami/nginx', ['-n stage']);
 
/**
 * upgrade a release
 */
helm.upgrade('nginx', 'bitnami/nginx');
 
/**
 * rollback a release
 */
helm.rollback('nginx', 1);
 
/**
 * list releases
 */
helm.list();
 
/**
 * list release history
 */
helm.history('nginx');
 
/**
 * uninstall release
 */
helm.uninstall('nginx');

/**
 * custom command
 */
helm.custom('help');
```

Inicialmente minha ideia era criar uma interface HTTP para o Helm. Porém, decidi criar um wrapper um pouco mais genérico, permitindo que qualquer um pudesse fazer sua própria implementação de API, ou qualquer outra desejada. Ainda preciso fazer uma documentação mais rica e escrever testes, mas como citei anteriormente, isso será um trabalho contínuo e conto com a ajuda de vocês pra isso também!

Seguindo a ideia inicial, também fiz minha própria implementação de API utilizando o wrapper, que acompanha também uma imagem Docker, permitindo rodar todo o ambiente necessário sem nenhuma dependência local! Mas esse é assunto que ficará para o próximo post!

# Conclusão

Então por hoje é isso. Estou muito feliz pelo início dessa nova jornada e no próximo artigo vou abordar a minha implementação de API utilizando o wrapper e também falar um pouco sobre alguns tópicos importantes para quem também deseja embarcar no fantástico mundo do open-source. Sendo assim, me contem o que acharam, suas experiências e contribuições com código open-source, principais dúvidas, sugestões e o que mais quiserem.


Espero que todos estejam bem, até a próxima e grande abraço!