Construindo e Distribuindo
CLIs com Elixir
Hello!
Amadeu Cavalcante
@amadeucavalcant
Hello!
Weverton Timoteo
@wevtimoteo
O que é um CLI?
(Command Line Interface)
● Ideia de formar um grupo de estudos
replicável na comunidade
● Interesse em fomentar a prática de
programação em par
● Comparar a construção de um CLI em
Elixir com outras linguagens
● Conhecer melhor a linguagem
Como a ideia surgiu?
Programação em Par
● Prática adotada no Extreme
Programming (Kent Beck)
● Ótimo para processos de Onboarding
● Melhora Code Review
● Funciona remotamente?
● Como atribuir o trabalho realizado em
par?
Co-autores de commits?
● Anotações nos commits através de convenções nas mensagens de
commit
Outras convenções
● [Linux Kernel]
○ Acked-by:
○ CC: $PERSON <$MAIL>
○ Reported-by:
○ Tested-by:
● [Mediawiki Guidelines] Bug: $NUMBER
● [git-buildpack] Thanks: msg
● [openstack] DocImpact
OptionParser
● Funções de parsing para argumentos da command line
● Disponível na standard library
● Não segue todas as recomendações de convenções de command line
options do POSIX
OptionParser: Switches and Aliases
Escript (Erlang Script)
● Ferramenta para escrever e executar scripts usando Erlang
● Você pode embedar OTP e dependências dentro do seu escript
● Pode ser interpretado, compilado para byte code, ou para código
nativo
Suporte através do mix
Rebar3
● Basicamente o "Mix" para ambientes Erlang
● Mix utiliza Rebar3 para compilar dependências que usem Erlang
● Com Rebar3 podemos compilar o escript do erlang
Mix Release
● Lançado no Elixir v1.9
● Distillery?
● Gera um release auto-contido para realizar deploy/empacotamento em
alguma instância
● Opções include_erts e strip_beams
Bakeware
● Sem dependências de runtime
● Único binário (e só?)
● Cross-compilation?
● Integra com o mix release
Bakeware: Setup
Bakeware: Assemble
Bakeware: Entrypoint
Zstandard (ztd)
● Comprime o binário
● Sem ztd: 29 Mb
● Com ztd: 11 Mb (no MacOS 9 Mb)
Running binary
Distribuindo o binário
Alternativas?
Próximos passos
● Melhorar documentação (hexdocs)
● Adotar o Bakeware para disponibilizar
binários nos releases
● Identificar source provider (GitHub ou GitLab,
etc) ao executar git pair add
● Impedir duplicações do `Co-authored-by`
nos amends
● Melhorar output com cores e emojis 🤩
○ Incentivado pelo Convetional Commits
Obrigado!
Vamos criar um grupo estudos no
seu meetup group local?
Referências
● Projeto `git-pair`
● Commit Message Conventions
● Elixir: OptionParser
● GNU extensions to the POSIX recommendations for command-line options
● Mix.Tasks.Release
● Rebar3: escriptize
● Erlang: escript
Mais Referências
● makeself - Make self-extractable archives on Unix
● Zstandard, or zstd as short version, is a fast lossless compression
algorithm
● [Question] How to make a "escript" file to a binary executable?
● Elixir 1.9 Release notes - Releases
● Geoff Cant - Escript changes the game
● Bakeware
● Spawnfest

[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir