乐趣区

关于github-actions:如何制作-GitHub-个人主页

人们在网上首先发现你的中央是哪里?兴许你的社交媒体是人们搜寻你时首先发现的货色,亦兴许是你为本人创立的投资组合网站。然而,如果你应用 GitHub 来分享你的代码并参加开源我的项目,那么你的 GitHub 个人主页可能是人们为了理解你而去的第一个中央。

你心愿你的 GitHub 个人主页说些什么?你心愿如何以扼要易读的形式向访客表白对你的重要性以及你是谁?无论他们是将来的雇主还是开源我的项目的潜在合作伙伴,你都必须领有一个引人注目的个人主页。

应用 GitHub Actions,你能够把一个动态的 markdown 文档变成一个动静的、放弃对你最新信息更新的良好体验。那么如何做到这一点呢?

我将向你展现一个例子,通知你如何在不费吹灰之力的状况下迅速做到这一点。在这个例子中,你将学习如何抓取一个网站并应用这些数据来动静更新你的 GitHub 个人主页。咱们将在 Ruby 中展现这个例子,但你也能够用 JavaScript、TypeScript、Python 或其余语言来做。

GitHub 个人主页如何运作

你的 GitHub 个人主页能够通过在网页浏览器中拜访 github.com/[你的用户名] 找到。那么该页面的内容来自哪里?

它存在于你账户中一个非凡的仓库中,名称为你的账户用户名。如果你还没有这个仓库,当你拜访 github.com/[你的用户名] 时,你不会看到任何非凡的内容,所以第一步是确保你曾经创立了这个仓库,如果你还没有,就去创立它。

摸索仓库中的文件

仓库中惟一须要的文件是 README.md 文件,它是你的个人主页页面的起源。

./
├── README.md

持续在这个文件中增加一些内容并保留,刷新你的用户名主页,你会看到这些内容反映在那里。

为动静内容增加正确的文件夹

在咱们创立代码以使咱们的个人主页动态化之前,让咱们先增加文件夹构造。

在顶层增加一个名为 .github 的新文件夹,在 .github 外部增加两个新的子文件夹:scripts/workflows/

你的文件构造当初应该是这样的:

./
├── .github/
│   ├── scripts/
│   └── workflows/
└── README.md

制作一个动静个人主页

对于这个例子,咱们须要做三件事:

  • README 中定义一个搁置动静内容的中央
  • scripts/ 中增加一个脚本,用来实现爬取工作
  • workflows/ 中为 GitHub Actions 增加一个工作流,按计划运行该脚本

当初让咱们逐渐实现。

更新 README

咱们须要在 README 中减少一个局部,能够用正则来抓取脚本进行批改。它能够是你的具体应用状况所须要的任何内容。在这个例子中,咱们将在 README 中增加一个最近博客文章的局部。

在代码编辑器中关上 README.md 文件,增加以下内容:

### Recent blog posts

当初咱们有了一个供脚本查找的区域。

创立脚本

咱们正在构建的示例脚本是用 Ruby 编写的,应用 GitHub gem octokit与你的仓库进行交互,应用nokogiri gem 爬取网站,并应用httparty gem 进行 HTTP 申请。

在上面这个例子中,要爬取的元素曾经被确定了。在你本人的用例中,你须要明确你想爬取的网站上的元素的门路,毫无疑问它将不同于上面显示的在 posts 变量中定义的,以及每个 post 的每个 titlelink

上面是示例代码,将其放在 scripts/ 文件夹中:

require 'httparty'
require 'nokogiri'
require 'octokit'

# Scrape blog posts from the website
url = "<https://www.bengreenberg.dev/blog/>"
response = HTTParty.get(url)
parsed_page = Nokogiri::HTML(response.body)
posts = parsed_page.css('.flex.flex-col.rounded-lg.shadow-lg.overflow-hidden')

# Generate the updated blog posts list (top 5)
posts_list = ["\n### Recent Blog Posts\n\n"]
posts.first(5).each do |post|
  title = post.css('p.text-xl.font-semibold.text-gray-900').text.strip
  link = "<https://www.bengreenberg.dev#{post.at_css('a')[:href]}>"
  posts_list << "* [#{title}](#{link})"
end

# Update the README.md file
client = Octokit::Client.new(access_token: ENV['GITHUB_TOKEN'])
repo = ENV['GITHUB_REPOSITORY']
readme = client.readme(repo)
readme_content = Base64.decode64(readme[:content]).force_encoding('UTF-8')

# Replace the existing blog posts section
posts_regex = /### Recent Blog Posts\n\n[\s\S]*?(?=<\/td>)/m
updated_content = readme_content.sub(posts_regex, "#{posts_list.join("\n")}\n")

client.update_contents(repo, 'README.md', 'Update recent blog posts', readme[:sha], updated_content)

正如你所看到的,首先向网站收回一个 HTTP 申请,而后收集有博客文章的局部,并将数据调配给一个 posts 变量。而后,脚本在 posts 变量中遍历博客文章,并收集其中的前 5 个。你可能想依据本人的须要扭转这个数字。每循环一次博文,就有一篇博文被增加到 post_list 的数组中,其中有该博文的题目和 URL。

最初,README 文件被更新,首先应用octokit gem 找到它,而后在 README 中找到要更新的中央,并应用一些正则:posts_regex = /### Recent Blog Posts\n\n[\s\S]*?(?=<\/td>)/m

这个脚本将实现工作,但实际上没有任何货色在调用这个脚本。它是如何被运行的呢?这就轮到 GitHub Actions 出场了!

创立 Action 工作流

当初咱们曾经有了脚本,咱们须要一种办法来按计划主动运行它。GitHub Actions 提供了一种弱小的形式来自动化各种工作,包含运行脚本。在这种状况下,咱们将创立一个 GitHub Actions 工作流,每周在周日午夜运行一次该脚本。

工作流文件应该放在 .github/workflows/ 目录下,能够命名为 update_blog_posts.yml 之类的。以下是工作流文件的内容:

name: Update Recent Blog Posts

on:
  schedule:
    - cron: '0 0 * * 0' # Run once a week at 00:00 (midnight) on Sunday
  workflow_dispatch:

jobs:
  update_posts:
    runs-on: ubuntu-latest

    steps:
    - name: Check out repository
      uses: actions/checkout@v2

    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: 3.1

    - name: Install dependencies
      run: gem install httparty nokogiri octokit

    - name: Scrape posts and update README
      run: ruby ./.github/scripts/update_posts.rb
      env:
        GITHUB_TOKEN: $
        GITHUB_REPOSITORY: $

这个工作流是依据 cron 语法定义的时间表触发的,该时间表指定它应该在每个星期天的 00:00(午夜)运行。此外,还能够应用 workflow_dispatch 事件来手动触发该工作流。

update_posts工作由几个步骤组成:

  • 应用 actions/checkout@v2操作来签出仓库。
  • 应用 ruby/setup-ruby@v1 操作来设置 Ruby,指定的 Ruby 版本为 3.1。
  • 应用 gem install 命令装置所需的 Ruby 依赖(httpartynokogirioctokit)。
  • 运行位于 .github/scripts/ 目录下的脚本 update_posts.rbGITHUB_TOKENGITHUB_REPOSITORY 环境变量被提供给脚本,使其可能与仓库进行交互。

有了这个工作流程,你的脚本就会每周主动运行,抓取博客文章并更新 README 文件。GitHub Actions 负责所有的调度和执行工作,使整个过程无缝且高效。

将所有的货色放在一起

现在,你的网络形象往往是人们与你分割的第一个接触点 – 无论他们是潜在的雇主、合作者,还是开源我的项目的贡献者。尤其是你的 GitHub 个人主页,是一个展现你的技能、我的项目和趣味的贵重平台。那么,如何确保你的 GitHub 个人主页是最新的、相干的,并能真正反映出你是谁?

通过利用 GitHub Actions 的力量,咱们展现了如何将你的 GitHub 配置文件从一个动态的 Markdown 文档转变为一个动静的、一直变动对于你是谁的例子。通过本指南提供的例子,你曾经学会了如何从网站上抓取数据,并利用它来动静更新你的 GitHub 个人主页。尽管咱们的例子是用 Ruby 实现的,但同样的准则也能够用 JavaScript、TypeScript、Python 或你抉择的任何其余语言来利用。

回顾一下,咱们实现了创立一个 Ruby 脚本的过程,该脚本能够从网站上抓取博客文章,提取相干信息,并更新你的 README.md 文件中的 ” 最近博客文章 ” 局部。而后,咱们应用 GitHub Actions 设置了一个工作流,定期运行该脚本,确保你的个人主页中放弃最新的内容。

但咱们的旅程并没有就此结束。本指南中分享的技术和办法能够作为进一步摸索和发明的根底。无论是从其余起源拉取数据,与 API 集成,还是尝试不同的内容格局,都有有限的可能性。

因而,口头起来让你的 GitHub 个人主页成为你本人的一个充满活力的扩大。让它讲述你的故事,突出你的成就,并邀请你与别人单干。

以上就是本文的全部内容,如果对你有所启发,欢送点赞、珍藏、转发~

退出移动版