Fala-se muito em versionamento de código fonte. Isso está bom e tem muitas ferramentas que fazem isso.
O YeAPF inclui certas ferramentas dentre as quais está o ydistbuilder.
O propósito desta ferramenta é produzir versões de distribuição. Ou seja, a versão que vai finalmente para o cliente. Em outras palavras, o programador pode ter cuidado do seu código usando git e após ter a versão funcionalmente aceita, produz uma versão de distribuição. Isso faz com que algumas coisas como o controle do cache por parte do usuário seja mais suave.
Primeiro veremos como produzir uma versão e depois como isso nos facilita a vida na gestão do cache e outras bobaginhas mais.
1) Produzindo sua versão.
A primeira coisa que precisará será um arquivo contendo os nomes de todos seus arquivos e pastas que serão inclusos na distribuição. Este arquivo se chama ydistbuilder.files e fica na pasta principal do seu aplicativo.
Um exemplo válido desse arquivo pode ser este aqui:
css/* e_index.html f_logon.html fonts/* img/* includes.lst js/* clientes/* security.php
Repare que não colocamos nenhum dos scripts do YeAPF já que isso – neste caso – queremos controlar na hora da entrega. Com isso reduzimos um pouco o tamanho da nossa distribuição.
Feito isso, criamos um outro arquivo contendo a informação do copyright (oy copyleft, tanto faz) chamado ydistbuilder.copyright
Por exemplo, no meu caso ele ficaria assim:
"Copyright (C) ".date('Y')." Esteban D.Dortta"
Agora criaremos um número de versão inicial com o arquivo version.inf
1.0.0-0
Finalmente criaremos nossa primeira versão do aplicativo chamando o comando ydistbuilder. Cada vez que este comando for chamado, uma nova versão será criada. Porém, a maior parte do tempo, você quer na realidade apenas atualizar a versão. Para isso você utiliza o parâmetro –update assim:
ydistbuilder --update
Cada vez que produzir uma atualização de sua versão utilizando –update o número de sequência é incrementado mas não o numero de versão. O numero de sequência é aquele que está depois do traço.
Para incrementar o numero de subversão é apenas utilizar o ydistbuilder sem parâmetros. E se quiser mudar o numero completo da versão, modifique o version.inf
2) Distribuindo sua versão
Uma vez que o ydistbuilder terminar seu trabalho, ele produzirá um arquivo .zip na pasta downloads e o código pronto, ficará na pasta .distribution/nro-versao
Ai depende do que você estiver construindo, se é uma app para ser distribuída como download, você pode utilizar o arquivo gerado na pasta downloads.
Já se quer subir seu app para o seu servidor utilizando o FileZilla, por exemplo, você pode apenas arrastar e soltar os arquivos substituindo os já existentes. Como os arquivos de configuração não se colocam na distribuição, a operação é bastante segura permitindo que o mesmo código vá para vários servidores por exemplo.
Uma terceira forma de atualizar seus apps na nuvem consiste em usar o lftp como neste exemplo: http://sina.salek.ws/content/how-mirrorsync-remote-ftp-folder-local-folder com vários pontos. Mas isso são apenas exemplos de aplicação.
3) Usando as macro-etiquetas do ydistbuilder.
O ydistbuilder gera algumas macro etiquetas que você pode utilizar no seu código fonte. Por exemplo, digamos que queremos colocar na nota de copyright no código fonte do HTML do nosso aplicativo. Isso poderia facilmente ser feito assim:
<!-------- Meu aplicativo web %FILE_NAME% %COPYRIGHT_NOTE% ----->
Em outras palavras, as macro-etiquetas geradas pelo ydistbuilder começam e acabam com o símbolo ‘%‘ e podem ser usadas em qualquer lugar do seu código fonte. O ydistbuilder substituirá essas macro-etiquetas pelos valores gerados na hora do versionamento.
Se nosso aplicativo se chama clientes então a sequencia de macro-etiquetas é a seguinte:
APP_NAME FILE_NAME COPYRIGHT_NOTE LAST_FILE_MODIFICATION clientes_VERSION_LABEL clientes_VERSION_DATE clientes_VERSION clientes_VERSION_SEQUENCE
4) Melhorando o uso do cache
Uma verdadeira dor de cabeça é a atualização do cache no micro do cliente. Em especial quando há mudanças no javascript ou no css. Para nós a melhor forma de resolver isso tem sido um misto de modificações no .htacces e uso de URL versionadas.
Por URL versionadas, entendemos aquela em que é possível indicar qual a versão do .js ou .css que queremos carregar. Utilizando uma URL versionada podemos ter uma melhor chance de que nosso cliente utilize a versão mais moderna do nosso aplicativo.
Isso no código fonte ficaria assim:
<script src="js/clientes.js?%clientes_VERSION_SEQUENCE%"></script>
Que uma vez versionado, assumiria automaticamente a forma da versão que estamos distribuindo. Por exemplo, mais ou menos assim:
<script src="js/clientes.js?1.0.3-45"></script>