人们首先在网上哪里发现你?也许人们在搜索您时首先发现的是您的社交媒体形象,或者可能是您为自己创建的作品集网站。但是,如果您使用 GitHub 共享代码并参与开源项目,那么您的 GitHub 个人资料可能是人们了解更多信息的第一个地方。

您希望您的 GitHub 个人资料显示您的哪些信息?您想如何以简洁易懂的方式向访问者表达对您来说重要的事情以及您是谁?无论他们是开源项目的潜在雇主还是潜在合作伙伴,您都必须拥有脱颖而出的个人资料。

使用 GitHub Actions,您可以将静态 Markdown 文档转变为动态体验,随时了解有关您的最新信息。你是怎样做的?

我将向您展示如何快速且无需太多努力地完成此操作的示例。在此示例中,您将学习如何抓取网站并使用该数据动态更新您的 GitHub 配置文件。我们将使用 Ruby 展示此示例,但您也可以使用 JavaScriptTypeScriptPython 或其他语言来完成此操作。

您的 GitHub 个人资料如何运作

github.com/[your-username]您可以通过网络浏览器找到您的 GitHub 个人资料,例如这是我的。该视图的内容来自哪里?

它位于您帐户中的一个特殊存储库中,名称为您的帐户用户名。如果您还没有此存储库,则在访问时将看不到任何特殊内容github.com/[your-username],因此第一步是确保您已创建该存储库,如果没有,请继续创建它。

浏览配置文件存储库中的文件

存储库中唯一需要的文件是README.md您的个人资料页面的源文件。

./
├── README.md

继续在该文件中添加一些内容,保存它,然后刷新您的用户名主页,您将看到该内容反映在那里。

为动态内容添加正确的文件夹

在创建使配置文件动态化的代码之前,让我们添加文件夹结构。

在顶层添加一个名为 的新文件夹.github,并在其中.github添加两个新的子文件夹:scripts/workflows/

您的文件结构现在应如下所示:

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

制作动态档案

对于这个例子,我们需要做三件事:

  • README定义动态内容所在的位置
  • 在里面添加一个脚本scripts/来完成抓取工作
  • 在内部添加 GitHub Actions 的工作流程,workflows/该工作流程将按计划运行脚本

现在让我们执行每个步骤。

更新自述文件

我们需要在自述文件中添加一个部分,该部分可以通过脚本使用正则表达式进行抓取并进行修改。它可以是您特定用例所需的任何内容。对于此示例,我们将在自述文件中添加最近博客文章的部分。

README.md在代码编辑器中打开该文件并添加以下内容:

### Recent blog posts

现在我们有一个可供脚本查找的区域。

创建脚本

我们正在构建的示例脚本是用 Ruby 编写的,并使用 GitHub gemoctokit与您的存储库进行交互,使用nokogirigem 来抓取网站,并httparty使用 gem 来发出 HTTP 请求。

在下面的示例中,已经识别了要抓取的元素。posts在您自己的用例中,您需要发现您想要抓取的网站上元素的路径,毫无疑问,它与下面所示的变量和每个中title定义的内容不同。linkpost

这是示例代码,位于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 篇文章。您可能需要根据自己的需要更改该号码。每次循环浏览博客文章时,都会将一篇文章添加到posts_list包含博客文章标题和 URL 的数组中。

最后,首先使用 gem 查找 README 文件octokit,然后使用一些正则表达式找到 README 中的位置进行更新:posts_regex = /### Recent Blog Posts\n\n[\s\S]*?(?=<\/td>)/m

该脚本将完成这项工作,但实际上没有任何东西调用该脚本。它是如何运行的?这就是 GitHub Actions 发挥作用的地方!

创建操作工作流程

现在我们已经有了脚本,我们需要一种方法来按计划自动运行它。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 ruby/setup-ruby@v1,指定的 Ruby 版本为 3.1。
  • 使用命令安装所需的 Ruby gem(httpartynokogiri和) 。octokitgem install
  • update_posts.rb运行位于目录中的脚本.github/scripts/。和环境变量被提供给脚本,允许它与存储库交互GITHUB_TOKENGITHUB_REPOSITORY

完成此工作流程后,您的脚本将每周自动运行以抓取博客文章并更新自述文件。GitHub Actions 负责所有的调度和执行,使流程无缝且高效。

将所有内容放在一起

如今,您的在线形象通常是那些想要与您联系的人的第一个接触点——无论他们是潜在的雇主、合作者还是开源项目的贡献者。特别是,您的 GitHub 个人资料是展示您的技能、项目和兴趣的宝贵平台。那么,如何确保您的 GitHub 个人资料保持最新、相关并真正反映您是谁?

通过利用 GitHub Actions 的强大功能,我们演示了如何将 GitHub 个人资料从静态 Markdown 文档转换为动态的、不断变化的自我示例。通过本指南中提供的示例,您已经了解了如何从网站抓取数据并使用它来动态更新您的 GitHub 配置文件。虽然我们的示例是用 Ruby 实现的,但可以使用 JavaScript、TypeScript、Python 或您选择的任何其他语言来应用相同的原理。

回顾一下,我们演示了创建 Ruby 脚本的过程,该脚本从网站上抓取博客文章、提取相关信息并更新文件的“最近博客文章”部分README.md。然后,我们使用 GitHub Actions 设置一个工作流程,定期运行脚本,确保您的个人资料与最新内容保持同步。

但我们的旅程并没有结束!本指南中分享的技术和方法可以作为进一步探索和创造力的基础。无论是从其他来源提取数据、与 API 集成,还是尝试不同的内容格式,可能性都是无限的。

因此,继续吧,让您的 GitHub 个人资料成为您自己充满活力和活力的延伸。让它讲述您的故事,突出您的成就,并邀请与他人合作。

⭐ 这篇博文有帮助吗?考虑赞助我在 GitHub 上的工作,以帮助我创建更多这样的内容!❤️

使用 GitHub Actions 使您的 GitHub 个人资料动态化
标签: