Como fazer o deploy de um aplicativo Qt com Github Actions

Guia prático para automatizar o deploy de aplicativos Qt usando GitHub Actions.

Como fazer o deploy de um aplicativo Qt com Github Actions

Hoje veremos como utilizar o GitHub Actions com Nuitka para automatizar o processo de deploy de um aplicativo que utiliza a linguagem de programação Python e o binding PySide6.

O que é o Github Actions?

O GitHub Actions é um recurso do GitHub que permite automatizar tarefas dentro do seu fluxo de trabalho de desenvolvimento de software.

Com o GitHub Actions, você pode criar fluxos de trabalho customizados para automatizar a compilação, teste, implantação e outras etapas do ciclo de vida do desenvolvimento de software.

Os fluxos de trabalho do GitHub Actions são definidos em arquivos YAML (***.yaml**) armazenados no diretório **.github/workflows** do seu repositório.

Esses arquivos descrevem as ações a serem executadas, incluindo as condições sob as quais devem ser acionadas e quaisquer parâmetros necessários.

As ações do GitHub Actions são unidades de trabalho individuais que podem ser combinadas para criar fluxos de trabalho complexos.

Existem ações disponíveis na GitHub Marketplace que podem ser usadas para uma variedade de tarefas, como compilar código, executar testes, implantar aplicativos e notificar equipes sobre o progresso do desenvolvimento.

Nuitka

Nuitka é um compilador Python de código aberto que traduz código Python para C++ ou código C otimizado, permitindo que ele seja executado mais rapidamente do que se fosse interpretado diretamente pelo interpretador Python padrão.

Ele funciona analisando o código Python e o traduzindo para código C ou C++, que é então compilado em código de máquina nativo. Isso pode resultar em melhorias significativas de desempenho em determinadas situações, especialmente em código Python que é intensivo em CPU.

Criando o arquivo de deploy

No repositório crie um arquivo deploy.yaml em .github/workflows.

⚠️ O arquivo pode ter o nome que você desejar.

Dentro do arquivo será utilizado o seguinte código:

# Fluxo de deploy para um aplicativo Qt (PySide) com Nuitka.
name: Deploying PySide6 with Nuitka ⚙️.
on:
  # Arquivo será executado sempre que houver um push para a branch main.
  push:
    branches: ['main']
  # Esta opção permite executar a ação de forma manual na interface web do Github.
  workflow_dispatch:

# Definindo as permissões do GITHUB_TOKEN.
permissions:
  contents: read
  pages: write
  id-token: write

# Permite que a implantação seja simultânea.
concurrency:
  group: 'deploy'
  cancel-in-progress: true

jobs:
  build:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: '${{ matrix.os }}'
    steps:
      - name: Check out repository 💾.
        uses: actions/checkout@v4

      - name: Install Python 🐍.
        uses: actions/setup-python@v5
        with:
            python-version: '3.11'
            architecture: 'x64'
            cache: 'pip'
            cache-dependency-path: |
              **/requirements*.txt

      - name: Install requirements 🔨.
        working-directory: .
        run: python -m pip install --upgrade pip && pip install -r requirements.txt

      - name: Install and configure Nuitka 🛠️.
        uses: Nuitka/Nuitka-Action@main
        with:
          nuitka-version: main
          script-name: caminho/até/o/script.py
          enable-plugins: pyside6
          quiet: true
          standalone: true
          disable-console: true
          macos-create-app-bundle: true
          output-file: nome-do-aplicativo
          linux-icon: caminho/até/ícone.ico
          windows-icon-from-ico: caminho/até/ícone.ico
          macos-app-icon: caminho/até/ícone.icns
          macos-app-name: nome-do-aplicativo

      - name: Upload artifact (onefile) 🚀.
        uses: actions/upload-artifact@v4
        with:
          name: '${{ runner.os }}-build'
          path: |
            build/app.dist
            build/*.exe
            build/*.bin
            build/*.app/**/*

⚠️ Lembre-se de modificar as variáveis conforme as suas necessidades.

O arquivo de deploy considera sempre a raiz do projeto como diretório padrão, neste caso adicione o caminho relativo até os ícones.

Essa Github Action será executada sempre que houver um push para a branch main do repositório.

Também é possível executar essa Github Action através da interface web do Github, para isso basta clicar na aba Actions.

Ao final do processo é possível verifica os executáveis que foram gerados para cada um dos sistema operacionais e fazer o download dos mesmos.

Conclusão

O GitHub Actions é uma ferramenta poderosa para automatizar e personalizar seu fluxo de trabalho de desenvolvimento, ajudando a melhorar a produtividade e a consistência do seu projeto.