关于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的每个title和link。 上面是示例代码,将其放在scripts/文件夹中: require 'httparty'require 'nokogiri'require 'octokit'# Scrape blog posts from the websiteurl = "<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 fileclient = 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 sectionposts_regex = /### Recent Blog Posts\n\n[\s\S]*?(?=<\/td>)/mupdated_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。 ...