How to Update a GitHub Profile README Automatically
Юджин Ян рассказывает, как настроить автоматическое обновление GitHub-профиля (README) свежими публикациями со своего сайта. Идею он позаимствовал у Simon Willison, который показал, как сделать это с помощью GitHub Actions. Процесс состоит из трёх шагов: получение последних записей из Atom-фида сайта с помощью библиотеки feedparser на Python, обновление секции «Recent Writing» в README через поиск и замену текста между маркерами-комментариями, и настройка GitHub Actions для запуска при каждом push и ежедневно в полночь по cron. Пара часов работы избавляет от ручного обновления README при каждом новом посте.
Как автоматически обновлять README GitHub-профиля
[ engineering python til ] · 3 мин чтения
Сегодня я узнал, как настроить README моего GitHub-профиля так, чтобы он автоматически обновлялся свежими публикациями с этого сайта. Теперь он запускается каждый день в полночь.
Ничего сложного. Simon Willison рассказал, как сделать это с помощью GitHub Actions, и это показалось забавным проектом на пару часов (так оно и было). Я подумал, что час-два работы сэкономят мне часы будущих ручных обновлений.
Сначала забираем данные из фида вашего сайта
Этот сайт настроен с Atom-фидом, который могут агрегировать RSS-ридеры (например, Feedly). Получить последние публикации с помощью Python-библиотеки feedparser просто. В зависимости от того, как отформатированы ваши даты, вам, возможно, придётся подправить регулярное выражение.
import feedparser def fetch_writing(): entries = feedparser.parse('https://eugeneyan.com/feed')['entries'][:5] return [ { 'title': entry['title'], 'url': entry['link'].split('#')[0], 'published': re.findall(r'(.*?)\s00:00', entry['published'])[0] } for entry in entries ]
Затем обновляем секции README
В моём README есть секция «📝 Recent Writing», которую я обновляю результатами из fetch_writing(). Это делается путём поиска блоков-комментариев для «writing» (например, ) и замены всего, что находится между ними.
import re def replace_chunk(content, marker, chunk, inline=False): r = re.compile( r'.*'.format(marker, marker), re.DOTALL, ) if not inline: chunk = '\n{}\n'.format(chunk) chunk = '{}'.format(marker, chunk, marker) return r.sub(chunk, content)
На данный момент запуск обоих методов обновит файл README.
Наконец, настраиваем GitHub Actions
Нам нужно настроить GitHub Actions, чтобы этот воркфлоу запускался автоматически. Сейчас он выполняется при каждом push и ежедневно в полночь. Есть также возможность сборки в один клик (что довольно круто).
name: Build README on: push: workflow_dispatch: schedule: - cron: '0 0 * * *' jobs: build: runs-on: ubuntu-latest steps: - name: Check out repo uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.8 architecture: x64 - name: Install dependencies run: python -m pip install -r requirements.txt - name: Update README run: |- python build_readme.py cat README.md - name: Commit and push if changed run: |- git diff git config --global user.email "[email protected]" git config --global user.name "README-bot" git add -A git commit -m "Updated content" || exit 0 git push
Расслабьтесь и позвольте автоматизации делать своё дело
Теперь, когда всё настроено, больше не нужно вручную обновлять README с каждым новым постом. Вот как это выглядит сейчас, без этого текущего поста.
Мой профиль сейчас; если он останется таким же, когда вы зайдёте на него, значит, мои усилия в этом посте провалились.
К тому моменту, когда вы зайдёте на мой GitHub-профиль, секция «📝 Recent Writing» будет обновлена и будет включать этот пост, или (если вы посетите её больше чем через месяц) будет обновлена новым набором недавних постов.
Если этот материал оказался полезным, пожалуйста, ссылайтесь на него так:
Yan, Ziyou. (Jul 2020). How to Update a GitHub Profile README Automatically. eugeneyan.com. https://eugeneyan.com/writing/how-to-update-github-profile-readme-automatically/.
или
@article{yan2020github, title = {How to Update a GitHub Profile README Automatically}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2020}, month = {Jul}, url = {https://eugeneyan.com/writing/how-to-update-github-profile-readme-automatically/} }
Присоединяйтесь к 11 800+ читателям, получающим обновления о машинном обучении, RecSys, LLM и инженерии.