I, [2020-12-05T10:59:38.848743 #1] INFO -- : > cd /var/www/discourse && git remote set-branches origin v2.6.0
I, [2020-12-05T10:59:38.852600 #1] INFO -- :
I, [2020-12-05T10:59:38.852639 #1] INFO -- : > cd /var/www/discourse && git fetch --depth 1 origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T10:59:41.405163 #1] INFO -- :
I, [2020-12-05T10:59:41.405307 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
error: pathspec 'v2.6.0' did not match any file(s) known to git
I, [2020-12-05T10:59:41.411796 #1] INFO -- :
Em vez da saída esperada ao usar o commit imediatamente anterior a esse.
I, [2020-12-05T11:22:14.717910 #1] INFO -- : > cd /var/www/discourse && git fetch origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T11:22:15.672616 #1] INFO -- :
I, [2020-12-05T11:22:15.672683 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
Note: checking out 'v2.6.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at d6121249d3 Version bump to v2.6.0
Não chamaria isso de bug propriamente dito, mas queremos oferecer algum tipo de instrução sobre como instalar versões antigas do Discourse, mesmo que isso envolva um template mais complexo ou algo assim.
Concordo que a profundidade deve ser configurável, talvez por meio de uma variável de ambiente, com o padrão sendo “shallow”; mas configurável com uma simples variável de ambiente.
Acho que o problema aqui é que as tags não são conhecidas localmente ao fazer o checkout, como no seguinte problema (não relacionado ao Discourse):
Executar git fetch --all deve resolver o problema, mas não sei o quanto isso poderia aumentar o tamanho da imagem (a menos que outra instrução limpe as referências não utilizadas mais tarde).
Dito isso, acho que git clone --depth 1 https://github.com/discourse/discourse.git --branch=$version resolveria, porque a opção branch permite tanto branches quanto tags, mas não testei e não sei se há algum motivo para o clone usar (atualmente) a branch master.
Ao executar git clone --depth 1 https://github.com/discourse/discourse.git --branch=v2.6.0, o tamanho total da pasta é de 212MB, e a pasta .git dentro dela tem 46MB, então acho que está tudo bem.
O problema é que, no momento da construção da imagem, não sei qual branch você desejará no futuro.
A configuração atual foi alterada para reduzir o tamanho da imagem, o que diminuiu o tamanho comprimido em 250 MB (25%), uma grande vitória. Funciona bem ao usar branches normais, como stable e beta ou tests-passed.
Como solução alternativa, se você quiser mudar para uma tag, pode aplicar isso ao seu arquivo app.yml:
Outra solução alternativa é adicionar uma chave base_image no nível superior do app.yml com o valor de uma imagem base mais antiga. Como nem sequer tentamos manter a compatibilidade das novas imagens para executar versões mais antigas do Discourse, isso pode ser necessário se você estiver voltando há bastante tempo.
Você tem razão, naquele momento não sabemos a versão. Parece que a imagem base usa a versão atual + a branch tests-passed, embora a branch tenha o commit do momento em que a imagem foi construída.
A maneira como está sendo feita agora não resultaria em rebuilds mais lentos, mesmo quando a branch tests-passed é usada?
Quando `git pull` é chamado, **todo o repositório é baixado**, e pode levar vários minutos, pois apenas um clone superficial foi feito antes. Você pode tentar executar apenas as instruções acima localmente e ver.
Não estou dizendo que ter todo o repositório na imagem base seja melhor, mas o código em `web.template.yml` será executado em cada rebuild, mesmo que apenas um plugin tenha sido adicionado ou uma configuração alterada em `app.yml`. O que normalmente faço em meus projetos (não Discourse) é criar uma nova imagem para cada nova versão, mas isso pode não ser viável para você (considerando como você faz atualmente).
Você não percebeu algum aumento no tempo de rebuild? (ou talvez isso não seja tão grande comparado ao tempo total de rebuild na maioria dos casos)
Atualização
Testei as etapas acima novamente e foram rápidas. Acho que executei outra instrução na primeira tentativa que alterou a árvore do git e acabei tentando baixar tudo ao executar git pull.
Sim, vejo que ele faz um fetch e depois um checkout na branch correta após o pull, então acho que o git pull não é necessário (ainda não testei, porém).
Para as tags, parece que ainda preciso buscá-las separadamente, mas isso parece viável. Além disso, como as branches são mais comumente usadas, as tags devem ser mais um caso de borda.
Estou recebendo o mesmo erro. Eu estava usando a versão 2.5.1.
Com isso, estou recebendo o seguinte erro:
I, [2020-12-31T11:50:24.701475 #1] INFO -- : > cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+
chown: não é possível dereferenciar '/var/www/discourse/public/plugins/styleguide': Arquivo ou diretório não encontrado
Obrigado por esclarecer: essa é exatamente a parte que me faltava. Para aqueles que estão confusos da mesma forma que eu, obter uma tag de release do Discourse pode ser feito da seguinte maneira:
Garantir que o parâmetro versionnão esteja definido no app.yml, por exemplo: