Ir para o conteúdo

Usando GitHub Actions para atualizar o seu Bot

Com o GitHub Actions é possível fazer updates, deploys e releases automáticos para o Maestro, sem a necessidade de processos manuais.

Para mais informações acesse o nosso repositório.

Para ler mais sobre GitHub Actions visite a documentação oficial.

Configurando o projeto

Primeiro é necessário criar uma pasta chamada .github no seu projeto e dentro criar outra pasta chamada workflows

A estrutura de pasta deverá ficar dessa forma:

.
└── .github
  └── workflows
...

Para ler mais sobre criações de workflows no GitHub Actions, visite a documentação.

Crie o seu primeiro workflow

O primeiro workflow que vamos criar é simples, quando um push acontecer na branch main, acionaremos a action para atualizar o Bot no Maestro.

Importante

Neste caso, deve haver um Bot previamente criado no Maestro. Para ler mais sobre os Bots, visite a página de documentação.

Capturando o evento "push" na main

Crie um arquivo chamado update_bot.yml dentro da pasta workflows.

No início deste arquivo, adicione as seguintes linhas:

name: Atualizar a versão mais recente do Bot no Maestro.

on:
    push:
      branches:
        - main

Gerando o Bot

Nessa etapa precisamos de apenas um pré-requisito:

  • Um arquivo .sh para gerar o Bot.

Com esse arquivo no projeto podemos seguir com o exemplo.

jobs:
    update-latest:
      name: Atualize a versão mais recente do Bot no BotCity Maestro.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh
jobs:
    update-latest:
      name: Atualize a versão mais recente do Bot no BotCity Maestro.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o Java.
        - uses: actions/setup-java@v3
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh
jobs:
    update-latest:
      name: Atualize a versão mais recente do Bot no BotCity Maestro.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh
jobs:
    update-latest:
      name: Atualize a versão mais recente do Bot no BotCity Maestro.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh

Importante

O seu Bot pode precisar de mais etapas a serem executadas, vai depender de cada projeto.

Utilizando a action

Após executar o que é necessário para o gerar o Bot, é hora de usar a action para atualizar no Maestro.

        - name: Utilizando a action Botcity.
        # Usando a versão v1.0.0 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          # Use a função de atualização.
          update: true
          # ID do bot no Maestro.
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'python'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório.
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
        - name: Utilizando a action Botcity.
        # Usando a versão v1.0.0 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          # Use a função de atualização.
          update: true
          # ID do bot no Maestro.
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'java'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
          botPath: './dist/bot-jar-with-dependencies.jar'
        env:
          # As secrets devem ser configurados em seu repositório.
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
        - name: Utilizando a action Botcity.
        # Usando a versão v1.0.0 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          # Use a função de atualização.
          update: true
          # ID do bot no Maestro.
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'javascript'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório.
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
        - name: Utilizando a action Botcity.
        # Usando a versão v1.0.0 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          # Use a função de atualização.
          update: true
          # ID do bot no Maestro.
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'typescript'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório.
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}

Aviso

Sempre configure as suas credenciais nos secrets do repositório por motivos de segurança. Não é recomendável passar essas informações diretamente. Para ler mais sobre os secrets, acesse a documentação.

Execute um push na main e o resultado será este: update

Arquivo completo

name: Atualizar a versão mais recente do Bot no Maestro.

on:
    push:
      branches:
        - main
jobs:
    update-latest:
      name: Atualize a versão mais recente do Bot no BotCity Maestro.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh
        - name: Utilizando a action Botcity.
         # Usando a versão v1.0.0 do botcity-action-bots
         uses: botcity-dev/botcity-action-bots@v1.0.0
         with:
           # Use a função de atualização.
           update: true
           # ID do bot no Maestro.
           botId: 'exemplo'
           # Tecnologia utilizada no bot
           technology: 'python'
           # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
           botPath: './bot.zip'
         env:
           # As secrets devem ser configurados em seu repositório.
           LOGIN: ${{ secrets.LOGIN }}
           SERVER: ${{ secrets.SERVER }}
           KEY: ${{ secrets.KEY }}
name: Atualizar a versão mais recente do Bot no Maestro.

on:
    push:
      branches:
        - main
