TL; DR: SDKMAN CLI será reescrito em GolangSeis anos se passaram desde que lançamos a primeira versão do SDKMAN. Nas versões anteriores, era conhecido como GVM e era usado para gerenciar o Groovy e ferramentas relacionadas. Logo ficou claro que não deveria se limitar ao ecossistema Groovy e também poderia ser aplicado a outros SDKs da JVM. Nesse ponto, o GVM foi renomeado para SDKMAN. Embora o nome tenha mudado, a tecnologia principal permanece a mesma.
Assim como a GVM uma vez superou seu nome, o SDKMAN superou a tecnologia na qual foi construído. Apesar de os serviços de back-end terem sido substituídos por alternativas melhores, o cliente CLI permaneceu o mesmo e se tornou nossa maior fonte de decepção.
No começo, escolhemos o Bash para criar o GVM, pois ele cobria todos os requisitos. Ele estava disponível em todos os sistemas * nix, funcionou rapidamente e nos forneceu um ambiente de tempo de execução sem dependências ou despesas adicionais. Isso significava que o download de uma nova instalação era praticamente fácil em praticamente qualquer sistema.
Apesar dos benefícios que o Bash nos deu, ao longo do tempo, encontramos muitos problemas com essa escolha:
- Os usuários do Windows devem passar por etapas instalando o Cygwin / Git Bash
- nosso software nem sempre funciona bem com conchas alternativas, como casca de peixe
- hacks especiais devem ser suportados para compatibilidade com o ZSH
- incompatibilidade entre as principais versões do Bash (e a teimosa recusa da Apple em enviar o OSX com uma versão moderna do Bash devido a problemas de licenciamento bobo)
- problemas de rede devido ao uso do curl como o principal cliente http
- dificuldades com o teste eficaz do código Bash
Tudo isso nos diz que é hora de deixar o Bash em favor de outra coisa, então nos últimos meses comecei a estudar o Go como uma alternativa viável. Após ponderar as probabilidades, os profissionais da implementação da CLI no Go podem ser resumidos da seguinte forma:
- linguagem compilada estaticamente tipada para detectar erros durante o desenvolvimento
- incrivelmente rápido
- não é mais viciado em solo instável
- cria binários compilados nativamente para todas as arquiteturas, eliminando efeitos colaterais inesperados relacionados à plataforma
- suporte mais fácil para testes de aceitação através do Godog (versão do Cucumber escrita em Go)
- permite repensar algum comportamento da implementação atual do SDKMAN (mais sobre isso posteriormente)
- Melhora a colaboração e a contribuição da comunidade
- simples e vamos fazer esse maldito trabalho (Get Shit Done)
Entendendo tudo isso, decidi construir a
primeira versão funcional da nova
interface SDKMAN CLI . Após concluir este trabalho, a nova versão se tornará a versão padrão do SDKMAN. Obviamente, isso também nos permitirá reconsiderar como está funcionando atualmente. Seis anos depois, aprendemos que ele funciona e não funciona, e podemos lembrar esse conhecimento em nossa nova e brilhante versão.
Aqui, incentivamos nossa comunidade a participar e se tornar parte da comunicação. Queremos saber quais recursos você gostaria de ver (ou não gostaria). Para fazer isso, abrimos uma nova sala em
Gitter . Convidamos você a participar e participar, fornecendo feedback sobre a nova CLI. Ainda usamos o Cucumber para descrever o comportamento em uma linguagem compreensível da mesma maneira que na versão Bash, e solicitamos a todos que participem da implementação de cada função. Como antes, queremos que
essas funções constituam documentação ao vivo.
Por isso chamei esse post assim. Gostamos de desenvolver a versão original do SDKMAN, mas percebemos que havia problemas. Agora temos a oportunidade de torná-lo mais confiável e melhorá-lo para todos. Ficaremos felizes por qualquer ajuda no caminho para a implementação da nova CLI!
De um tradutor: SDKMAN é um dos meus gerenciadores de pacotes favoritos, ele inicia a instalação da JVM, Gradle e Kotlin em uma nova máquina. É por isso que, recentemente, nós da Plataforma CUBA começamos a publicar nosso utilitário CLI CUBA no SDKMAN. Fiz esta tradução porque estou feliz em ver o desenvolvimento do SDKMAN e estou ansioso por sua nova versão.