Starred
12 октября 2020 года создал репозиторий в Github juev/awesome-stars на основе проекта maguowei/starred . Каждый день в определенное время запускается github actions, выгружает информацию о всех звездах, что проставил в Github, и формирует новый Readme.md файл на основе этой информации.
Полтора года все работало безотказно. И несколько дней назад все сломалось. При обновлении репозитория стала появляться ошибка:
Traceback (most recent call last):
File "/opt/hostedtoolcache/Python/3.7.12/x64/bin/starred", line 8, in <module>
sys.exit(starred())
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/starred/starred.py", line 72, in starred
for s in stars:
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/github3/structs.py", line 122, in __iter__
yield cls(i)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/github3/models.py", line 48, in __init__
self._update_attributes(json)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/github3/repos/repo.py", line 97, in _update_attributes
self.owner = users.ShortUser(repo["owner"], self)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/github3/models.py", line 48, in __init__
self._update_attributes(json)
File "/opt/hostedtoolcache/Python/3.7.12/x64/lib/python3.7/site-packages/github3/users.py", line 311, in _update_attributes
self.avatar_url = user["avatar_url"]
TypeError: 'NoneType' object is not subscriptable
Error: Process completed with exit code 1.
Питон я не люблю, разбираться в кишках starred не стал. Завел тикет , чтобы была информация о проблеме. И затем решил реализовать starred на гошечке.
Потратил немного времени на создание juev/starred . Протестировал и опубликовал уже две версии. Вторая исправляет ошибку, возникающую при обновлении существующего репозитория.
Теперь мой juev/awesome-stars настроен и использует starred реализованный на Golang. Помимо запуска в github action, теперь есть возможность использовать starred почти из любой операционной системы, будь то windows, linux или macos. Для этого достаточно скачать бинарный дистрибутив со страницы релиза и далее задав токен, запускать в командной строке.
Для примера, собираем информацию по отмеченным репозиториям пользователя juev и создаем новый репозиторий test-repo:
$ export GITHUB_TOKEN=yourtoken
$ starred --username juev --repository test-repo --sort
Для того, чтобы проводить регулярное обновление с помощью github actions, создаем репозиторий и добавляем в него файл .github/workflows/main.yml:
name: update awesome-stars
on:
schedule:
- cron: 0 6 * * *
jobs:
awesome-stars:
name: update awesome-stars
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: robinraju/release-downloader@v1.3
with:
repository: "juev/starred"
latest: true
fileName: "*"
- name: unpack starred
run: tar xfz starred_*_Linux_x86_64.tar.gz
- name: update repo
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
run: ./starred --username juev --repository awesome-stars --sort --token ${GITHUB_TOKEN} --message 'update stars'
В приведенном примере обновление настроено на 6 утра и состоит из 4 шагов:
- Обновляем локальный репозиторий
- Проводим загрузку последнего релиза starred
- Распаковываем архив для Linux
- Запускаем starred с параметрами для обновления репозитория с именем awesome-stars с сортировкой по языкам программирования для пользователя
juev.
Постарался вывести всю необходимую информацию для использования starred в ридми его репозитория и во встроенной справке программы.
Теперь и у вас есть альтернатива в виде golang-версии starred.