Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!24.11.2022
Почав проєкт для автоматичного виставлення зірок на GitHub
😺⭐💎 Через відсутність світла робота не дуже йде. Почав як вправу маленький проєкт, який давно крутився в голові: GitHub Autostar
В чому суть. Всі ми любимо оцінювати проєкти на GitHub за кількістю зірок. Але ж хто ті зірки ставить? Я сам нечасто про це згадую. Тож виходить дивна асиметрична оцінка.
Щоб виправити цю ситуацію, я хочу зробити скрипт, який знаходить в моїх проєктах всі прямі залежності, що є на GitHub, та автоматично проставляє їм зірочки. Це можуть бути Ruby-геми, пакети NPM, модулі Go тощо. Навіть закладки чи нотатки. Так без зайвої ручної праці можна спрямити несправедливість оцінок.
Тепер трохи о реалізації: поки зробив прототип для Ruby. Спочатку ідея була така, щоб застосувати можливості Bundler для інтроспекції залежностей. Головна проблема з цим те, що щоб воно працювало, треба відтворити правильну версію Ruby для кожного проєкту, а також встановити всі залежності. (Також бракує документації по внутрішньому функціоналу Bundler.)
Тому схилився до статичного аналізу. Перша ідея: розбирати Gemfile
. Але ж гемфайл — це фактично скрипт на Ruby, та хоч в гемфайлах зазвичай дотримуються визначеного формату, очікувати можна на все. Втім, знайти регулярками рядки вигляду gem "foo"
досить просто.
Але потім нарешті роздивився структуру Gemfile.lock
і знайшов там розділ, де перелічені прямі залежності проєкту (а саме, DEPENDENCIES
.) Цей формат файлів створений для машинної обробки та — хоч він і не стандартний — прочитати його набагато легше, ніж Gemfile
. Як результат, в робочих проєктах першим способом знайшлось 146 гемів, а другим - 150.
Після цього залишається звернутись до відкритого API RubyGems - https://rubygems.org/api/v1/gems/#{gem}.json
та дізнатись домашню адресу кожного гему. А потім, перевірити, чи спрямована вона на GitHub.
Так отримав 128 репозиторіїв, що, порівняно зі 114 зірочками, що я поставив вручну за довгі роки користування Гітхабом, вже досить багато.
Наступні кроки — реалізація для інших мов, та пошук простого рішення для масової роздачі зірок.