Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arduino Compile Sketch #67

Merged
merged 8 commits into from
Mar 29, 2021
Merged

Arduino Compile Sketch #67

merged 8 commits into from
Mar 29, 2021

Conversation

SteffanoP
Copy link
Contributor

@SteffanoP SteffanoP commented Mar 26, 2021

Sumário

Esta Pull Request visa implantar o Arduino Compile Sketch como CI, por meio da ferramenta GitHub Action, como em #64.

O Arduino Compile Sketch é uma ferramenta que se baseia nas ferramentas da Arduino-CLI, para compilação e envio, quem sabe futuramente. Com essa Action será possível compilar os códigos de exemplos, para verificar e assegurar que a compilação em determinadas placas está ocorrendo com sucesso, facilitando o processo de testagem, visto que, havia certas dificuldades (#26) em assegurar que push e pull request funcionavam para todas as placas que o Brasilino realiza suporte.

Outras Informações

Checklist

  • Implantar o Arduino Compile Sketch
  • Escolher as placas que serão compiladas
  • Implementar as placas em test-placas
  • Definir quais serão os códigos básicos a serem compilados
    • controleGradual não inserido por estar descontinuado
    • ASCII não inserido por estar descontinuado
  • Estilizar o workflow compile.yml deixar bonito
  • (Opcional) Inserir Badge do Arduino Compile Sketch

Testes

Foram realizados testes em minha fork, disponível em SteffanoP/Brasilino.

Nas Actions deste projeto é possível visualizar diversos testes.

Como também nas Actions de minha fork para ver todos os testes.

Sobre o Franzininho

Como requerido por @ErickSimoes, seria interessante alguma placa compatível com ATtiny85 (do Franzininho). A priori, foi estabelecido a placa Arduino Gemma e também a placa da Digispark-tiny com Programador micronucleus.

Descrição das mudanças

Cria o Action Workflow: compile.yml, com função de compilar os códigos de exemplos em Brasilino/examples. Atua sempre que houver Push e Pull Requests na/para branch master odeio esse nome, prefiro main.

Há apenas um job a ser realizado, que se trata do Arduino Compile / test-placas.

Em test-placas a estratégia adotada é de matrix, que envolve as boards (placas) a serem testadas:

  • arduino-uno
  • arduino-mega
  • arduino-leonardo
  • arduino-gemma
  • ATiny-micronucleus

O ambiente de teste é o ubuntu, devido a compatibilidade do compactador Zip.

Os passos seguem a seguinte ordem:

Checkout

Utilizado para estabelecer e gerenciar o repositório Git

Instalar Compactador Zip

É necessário Compactar a pasta src (fonte da biblioteca), visto que, é uma necessidade do arduino-cli para instalar a biblioteca Brasilino.h.

Setup Arduino CLI

É de suma importância nesta Pull Request, visto que, será a ferramenta que irá realizar a compilação dos sketches para as placas citadas anteriormente

Instalar Plataforma Arduino

Realiza a instalação da Plataforma de placas, ao qual, se refere diretamente ao conjunto de placas da plataforma e seus requisitos (trata-se do compilador, na Arduino IDE chamamos de Programador).

Habilitar instalação não segura

É um requisito do tópico Instalação Brasilino, pois o método para instalar a biblioteca se baseia em pegar o formato .zip da biblioteca local, todavia, essa não é uma instalação segura, pois, conforme a Arduino Team diz, este processo não passa pelo Processo de Gerenciamento de Bibliotecas. MAS, neste caso, não é necessário tal precaução, visto que, você está tratando o código fonte da própria biblioteca; logo, a precaução não é necessária neste caso.

Instalação Brasilino

Realiza a Instalação da Biblioteca local (on push ou on PR), por meio do método arduino-cli lib install --zip-path que obtém a Brasilino.h em formato .zip, visto em Instalar Compactador Zip.

Compile Sketch

Faz o Compile de Sketch, neste caso específico, realiza o Compile apenas do Programa Piscar.ino.

Benefícios

Possibilita realizar uma triagem mais detalhada nas compilações de códigos para diversas plataformas Arduino (ex.: arduinoavr, arduinoOTA, esp32, esp8266 e etc.).

Possíveis desvantagens

A implementação do modo de compilação para os diversos exemplos acontece de maneira contínua para cada job, ou seja, em cada job que é executado é realizado o compile de todos os exemplos, e se um exemplo apresentar um erro não é compilado o restante dos códigos. O ideal seria colocar cada comando arduino-cli compile em matrix; porém devido as limitações do meu conhecimento, não consegui fazer de uma forma que cada compile dos ./exemplos se tornasse independente.

Também há a necessidade de adicionar um script para realizar o compile de forma automática, atualmente é necessário alterar manualmente o destino de compile no ./.github/workflows/compile.yml sempre que for adicionado um exemplo.

Problemas Relacionados

Esta PR facilita o processo de testagem e triagem da PR #26

Resolves #66

Implementa uma nova Action, no qual tem como função compilar os códigos de exemplo da biblioteca Brasilino. Tem como base o compilador do Arduino UNO.
Realiza o compile, por meio do método de _matrix_ para múltiplas placas Arduino. A princípio as placas são:

- Arduino Uno;
- Arduino Mega 2560;
- Arduino Leornardo;
- Arduino Gemma.
@ErickSimoes
Copy link
Collaborator

Ótimo trabalho @SteffanoP!

Quanto aos códigos que vão ser compilados, teria algum problema rodar todos os exemplos automaticamente? (imaginando que no futuro venham a ser desenvolvidos novos exemplos dentro do diretório examples/, seria ótimo se eles fossem automaticamente compilados)

@SteffanoP
Copy link
Contributor Author

Quanto aos códigos que vão ser compilados, teria algum problema rodar todos os exemplos automaticamente? (imaginando que no futuro venham a ser desenvolvidos novos exemplos dentro do diretório examples/, seria ótimo se eles fossem automaticamente compilados)

Interessante seu ponto de vista, não havia pensado nisso. Neste momento, como eu ainda estou aprendendo sobre as Estratégias de trabalho com Actions, não conseguiria fazer algo automático para usar o comando compile e analisar todos os diretórios em examples/.

No meu limite de conhecimento eu teria que inserir de forma manual cada diretório... o que não seria algo bonito e responsivo para novos exemplos. Todavia, está aberto para outros colaboradores (quem sabe @OtacilioN que tem mais experiência com o GitHub) para sugerir soluções nesse empecilho.

@SteffanoP
Copy link
Contributor Author

SteffanoP commented Mar 27, 2021

@ErickSimoes Estava desenvolvendo a compatibilidade para Programador micronucleus, e aparentemente encontrei um problema, não sei dizer se é um problema da Piscar.ino ou se é um problema da Brasilino.h.

Quando compilado dá o seguinte erro:

In function 'void TinyDebugSerial::_ZN15TinyDebugSerial5beginEl.isra.0.constprop.1(long int)',
    inlined from 'void iniciarSerial(int)' at /home/runner/Arduino/libraries/src/Brasilino.cpp:26:20:
/home/runner/.arduino15/packages/digistump/hardware/avr/1.6.7/cores/tiny/TinyDebugSerial.h:704:44: error: call to 'TinyDebugSerialBaudMustBeConstant' declared with attribute error: The baud rate for Serial (TinyDebugSerial) cannot be changed at run-time.  Use 9600, 38400, or 115200.
         TinyDebugSerialBaudMustBeConstant();
                                            ^
Error during build: exit status 1

https://github.com/SteffanoP/Brasilino/pull/3/checks?check_run_id=2206513697

Todo o desenvolvimento desse commit está em SteffanoP/Brasilino#3

Esse problema não acontece com a placa Arduino Gemma.

Porém, houve um hotfix em #28, que se aplica apenas ao Arduino Gemma, para o Franzininho/micronucleus esse hotfix não se aplica e pode estar relacionado ao problema da Serial.

@OtacilioN
Copy link
Owner

Excelente contribuição @SteffanoP.

Só confirmando o Status do Merge Request, atualmente se encontra em draft (raschunho), correto? Fico no aguarda da finalização do que estas planejando para este merge request para que possamos mergear 🎉

@SteffanoP
Copy link
Contributor Author

Só confirmando o Status do Merge Request, atualmente se encontra em draft (raschunho), correto? Fico no aguarda da finalização do que estas planejando para este merge request para que possamos mergear 🎉

@OtacilioN por enquanto estamos definindo algumas coisas (ver Checklist da PR), quando estiver pronto vou abrir para Review, pode ficar tranquilo!

@OtacilioN
Copy link
Owner

Massa @SteffanoP, e mais uma vez parabéns e obrigado por contribuir com a Brasilino!

@SteffanoP

This comment has been minimized.

Desabilita o ato de cancelar outros compiles, caso algum compile da matrix falhe
Habilita o Actions de Compile para os programas em `./exemplos`, com exceção de:

- `./examples/Basicos/ControleGradual` - pois não possuí suporte da `Brasilino.h` para nenhuma placa
  - ver [SteffanoP/Brasilino/actions#694028507](https://github.com/SteffanoP/Brasilino/actions/runs/694009916)
- `./examples/Intermediarios/ASCII` - pois não possuí suporte da `Brasilino.h` para nenhuma placa
  - ver [SteffanoP/Brasilino/actions#694017433](https://github.com/SteffanoP/Brasilino/actions/runs/694017433)
Adiciona o suporte para a placa Franzininho com o Programador/Compilador micronucleus
Por ser um código que exige mais recursos, achei interessante ser deixado como último a ser compilado
@SteffanoP SteffanoP marked this pull request as ready for review March 28, 2021 03:04
@SteffanoP
Copy link
Contributor Author

@OtacilioN e @ErickSimoes verifiquei que dois exemplos não conseguem ser compilados para todas as plataformas suportadas nesse repositório, que é o caso do controleGradual.ino e do ASCII.ino. Logo, pude considerar que foram descontinuadas e não incluí como exemplo para compile. Segue os erros:

controleGradual.ino failed

/home/runner/work/Brasilino/Brasilino/examples/Basicos/controleGradual/controleGradual.ino:32:39: error: macro "escreverAnalogico" requires 2 arguments, but only 1 given
         escreverAnalogico(luminosidade); // Faz a luminosidade do led assumir o valor da variável
                                       ^
/home/runner/work/Brasilino/Brasilino/examples/Basicos/controleGradual/controleGradual.ino:39:39: error: macro "escreverAnalogico" requires 2 arguments, but only 1 given
         escreverAnalogico(luminosidade); // Faz a luminosidade do led assumir o valor da variável
                                       ^
Error during build: exit status 1

Além disso há exemplos que estão descontinuados para Arduino Gemma e micronucleus, ambos com processadores semelhante ao do Franzininho, que estão representados nos testes arduino-gemma e micronucleus-franzininho.

analogicoSerial.ino failed on arduino-gemma

/home/runner/work/Brasilino/Brasilino/examples/Basicos/analogicoSerial/analogicoSerial.ino: In function 'void setup()':
/home/runner/work/Brasilino/Brasilino/examples/Basicos/analogicoSerial/analogicoSerial.ino:23:5: error: 'iniciarSerial' was not declared in this scope
     iniciarSerial();
     ^~~~~~~~~~~~~
/home/runner/work/Brasilino/Brasilino/examples/Basicos/analogicoSerial/analogicoSerial.ino:23:5: note: suggested alternative: 'HardwareSerial'
     iniciarSerial();
     ^~~~~~~~~~~~~
     HardwareSerial
/home/runner/work/Brasilino/Brasilino/examples/Basicos/analogicoSerial/analogicoSerial.ino: In function 'void loop()':
/home/runner/work/Brasilino/Brasilino/examples/Basicos/analogicoSerial/analogicoSerial.ino:31:5: error: 'escreverSerialn' was not declared in this scope
     escreverSerialn(valorDoSensor);
     ^~~~~~~~~~~~~~~
/home/runner/work/Brasilino/Brasilino/examples/Basicos/analogicoSerial/analogicoSerial.ino:31:5: note: suggested alternative: 'escreverDigital'
     escreverSerialn(valorDoSensor);
     ^~~~~~~~~~~~~~~
     escreverDigital
Error during build: exit status 1

Copy link
Owner

@OtacilioN OtacilioN left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Obrigado por contribuir com a Brasilino!

@OtacilioN OtacilioN merged commit 91a3021 into OtacilioN:master Mar 29, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Usar Arduino-cli como Actions para compilar para múltiplas plataformas
4 participants