原文链接:www.bengreenberg.dev/posts/2023-…

人们在网上首要发现你的当地是哪里?也许你的交际媒体是人们查找你时首要发现的东西,亦也许是你为自己创立的出资组合网站。然而,假如你运用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 个人主页成为你自己的一个充满活力的扩展。让它叙述你的故事,突出你的成就,并邀请你与别人合作。

以上就是本文的全部内容,假如对你有所启示,欢迎点赞、保藏、转发~