GitHub Actions 的 Go 语言示例
GitHub的新个人资料页面README功能为开发人员Internet的Myspace页面带来了一些个性。
尽管Markdown最适合标准静态文本内容,但这并不能阻止有创造力的人们创建下一个自述文件。您可以包括GIF和图像来添加一些动态内容(它们在GitHub Flavor Markdown中已介绍)
由于自述文件位于GitHub个人资料的中心位置,因此它是一个很好的机会,可以让人们知道您的意思,发现的重要内容并展示您的工作重点。
您可能想炫耀最新的存储库,tweet或博客文章。借助GitHub Actions之类的持续交付工具,保持最新状态也不是一件容易的事。
我当前的自述文件每天都会刷新自己,并提供指向我最新博客文章的链接。这是我README.md
使用Go和GitHub操作构建自我更新的方式。
使用Go读写文件
要创建README.md,我将从现有文件中获取一些静态内容,将其与我们将通过Go生成的一些新动态内容融合在一起,然后就会出现很棒的内容。
这是我们读取名为static.md
并以string
表格形式放置的文件的方式:
content, err := ioutil.ReadFile("static.md")
if err != nil {
log.Fatalf("cannot read file: %v", err)
return err
}
stringyContent := string(content)
动态内容的可能性仅受您的想象力限制!在这里,我将使用该软件包从我的博客中阅读RSS提要并获取最新的帖子。github.com/mmcdole/gofeed
fp := gofeed.NewParser()
feed, err := fp.ParseURL("https://victoria.dev/index.xml")
if err != nil {
log.Fatalf("error getting feed: %v", err)
}
rssItem := feed.Items[0]
为了将这些连接在一起并产生严格的效果,我们用于fmt.Sprintf()
创建格式化的字符串。
blog := "Read my latest blog post: **[" + rssItem.Title + "](" + rssItem.Link + ")**"
data := fmt.Sprintf("%s\n%s\n", stringyContent, blog)
然后,使用混合创建一个新文件os.Create()
。关于延期file.Close()
还有更多的事情要知道,但是我们不需要在这里深入了解这些细节。我们将添加内容file.Sync()
以确保自述文件被写入。
file, err := os.Create("README.md")
if err != nil {
return err
}
defer file.Close()
_, err = io.WriteString(file, data)
if err != nil {
return err
}
return file.Sync()
在我的README存储库中查看完整的代码。
嗯,那闻起来不好吗?🍪让我们每天通过GitHub Action做到这一点。
使用Actions按计划运行Go程序
您可以创建一个GitHub Action工作流,该工作流既可以在推送到分支机构时触发master
,也可以在每日计划中触发。这.github/workflows/update.yaml
是定义此内容的一部分:
on:
push:
branches:
- master
schedule:
- cron: '0 11 * * *'
要运行用于重建自述文件的Go程序,我们首先需要文件的副本。我们actions/checkout
为此:
steps:
- name: 🍽️ Get working copy
uses: actions/checkout@master
with:
fetch-depth: 1
此步骤运行我们的Go程序:
- name: 🍳 Shake & bake README
run: |
cd ${GITHUB_WORKSPACE}/update/
go run main.go
最后,我们将更新的文件推回到存储库中。了解有关在工作流中使用变量和机密中显示的变量的更多信息。
- name: 🚀 Deploy
run: |
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
git add .
git commit -am "Update dynamic content"
git push --all -f https://${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git
在我的README存储库中查看此Action工作流的完整代码。
继续并自动更新您的自述文件
转载自:https://juejin.cn/post/6858064087365746702