Percebi que grande parte dos projetos que usa versões x.y.z não segue de verdade o versionamento semântico.

Dá trabalho sim, mas é possível fazer múltiplos releases e em ordem cronológicas completamente distintas, e o mais importante: manter a compatibilidade reversa.

🧵
Versão inicial 0.1.0

Na branch main:

- Nova feature super legal
- Outra feature nova que ainda precisa de mais testes
- Bugfix que não influencia na experiência de uso
- Bugfix que altera parametros de função
- Security patch
- Disable a magic function

+ backlog enorme.

🧵
Não precisa ficar esperando o backlog estar todo resolvido ou a branch main estar toda estável para fazer um release 0.2.0.

Para isso existe o z-stream e o cherry picking

🧵
Cria uma branch 0.1.1, esse release vai incrementar apenas o .z, ou seja, patch, não pode incluir nem novas features, nem quebras de compatibilidade, precisamos pegar da main só aquilo que se encaixa.

git cherry-pick <commits-selecionados> ...

🧵
Digamos que para a 0.1.1 pegamos apenas:

- Bugfix que não influencia na experiência de uso
- Security patch

Fazemos o release da 0.1.1 QUE NÃO INCLUI TUDO QUE ESTÁ PRONTO NA MAIN.

🧵
Agora sim a vida continua, nosso próximo milestone é agora o 0.2.0 onde provavelmente estarão inclusas:

- Nova feature super legal
- Outra feature nova que já foi testada
- Bugfix que altera parametros de função mas não quebra compatibilidade

🧵
Ok mas e o item:

- Disable a magic function

A semver diz:

MAJOR (X) quando a mudança quebra compatibilidade.
MINOR (Y) quando nova funcionalidade é adicionada ou mudança que não quebra compatibilidade.
PATCH bug fix, security fix, que não quebra compatibilidade.

🧵
Remover uma funcionalidade do projeto é uma mudança que gera quebra de compatibilidade, pode ter gente usando essa funcionalidade que vai ter prejuízos se lançarmos isso em um release minor, portanto aqui é onde fazermos o bump do X.

Aqui fazemos o release da versão 1.0.0

🧵
Isso é muito importante! pois dependentes podem especificar as dependências usando:

~=3.1: 3.1 ou maior, mas não 4.0
== 3.1.*: que comece com 3.1. .
~=3.1.0, != 3.1.3: 3.1.0 ou maior, exceto 3.1.3 nunca 3.2.0 ou maior.
>=3,<=4 entre 3 e 4

python.org/dev/peps/pep-0…

🧵
Quando usar versionamento semântico? sempre que alguém dependa de usar ou integrar com o seu projeto.

A compatibilidade reversa é uma das coisas mais importantes, pois mesmo que a sua lib tenha um bug, pode ter gente usando esse bug como feature ;/

🧵
E você pode tornar seu projeto menos estável na tentativa de resolver um bug que tenha side effects (regressions) em outras funcionalidades.

Para organizar isso pode usar a ajuda de testes de mutação e de integração.

🧵
semver é uma forma efetiva de comunicação com todos que dependem da sua lib, sejam humanos ou sejam sistemas de build e processamento de dependências.

🧵
Toda vez que vc lança um projeto usando x.y.z (semver.org) implicito está um "contrato" dizendo: Pode confiar, integrar, testar, usar que se eu quebrar a compatibilidade eu aviso antes na hora que eu mudar o X.

🙏
Um detalhe: existem projetos que por questões de marketing, decidem usar a semver parcial, onde
X = versão marketeira do produto
Y = Major que quebra compatibilidade
Z = novas feats, bug fix que não quebra compatibilidade.

Isso deve estar bem especificado na doc do projeto.
Nota: isso se aplica a frameworks, bibliotecas, plugins etc.. software que será integrado a outro software.

Para aplicativos de ponta (bem notado pelo @haggen) o mais comum é versionamento cronológico: chronver.org (ano.mes.dia.release)

Ex: Ubuntu 20.04
Esse é um baita assunto, interminável, mas outro ponto importante é que tem projetos que preferem ficar na varsão `0.y.z` e nunca irem para `1.y.z` pois o `0` dá a noção de beta, de "os riscos são por sua conta".
Curiosidade:

O criador da especificação SemVer é o mesmo que criou o TOML, o Jekyll, Chronic e é co-fundador do github.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Bruno Rocha ❁

Bruno Rocha ❁ Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @rochacbruno

20 Jul
Testes funcionais são fundamentais!

Mas programar testes é uma grande perda de tempo!

Mesmo as linguagens mais simples como Python ainda tem um nível de complexidade que não condiz com o objetivo de um teste.

Testes deveriam ser declarados e não programados.
A area de automação de testes é onde low-code e no-code deveria reinar e eu mesmo tendo trabalhado durante quase 5 anos como Engenheiro de Qualidade de Software não entendo o motivo de se investir tanto em contratar Devs e Ops para escrever testes.
O profissional de Qualidade deveria focar em entender as funcionalidades do produto, comunicar-se com os envolvidos, sugerir melhorias e não em aprender linguagens, ferramentas e ambientes para rodar os testes.
Read 9 tweets
20 Jul
Aqui em Portugal não se diz picolé, mas sim Gelado no Pau ou Gelado de Pauzinho.

Chega na padaria e diz: "Gostava de um gelado no pau se faz favor"

magg.sapo.pt/vida-saudavel/…
Já sentiu a incrível sensação de te sentires cheio de pica?

by @CocaCola_PT

cocacola.pt/aquarius/pt/se…
Aqui temos anualmente a feira dos grelos

cm-mira.pt/node/156
Read 5 tweets
19 Jul
Você usa `print` do #python para depurar durante o desenvolvimento?

Mesmo com vários tipos de debuggers disponíveis e o novo `breakpoint` do Python 3.7, na maioria das vezes um simples `print` é mais fácil para inspecionar uma variavél no Python.

Dá para deixar isso melhor 🧵
Primeiro um exemplo do uso do print nativo do python para debugar objetos complexos.

Como dá para perceber o output não é tão amigável de inspecionar. print do terminal executando um código python e com o outpu
Dá para deixar isso melhor usando `debug` no lugar de `print`

Porém Python não tem essa função debug nativa, você vai precisar **hackear** seu Python local para adicionar a função debug. O mesmo código anterior, porém print foi substituido por d
Read 9 tweets
10 Feb
Como depurar programas #Python 🐍 através da linha de comando. 🐛 #debugging #debug

#DicaDePythonCodeShow

🧵
A maneira mais fácil de interagir com um script Python é usando o argumento `-i` (interactive) no python ou no ipython.

$ ipython -i script.py

O script é executado e então o terminal interativo abre permitindo a inspeção do estado das variáveis.
Para uma depuração mais estruturada o melhor é o pdb que é o debugger built-in do Python docs.python.org/3/library/pdb.…

Executar e parar na linha 5
$ python -m pdb -c "until 5" script.py

O script é executado e então ao chegar na linha 5 o interpretador pausa.
Read 20 tweets
14 Jul 20
Thread
Dicas de Streaming de #LiveCoding na #Twitch.

1. Não leve esse tweet tão a sério, são apenas dicas, você pode simplesmente ignorar se não gostar.
2. O chat é o mais importante, mesmo que seu conteúdo seja fantástico ele não será a mesma coisa sem a interação com o chat
3. Mas não exagere, é preciso achar um balanço entre conteúdo técnico e entretenimento. (timers ajudam)
Read 22 tweets
24 Nov 19
Vocês estão sabendo do pyjamas.live?

Primeira conferência de #Python em Português 100% online que vai acontecer durante 24h começando em 13 de Dezembro as 16h.

Segue o fio.
e dá um RT para ajudar o evento :)
O incentivo para esta conferência é possibilitar que pessoas de todos os lugares possam participar, não só como expectadores mas também como palestrantes.
Teremos duas maneiras de participação, uma é para quem ia cria conteúdo e já tem seu canal no YouTube ou Twitch para fazer uma live sobre #python em qualquer horário durante as 24h do evento.
Read 14 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(