Como encontrar programaticamente o número da versão mais recente do Homebrew?

2

Como encontrar programaticamente o número da versão mais recente do Homebrew?

Eu posso encontrar isso no meu computador local com brew --versiono processo string para obter um número de versão. Qual é uma boa maneira de obtê-lo para o Homebrew lançado? Gostaria de verificar programaticamente que o homebrew está atualizado para muitos computadores.

qazwsx
fonte
Parece haver três perguntas? a) Como obter a versão homebrew no site em que foi lançada. b) como comparar a versão em um computador com a versão c) como gerenciar muitos computadores (seja através do MDM, Apple Remote Desktop, script e ssh, etc ...) aprender neste tópico? Pedir os três separadamente seria o ideal para que pudéssemos vincular as perguntas existentes ou fornecer uma boa resposta para uma parte sem precisar considerar os três obstáculos que você pode enfrentar.
bmike
2
Acho que realmente não perguntei sobre seus itens bec. Isso é apenas para fornecer um pano de fundo para a pergunta que estou fazendo, para que alguns leitores / atendentes em potencial não se perguntem por que estou tentando fazer isso.
precisa saber é o seguinte
11
@bmike Eu sinto que é suficientemente claro o que está sendo perguntado aqui. A verbosidade simplesmente serve para fornecer um pouco mais de contexto. É assim que interpreto a questão, em termos de construção: “Como faço para X? Eu já sei como Y. Mas qual é uma boa maneira de fazer o X? (Preciso de X e Y para atingir o objetivo A.) ​​”- A única coisa que realmente está sendo solicitada é X: como obter o número da versão da versão mais recente do Homebrew.
Synoli 27/03

Respostas:

2

Eu pessoalmente não uso o Homebrew, portanto, se existe uma maneira de usar o brewpróprio número de versão mais recente disponível on-line, eu não sei.

Observe que desde 27 de junho de 2012 e a versão 0.9.1 do Homebrew, a numeração de versões mantém um padrão típico definido major.minor.maintenance, usando apenas números separados por um ponto. Portanto, é relativamente fácil testar se os valores retornados das substituições de comando usadas para atribuí-los às variáveis da versão instalada e da versão mais recente seguem esse padrão.

Depois de testadas, as seqüências de versão são convertidas em números, para que uma comparação binária possa determinar se a versão instalada é menor que a versão mais recente, quando é possível executar a ação apropriada.

O bash script a seguir é um exemplo de como alguém pode codificá- lo:

#!/bin/bash

    # Get installed version number and latest release version number.

localHomebrewVersion="$(brew --version | awk '/Homebrew [0-9]/{print $2}')"
latestHomebrewRelease="$(curl -sL https://api.github.com/repos/Homebrew/brew/releases/latest | ruby -rjson -e 'puts JSON.parse($<.read)["name"]')"

    # Test that both variables hold the expected pattern.

if [[ $localHomebrewVersion =~ [0-9]\.[0-9]{1,2}\.[0-9]{1,2} ]] && [[ $latestHomebrewRelease =~ [0-9]\.[0-9]{1,2}\.[0-9]{1,2} ]]; then

        # Function used to convert string version numbers to numeric values for testing.

    function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d", $1,$2,$3,$4); }'; }

        # Test to see if the installed version number is less than the latest release version.

    if [[ $(version $localHomebrewVersion) -lt $(version $latestHomebrewRelease) ]]; then
        brew update
    else
        echo "Homebrew is already up-to-date."
    fi

else
        # One or both of the command substitutions '$(...)' returned unexpected output for the version variables.

    echo "At least one of the version variables contains an unexpected value."
fi

Nota: Incorporei o comando sugerido no comentário de Synoli para atribuir à latestHomebrewRelease variável , pois certamente parece ser um método mais estável para obter as informações da versão mais recente.

Atualização: Adicionado um teste para ver as variáveis ​​de versão conterem o padrão esperado antes de testar se a versão instalada é menor que a versão mais recente.

user3439894
fonte
11
GitHub tem uma API para isso, então um método mais estável seria:curl -sL https://api.github.com/repos/Homebrew/brew/releases/latest | ruby -rjson -e 'puts JSON.parse($<.read)["name"]'
Synoli
11
@ Synoli, Obrigado pela sugestão de comando no seu comentário. Eu o incorporei na minha resposta.
user3439894