Skip to content

CI integrated, sketch dependencies files added #3

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

Merged
merged 1 commit into from
Jul 22, 2021
Merged

CI integrated, sketch dependencies files added #3

merged 1 commit into from
Jul 22, 2021

Conversation

tarampampam
Copy link
Contributor

@tarampampam tarampampam commented Jun 20, 2021

Саша (@AlexGyver, @GyverLibs), привет ещё раз!

Мне (как разработчику) крайне интересно автоматизировать и упорядочивать процессы, в частности - связанные с разработкой. И так как только-только начинаю входить в hardware-тему - наткрулся на этот репоизиторий и стал разбираться в исходниках (чужой труд, да с комментариями - любопытнейшее чтиво, должен признаться!). Но вот при попытках скомпилировать часть примеров натунклся на проблему с зависимостями для скетчей - какие-то либы просто отсутствовали у меня локально, а чтоб понять какие именно - пришлось сперва тратить значительное время. Часть даже после установки нужных библиотек продолжали крашиться на этапе компиляции, из-за обратно-несовместимых изменениях в самих либах (GyverOLED).

Так как проблема имеет место быть - должно быть и средство её устранения. И решать её стал с помощью GitHub Actions - бесплатный CI (Continuous Integration, штука которая запускает какие-то действия когда ты что-то, например - коммитишь в репозиторий). Если словами попроще, то решил выполнять компиляцию каждого скетча в репозитории в момент, когда кто-то что-то в него коммитит. Если будет закоммиченно что-то, что компилироваться не будет - в PR будет алерт об этом, и на главной страничке репозитория (если "плохие" изменения окажутся в master-ветке) бейджик станет красным (вида "tests | failed").

В процессе реализвации столнулся с двумя проблемами:

  • Библиотека GyverOLED не ставилась (эту проблему мы совместно решили в Library error LS007 fixed, simple CI integrated GyverLibs/GyverOLED#3)
  • Нужно было как-то и где-то описывать все зависимости для скетчей (т.е. те библиотеки, которые нужны чтоб скетч скомпилировался)

По второй проблеме был задан вопрос в репозитории arduino/arduino-cli (arduino/arduino-cli#1321), но что мне ответили "сейчас такой возможности нет, но мы о ней думаем, следите за новостями". Но мне-то нужно это уже сейчас.. Взяв в руки golang я написал приложение arduino-deps-installer (работает как под linux, так и windows), при помощи которого мы как раз-таки получаем эту прекрасную возможность :) Т.е. создаем в директории со скетчем файл в одном из поддеживаемых форматов, и запускаем arduino-deps-installer install --work-dir /path/to/sketch-dir после чего все указанные в файле зависимости устанавливаются - сложно придумать что-то проще :)

Для этого репозитория я выбрал формат описания зависимостей в виде простого текстового файла requirements.txt, в котором в виде:

# https://github.com/arduino-libraries/servo
Servo@1.1.7

// https://github.com/arduino-libraries/WiFiNINA
https://github.com/arduino-libraries/WiFiNINA.git

; Or any local *.zip file:
./libs/lib1.zip

Описываем где у нас хранятся необходимые для скетча библиотеки. Мне кажется - это очень просто и довольно интуитивно понятно.

После устранения всех проблем и написал CI сценарий, который:

  • Проверяет контент репозитория линтером arduino-lint
  • Ищет все возможные скетчи (при добавлении нового скетча в репозиторий он тоже будет проверяться, естественно)
  • Запускает отдельным "процессом" установку зависимосей для каждого и компиляцию скетча

После принятия этого PR мы можем быть уверены, что код каждого примера будет:

  • Собираться у разработчика
  • Разработчик сможет в удобном и понятном виде понять какие библиотеки необходимо установить для его сборки
  • Код скетчей компилируется и не содержит явных ошибок

p.s. Надеюсь, ты найдень этот PR полезным. Если будут какие-то замечания или предложения - озвучивай их, внесу необходимые правки. У меня есть ещё несколько идей по тому, как можно лучше организовать твою работу с github и потенциальном проекте с Arduino IoT - но это лучше будет обсудить где-нибудь в телеграме (просто скажи если тебе это интересно - отправлю ссылку на себя тебе на почту). Извини за много букв, но я посчитал должным рассказать поподробнее.

@GyverLibs
Copy link

Привет, в библиотеке и примерах не используется никаких либ, которые не идут в комплекте с Arduino IDE. А так как это ардуино-библиотека, я думаю какие то инструменты для неё излишни и будут только пугать тех кто полезет поковыряться в файлы.

@tarampampam
Copy link
Contributor Author

@GyverLibs Взяв первый-попавшийся скетч:

#include <microLiquidCrystal_I2C.h>
// 0x27 или 0x3f
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "thermistorMinim.h";
thermistor therm(THERM, 10000, 3950);
#include "EncButton.h"

Чтоб его использовать, нужно установить microLiquidCrystal_I2C, EncButton, и ещё microWire (она нужна для microLiquidCrystal_I2C). И было бы очень здорово, если бы информация об этом была где-то зафиксирована да ещё и автоматически тестировалась на правильность.

Никаких дополнительных инструментов для тех, кто хочет "поковыряться" ставить не нужно. В файле requirements.txt описывается и для людей (чтоб можно было посмотреть, что нужно доустановить для сборки скетча), и для программ (CI в нашем случае, чтоб тестировать "а точно ли все зависимости указаны для скетча?").

Для пользователей не изменится совсем ничего - всё остается как было, только появляется единое место "где смотреть что надо ещё установить" :)

@GyverLibs
Copy link

А, ты уже досюда добрался, я думал что это всё ещё олед) папки туториалс выходят к конкретным урокам на канале, надо чтобы люди руками умели работать, а не чтобы программа сама запускалась и работала)) на мой взгляд

@tarampampam
Copy link
Contributor Author

tarampampam commented Jun 20, 2021

@GyverLibs Не не, тут же смысл другой) Короче, сейчас просто с каждым скетчем идет файл, в котором написано какие либы нужны для него. А для тебя, как автора скетчей просто возможность видеть - есть ли ошибки в скетчах, и только. Не надо их руками проверять - это делает автоматика)

Блин, изначально так много написал, наверное тебя это смутило) просто постарался предугадать возможные вопросы, и сразу на них ответить)

@tarampampam
Copy link
Contributor Author

tarampampam commented Jun 21, 2021

@GyverLibs Что скажешь?) Вот, кстати, пример того, как выглядит результат работы CI

@tarampampam
Copy link
Contributor Author

Ping @GyverLibs @AlexGyver

@AlexGyver
Copy link
Owner

честно вообще нет времени разбираться, могу просто запуллить изменения если новые файлы реально не будут мешать людям изучать примеры

@tarampampam
Copy link
Contributor Author

tarampampam commented Jun 24, 2021

@GyverLibs @AlexGyver Давай запулим, если что - коммит сможешь ревернуть без проблем

Только делай squash commits обязательно (выбери в выпадающем меню кнопки мерджа этих изменений)

@tarampampam
Copy link
Contributor Author

ping @GyverLibs @AlexGyver

@AlexGyver AlexGyver merged commit 08f7012 into AlexGyver:master Jul 22, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants