Automatizando a compilação de um projeto Qt no Windows no Travis CI

Recentemente, para o QtProtobuf, fiquei intrigado ao configurar um IC autoritário para verificar as solicitações de recebimento e, é claro, para inserir um distintivo da moda no README do projeto. As opções foram GitHub Actions e Travis CI . Honestamente, não me propus a pesquisar, comparar, analisar, queria simplicidade e solução rápida para uma tarefa muito simples. Primeiro, eu descobri o IC para ações do GitHub e configurei a verificação de compilação e teste de unidade por meio do contêiner do docker. Mas, devido à infinidade de limitações, o GitHub Actions era simplesmente inadequado para verificar um projeto no Windows. Eu tive que me voltar para o Travis CI.


KDPV_not_found.png


No momento da redação deste artigo no Travis CI, havia um aviso:


As compilações do Windows estão no estágio de acesso inicial. Acesse o fórum da comunidade Travis CI para obter ajuda ou postar idéias.

Isso causou preocupação, porque, inicialmente, tentei configurar tudo através do contêiner do docker e inseri-lo nas ações do GitHub, mas esse empreendimento falhou devido a restrições no tamanho, tipo de contêineres etc. no github.


Para negócios


Para começar, você precisa autorizar o Travis CI no GitHub, após o qual o aplicativo Travis CI aparecerá nas configurações do seu perfil. Convenientemente, você pode definir repositórios que o Travis CI pode acessar:



O próximo passo é configurar os gatilhos do Travis CI. Esse procedimento já está sendo realizado no painel de administração do próprio Travis CI; no momento da redação, os seguintes gatilhos estavam disponíveis:


  • Empurre o lançamento para qualquer brunch de projeto
  • Executar ao criar solicitações de mesclagem
  • Gatilho temporizado (cron)

Em princípio, um conjunto decente para a construção de CI.


Após selecionar gatilhos para executar as construções, é necessário criar .travis.yml , com uma descrição do procedimento de construção e, dependendo dos gatilhos disponíveis, colocar esse arquivo no repositório. A documentação dispersa e sistemática do próprio Travis CI sobre .travis.yml ficou imediatamente intrigada, mas você pode descobrir se desejar.


A principal tarefa que restou foi preparar o ambiente para a montagem, uma vez que a própria montagem e verificação são os negócios do CMake.


Descrevemos o procedimento de montagem em .travis.yml


Primeiro, você precisa escolher um sistema operacional que seja executado como uma máquina virtual nos servidores Travis CI e uma linguagem de programação.


os: windows language: C++ ... 

A linguagem , pelo que entendi, automatiza algumas etapas se não forem especificadas explicitamente, mas sua ligação é um mistério para mim. Eu pensei que sem ele não haveria MSVC pré-instalado, mas durante os experimentos verificou-se que ele também estava presente em outros idiomas.


O próximo passo é baixar e instalar as dependências necessárias. Para QtProtobuf, são eles:


  • Qt 5.12.3 ou superior
  • cmake-3.1 ou superior
  • Perl de morango 5.28 ou superior
  • GoLang 1.10 ou superior
  • Yasm 1.3 ou superior
  • Visual Studio Compiler 14.16.x

E aqui o Travis CI ajudou muito. Entre os pacotes pré-instalados não estavam apenas o Git e o MSVC, mas também o cmake, wget e chocolatey . No prisnip na presença de chocolate, a instalação adicional de dependências é bastante facilitada. É verdade que continua sendo um mistério para mim o motivo pelo qual o Qt ainda não foi entregue ao chocolate.


Para começar, baixe o instalador completo do Qt no repositório oficial:


 ... before_install: - wget -q https://download.qt.io/official_releases/qt/5.13/5.13.2/qt-opensource-windows-x86-5.13.2.exe ... 

Nota: Ao fazer o download, o wget despeja um grande número de logs com o progresso do download. O Travis CI, como o GitHub, tem um limite no tamanho do log de compilação, portanto, logs desnecessários devem ser evitados. A opção -q aka --quite oculta a saída do log do wget.

Fazemos a instalação das dependências necessárias:


 ... install: - choco install golang - choco install yasm - ./qt-opensource-windows-x86-5.13.2.exe --script ./.ci/qt_installer_windows.qs ... 

Com a instalação do GoLang e Yasm, acho que não deve haver perguntas. Mas o lançamento do instalador do Qt, prestarei mais atenção.


QtInstallerFramework suporta a automação do processo de instalação escrevendo scripts .


Scripts prontos para instalar uma versão específica do Qt são bastante simples para o google, darei um link para o meu já existente e prestarei atenção à escolha dos componentes para instalação:


 ... Controller.prototype.ComponentSelectionPageCallback = function() { var widget = gui.currentPageWidget(); widget.deselectAll(); widget.selectComponent("qt.qt5.5132.win32_msvc2017"); gui.clickButton(buttons.NextButton); } ... 

Aqui, widget.deselectAll(); todos os componentes da caixa de seleção chamando widget.deselectAll(); e inclua o " qt.qt5.5132.win32_msvc2017 " necessário para a construção. Existem dois aspectos importantes ao escrever este procedimento:


  • O selectComponent funciona como um componente gráfico e, portanto, dependências e subcomponentes são selecionados pela mesma lógica como se os tivéssemos selecionado na interface gráfica. É por isso que não há necessidade de se preocupar com a resolução de dependências.
  • Os nomes dos componentes podem ser visualizados no modo de instalação "verbal". Para fazer isso, eu executei o widget.selectAll(); em uma das iterações widget.selectAll(); e iniciou a instalação com o - ./qt-opensource-windows-x86-5.13.2.exe --verbose --script ./.ci/qt_installer_windows.qs . Nos logs, você pode encontrar facilmente todos os componentes necessários e moderar sua instalação usando widget.selectComponent / widget.deselectComponent.

E o último ponto importante que abordarei neste tutorial é o ambiente de construção. Devido ao fato de a instalação das dependências e a montagem ocorrerem no mesmo shell, após a configuração de Go e Yasm em nosso shell, não há PATH registrado antes dos arquivos executáveis. Portanto, você deve registrar manualmente PATH, GOROOT antes da prostração:


 script: ... - setx path "%path%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - set GOROOT="c:\Go" - set PATH="%PATH%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - cmake -DCMAKE_PREFIX_PATH="C:\Qt\5.13.2\msvc2017;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" .. ... 

Também quero chamar a atenção para o fato de que, em CMAKE_PREFIX_PATH, por analogia, você precisa especificar o caminho para Go e Yasm para que a função find_program funcione corretamente.


Talvez mais tarde descreverei a criação de um contêiner de encaixe para construir com o Qt a bordo.


Todos os scripts podem ser encontrados aqui.

Source: https://habr.com/ru/post/pt485034/


All Articles