Como utilizar o GitHub Actions para manter seu projeto Python RPA atualizado
Tags: rpa, githubactions, braziliandevs, botcity
Published: 2023-06-12 18:35:28

> en-us: [link](https://dev.to/botcitydev/how-to-use-github-actions-to-keep-your-python-rpa-project-updated-gia)

É possível que você já tenha ouvido falar sobre o GitHub Actions. E caso ainda não tenha tido a oportunidade de conhecer essa funcionalidade, aproveite e explore a documentação sobre ela neste [link](https://docs.github.com/pt/actions).

E para aproveitar a praticidade de realizar diversas ações em projetos a partir desta funcionalidade, nós criamos uma função do GitHub Actions para automatizar a atualização dos bots, chamada BotCity Actions, e você pode encontrá-la disponível neste [repositório](https://github.com/botcity-dev/botcity-action-bots).

## Por que utilizar o BotCity Actions?

Sempre que podemos automatizar um processo para facilitar o nosso dia-a-dia, faz sentido aprendermos como fazê-lo e entendermos se faz sentido em nosso contexto e necessidade. Então, caso você tenha um processo contínuo de desenvolvimento dos seus bots, por que não facilitar o seu dia-a-dia e automatizar não apenas os processos de negócio e produto, mas também o deploy e atualização de suas releases?

## Como funciona o BotCity Actions?

A nossa função realiza updates, deploys e releases de forma automática para o nosso orquestrador, BotCity Maestro, sem a necessidade de implementações manuais. Inclusive, caso você ainda não tenha familiaridade com a API do BotCity Maestro, para melhor aproveitamento, fique à vontade para consultar nossa documentação neste [link](https://documentation.botcity.dev/pt/maestro/).

## Aplicando a função BotCity Actions em seu projeto

Acompanhe o passo-a-passo abaixo. No exemplo, estamos considerando projetos construídos com a linguagem Python. Contudo, fique à vontade para utilizar outras linguagens e, caso tenha interesse, temos exemplos em nossa [documentação](https://documentation.botcity.dev/pt/how-to/github-action-bot/) para configuração de projetos em Java, JavaScript e TypeScript.

### [0] Configuração do projeto

Como primeiro passo, você precisa adicionar uma estrutura de pastas em seu projeto. Primeiramente crie a pasta com o exato nome `.github` na raiz do seu projeto. Dentro dessa pasta, crie outra com o exato nome `workflows`.

Essa especificação vem diretamente do GitHub e é dessa forma que será interpretado onde estão as funções que precisam ser executadas. Para maiores esclarecimentos, lembre-se de consultar a [documentação](https://docs.github.com/pt/actions/quickstart).

### [1] Criação do primeiro workflow

Neste ponto, estamos considerando que você já tenha bots desenvolvidos. Mas se quiser uma ajuda, dá uma olhada nesse link da nossa [documentação](https://documentation.botcity.dev/pt/tutorials/python-automations/web/). Temos um tutorial bem interessante sobre como desenvolver um bot com os nossos frameworks Open Source.

Ainda assim, ressaltamos que você pode usar bots construídos com outras tecnologias em nosso orquestrador, por exemplo, Java, JavaScript, Selenium, scripts bash, entre muitos outros.

Um dos eventos que podemos considerar em nossa action seria o `push` na branch `main`. Isso significa que toda vez que ocorrer uma alteração na branch principal, você quer que um novo deploy seja feito no BotCity Maestro para atualizar o bot. Funciona dessa forma caso você esteja considerando algumas regras e boas práticas do Git Flow, em que a branch `main` é a branch de produção.

Neste passo, dentro da pasta `workflows`, vamos criar o arquivo `update_bot.yml`. E você deverá adicionar o código abaixo para considerar justamente as alterações explicadas acima do evento `push` na branch `main`:

```
name: Update the latest version bot on BotCity Maestro.

on:
    push:
      branches:
        - main
```

### [2] Gerando o bot pela função BotCity Actions

Para saber o que precisa ser adicionado na função, é necessário também entender o é necessário para o deploy do seu bot.

Por exemplo, considerando que você desenvolveu sua automação com o nosso framework Open Source, precisamos atender o seguinte pré-requisito: gerar um arquivo zipado com o código e as dependências do bot, que pode ser criado a partir da execução do script `./build.sh` ou `./build.bat`, dependendo do sistema operacional. Esse script fica localizado na raiz do projeto criado a partir do nosso template do framework [desktop](https://documentation.botcity.dev/pt/frameworks/desktop/) ou [web](https://documentation.botcity.dev/pt/frameworks/web/).

Então, precisamos adicionar em nossa função as seguintes ações:

- Executar em um ambiente (que no caso escolhemos Ubuntu, pela facilidade e rapidez, contudo você pode analisar o seu caso em específico e entender se há dependências importantes a serem consideradas e, se necessário, executar em um ambiente Windows ou MacOS, por exemplo);
- Dar a permissão para o arquivo `build.sh` ser executado;
- Rodar o comando `./build.sh`.

Com essas novas ações, nosso arquivo `update_bot.yml` ficará assim:

```
name: Update the latest version bot on BotCity Maestro.

on:
    push:
      branches:
        - main
jobs:
  update-latest:
    name: Update the latest version bot on BotCity Maestro.
    #  Running the latest version of Ubuntu.
    runs-on: ubuntu-latest
    steps:
      # Checking out the project.
      - uses: actions/checkout@v3
      # Implemented executable permission to `.sh`
      - name: Get permission to build.
        run: chmod +x build.sh
      # Execute to build.
      - name: Execute to build.
        run: ./build.sh
```

### [3] Utilizando a função

A sequência de passos que adicionamos no arquivo `update_bot.yml` até o momento foi para definir um ambiente para buildar e também para criarmos o arquivo compactado que faremos o envio no deploy no Maestro. Contudo, agora precisamos configurar os passos para a função ser utilizada.

Adicionamos, neste caso, alguns dados importantes para o deploy acontecer com sucesso. São eles: botId, technology (onde você deve informar a linguagem utilizada no seu bot e, em nosso exemplo, consideramos Python) e botPath (local na raiz do projeto onde o arquivo compactado estará para ser feito upload na plataforma do nosso orquestrador.

```
name: Update the latest version bot on BotCity Maestro.

on:
  push:
    branches:
      - main
jobs:
  update-latest:
    name: Update the latest version bot on BotCity Maestro.
    #  Running the latest version of Ubuntu.
    runs-on: ubuntu-latest
    steps:
      # Checking out the project.
      - uses: actions/checkout@v3
      # Implemented executable permission to `.sh`
      - name: Get permission to build.
        run: chmod +x build.sh
      # Execute to build.
      - name: Execute to build.
        run: ./build.sh
      - name: Using a Botcity action.
        # Using the v1.0.0 version of botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          # Use the update function.
          update: true
          # Bot Id in Maestro.
          botId: 'example'
          # Technology utilized in bot
          technology: 'python'
          # Path from the root of the project where the generated .zip/.jar will be.
          botPath: './bot.zip'
        env:
          # These secrets must be configured in your repository.
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
```

Perceba que adicionamos também algumas variáveis de ambiente como LOGIN, SERVER e KEY. Essas são secrets importantes para você conseguir utilizar o BotCity Maestro. Então lembre-se de configurar essas chaves de maneira segura no seu repositório.

### Onde posso encontrar mais dicas?

Você pode acessar o guia que criamos em nossa [documentação](https://documentation.botcity.dev/pt/how-to/github-action-bot/) com muito mais dicas e orientações sobre como utilizar o BotCity Actions, inclusive para criar releases e muito mais.

Além disso, não esqueça de entrar em nossa [comunidade](communitybotcitydev.slack.com) para compartilhar seus projetos Open Source e tirar suas dúvidas com outras pessoas. Vai ser muito interessante aprender com a sua experiência.