あなたのGithubプロフィールを自動化してください


Githubの新しいプロファイルページReadMe機能は、開発者のインターネットのMySpaceページにいくつかの個性をもたらすの素晴らしい効果を持っています.Markdownは標準的な静的テキストコンテンツに最適ですが、それは次のレベルのREADMEを作成する作業からの創造的な人々を停止していません.GIFとイメージを含めることができますいくつかのモーションとPizazzGitHub Flavor Markdown ), しかし、私は少しダイナミックな何かを考えています.
あなたのGitHubプロフィールの正面と中心で、あなたのReadMeは人々があなたが何についてであるかについてわかっているようにする絶好の機会です、あなたが重要であるものを見つけて、ショーケースにあなたの仕事の若干のハイライト.あなたの最新のリポジトリ、つぶやき、またはブログ記事を披露したいかもしれません.最新の状態に保つことは、どちらかの痛みである必要はありません.
私の現在のREADMEは私の最新ブログ記事へのリンクで毎日自分自身をリフレッシュします.私が自己更新を作成している方法は、ここにありますREADME.md GoとGithubアクションで.

Reading and writing files with Go
私は最近、たくさんのPythonを書いていますが、いくつかのことについては本当に行きたいです.あなたは、それがちょうど私のために言語に行くと言うことができました-func プロジェクト.ごめんなさい.私自身を止めることができませんでした.
READMEを作成するには私は、既存のファイルから静的コンテンツを取得するつもりです.私たちがGoで生成するいくつかの新しいダイナミックコンテンツと一緒にマッシュアップします.
ここでは、私たちがファイルで読んだ方法がありますstatic.md そして、string フォーム
// Unwrap Markdown content
content, err := ioutil.ReadFile("static.md")
if err != nil {
    log.Fatalf("cannot read file: %v", err)
    return err
}

// Make it a string
stringyContent := string(content)

あなたのダイナミックなコンテンツの可能性はあなたの想像力によって制限されます!ここで、私は github.com/mmcdole/gofeed package 私のブログからRSSフィードを読んで、最新のポストを得るために.
fp := gofeed.NewParser()
feed, err := fp.ParseURL("https://victoria.dev/index.xml")
if err != nil {
    log.Fatalf("error getting feed: %v", err)
}
// Get the freshest item
rssItem := feed.Items[0]

一緒にこれらのビットに参加し、Stringy fmt.Sprintf() フォーマットされた文字列を作成するには
// Whisk together static and dynamic content until stiff peaks form
blog := "Read my latest blog post: **[" + rssItem.Title + "](" + rssItem.Link + ")**"
data := fmt.Sprintf("%s\n%s\n", stringyContent, blog)

次に、このミックスから新しいファイルを作成するには os.Create() . があるmore things to know about deferring file.Close() , しかし、我々はこれらの詳細をここに入れる必要はありません.追加しますfile.Sync() readmeの書き込みを保証します.
// Prepare file with a light coating of os
file, err := os.Create("README.md")
if err != nil {
    return err
}
defer file.Close()

// Bake at n bytes per second until golden brown
_, err = io.WriteString(file, data)
if err != nil {
    return err
}
return file.Sync()

完全なコードを見るhere in my README repository .
MMMM、それは良いにおいがしませんか?🍪 これをgithub行動で毎日起こりましょう.

Running your Go program on a schedule with Actions
Githubアクションワークフローを作成できますtriggers あなたの両方にプッシュmaster 支店だけでなく、毎日のスケジュールに.これが1切れです.github/workflows/update.yaml これが定義されている:
on:
  push:
    branches:
      - master
  schedule:
    - cron: '0 11 * * *'

READMEを再構築する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

最後に、更新されたファイルをリポジトリに戻します.で示される変数について詳しく知るUsing variables and secrets in a workflow .
- 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

このアクションワークフローの完全なコードを表示するhere in my README repository .

Go forth and auto-update your README
おめでとうとクールな子供のクラブへようこそ!これで、自動更新GATHUBプロファイルREADMEを構築する方法を知っています.今すぐに行って、きちんとしたダイナミックな要素をあなたのページに追加することができます.