jobs:
    update-latest:
      name: Atualize a versão mais recente do Bot no BotCity Maestro.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o Java.
        - uses: actions/setup-java@v3
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh
        - name: Utilizando a action Botcity.
         # Usando a versão v1.0.0 do botcity-action-bots
         uses: botcity-dev/botcity-action-bots@v1.0.0
         with:
           # Use a função de atualização.
           update: true
           # ID do bot no Maestro.
           botId: 'exemplo'
           # Tecnologia utilizada no bot
           technology: 'java'
           # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
           botPath: './dist/bot-jar-with-dependencies.jar'
         env:
           # As secrets devem ser configurados em seu repositório.
           LOGIN: ${{ secrets.LOGIN }}
           SERVER: ${{ secrets.SERVER }}
           KEY: ${{ secrets.KEY }}
name: Atualizar a versão mais recente do Bot no Maestro.

on:
    push:
      branches:
        - main
jobs:
    update-latest:
      name: Atualize a versão mais recente do Bot no BotCity Maestro.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh
        - name: Utilizando a action Botcity.
         # Usando a versão v1.0.0 do botcity-action-bots
         uses: botcity-dev/botcity-action-bots@v1.0.0
         with:
           # Use a função de atualização.
           update: true
           # ID do bot no Maestro.
           botId: 'exemplo'
           # Tecnologia utilizada no bot
           technology: 'javascript'
           # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
           botPath: './bot.zip'
         env:
           # As secrets devem ser configurados em seu repositório.
           LOGIN: ${{ secrets.LOGIN }}
           SERVER: ${{ secrets.SERVER }}
           KEY: ${{ secrets.KEY }}
name: Atualizar a versão mais recente do Bot no Maestro.

on:
    push:
      branches:
        - main
jobs:
    update-latest:
      name: Atualize a versão mais recente no BotCity.
      # Executando na versão mais recente do Ubuntu.
      runs-on: ubuntu-latest
      jobs:
        # Instalando o projeto.
        - uses: actions/checkout@v3
        # Tornando `build.sh` executável
        - name: Obtenha permissão para utilizar o build.
          run: chmod +x build.sh
        # Executando o build.
        - name: Executando o build.
          run: ./build.sh
        - name: Utilizando a action Botcity.
         # Usando a versão v1.0.0 do botcity-action-bots
         uses: botcity-dev/botcity-action-bots@v1.0.0
         with:
           # Use a função de atualização.
           update: true
           # ID do bot no Maestro.
           botId: 'exemplo'
           # Tecnologia utilizada no bot
           technology: 'typescript'
           # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
           botPath: './bot.zip'
         env:
           # As secrets devem ser configurados em seu repositório.
           LOGIN: ${{ secrets.LOGIN }}
           SERVER: ${{ secrets.SERVER }}
           KEY: ${{ secrets.KEY }}

Criando um workflow avançado para executar deploy e release do seu Bot.

Aqui as coisas começam a ficar mais interessantes, pode haver mil maneiras de fazer, mas o que será demonstrado será um exemplo.

Vamos deixar claro o que queremos com esse workflow:

  • Terá que ser feito uma Release no GitHub.
  • Com a Release deverá haver a criação de uma tag
  • O Deploy/Release será executado no Maestro.

Para saber como criar uma release.

Capturando evento de publicação da release

name: Deploy and Release in from GitHub release

on:
  # Capturando o evento de publicação da release.
  release:
    types: [ published ]

Gerando o bot

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh
jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-java@v3
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh
jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh
jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh

Utilizando a action

Importante

Nesse caso, é importante destacar o uso da variável disponibilizada pelo GitHub para tornar dinâmica a versão da release.

      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@latest
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'python'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@latest
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'java'
          botPath: './dist/bot-jar-with-dependencies.jar'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@latest
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'javascript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@latest
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'typescript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}

Execute a release e o resultado será este: update

Arquivo completo

name: Deploy and Release in from GitHub release

on:
  # Capturing the release publishing event.
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh
      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'python'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Deploy and Release in from github release

on:
  # Capturing the release publishing event.
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-java@v3
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh
      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'java'
          botPath: './dist/bot-jar-with-dependencies.jar'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Deploy and Release in from GitHub release

on:
  # Capturing the release publishing event.
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh
      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'javascript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Deploy and Release in from github release

on:
  # Capturing the release publishing event.
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Get permission to build.
        run: chmod +x build.sh
      - name: Execute to build.
        run: ./build.sh
      - name: Botcity action
        uses: botcity-dev/botcity-action-bots@v1.0.0
        with:
          deploy: true
          release: true
          # Use tag_name to release.
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'typescript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}