likes
comments
collection
share

GitHub Actions 的 Go 语言示例

作者站长头像
站长
· 阅读数 3

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工作流的完整代码。

继续并自动更新您的自述文件

原文:www.freecodecamp.org/news/go-aut…