如何使用 GitHub Actions 通过计划事件保持简历更新
GitHub Actions(预定事件)
GitHub Actions 允许您按计划运行工作流程。
如果您在 GitHub 工作流程中添加以下示例代码,您将看到工作流程每 15 分钟运行一次。
on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '*/15 * * * *'
即:运行计划工作流的最短间隔是每 5 分钟一次。
有关计划事件的更多详细信息,请参见:
https://docs.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events
设置 GitHub Actions:
.yaml
在此创建文件<project_dir>/.github/workflows/update_resume.yaml
将此代码粘贴到创建的文件中:
name: Update My Resume
on:
push:
branches:
- master
schedule:
- cron: '0 */15 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Setup Python Environment
uses: actions/setup-python@v2
with:
python-version: 3.7
- name: Install Requirements
run: pip install -r requirements.txt
- name: Execute Python script
run: |
python scripts/update.py
- name: setup git config
run: |
git config user.name ${{ secrets.USERNAME }}
git config user.email ${{ secrets.EMAIL }}
- name: commit changes
run: |
chmod +x ./scripts/commit.sh
./scripts/commit.sh
这里的工作流将在push
事件上运行,并且每 15 分钟自动运行一次。
我们正在图像上运行工作流程ubuntu-latest
。
第一步,github 将签出代码
- name: Checkout Code
uses: actions/checkout@v2
第二步,github 将设置 python 3.7
- name: Setup Python Environment
uses: actions/setup-python@v2
with:
python-version: 3.7
第三步,GitHub 会通过“pip
我正在使用的requests
包”向 GitHub API 发送请求来安装所需的包。
如果您不需要任何外部包,可以跳过此步骤。
- name: Install Requirements
run: pip install -r requirements.txt
在此步骤中,github 将执行scripts/update.py
。
别担心,我们还没有创建 Python 脚本。稍后再详细介绍。
- name: Execute Python script
run: |
python scripts/update.py
在此步骤中,GitHub 将设置 git 配置。您可以前往https://github.com/<your_username>/<your_repository_name>/settings/secrets/new
创建 secrets(USERNAME
,EMAIL
)。
此用户名和电子邮件将在 git 提交时使用。
- name: setup git config
run: |
git config user.name ${{ secrets.USERNAME }}
git config user.email ${{ secrets.EMAIL }}
在此步骤中,GitHub 将提交更改到你的存储库。
我们将/scripts/commit.sh
在下一步中创建文件。
- name: commit changes
run: |
chmod +x ./scripts/commit.sh
./scripts/commit.sh
创建提交脚本:
在此创建文件<project_dir>/scripts/commit.sh
将此代码粘贴到创建的文件中:
#!/bin/bash
git add .
git commit -m "Updated Repository data"
git push origin master
这只是一个 shell 脚本,它会将新的提交推送到您的存储库。
创建Json文件:
此 Json 文件将使用update.py
我们稍后创建的文件进行更新。
在此创建文件<project_dir>/repo_data.json
将此代码粘贴到创建的文件中:
[
{
"full_name": "readthedocs/readthedocs.org",
"url": "https://github.com/readthedocs/readthedocs.org"
},
{
"full_name": "saadmk11/banking-system",
"url": "https://github.com/saadmk11/banking-system"
}
]
这里我添加了我贡献过的开源项目。我们将更新此文件,以
显示每个仓库的正确启动、分叉和观察者数量,并更新仓库的描述。
创建 Python 脚本:
在此创建文件<project_dir>/scripts/update.py
将此代码粘贴到创建的文件中:
import json
import requests
def get_repositories_data(data):
new_data = []
for repo in data:
repo_name = repo['full_name']
url = f'https://api.github.com/repos/{repo_name}'
response = requests.get(url)
response_data = response.json()
repo.update({
"short_description": response_data['description'],
"stars": response_data['stargazers_count'],
"forks": response_data['forks_count'],
"watchers": response_data['watchers_count']
})
new_data.append(repo)
return new_data
def update_json_file():
with open('repo_data.json', 'r') as json_file:
data = json.load(json_file)
updated_data = get_repositories_data(data)
with open('repo_data.json', 'w') as json_file:
json_file.write(json.dumps(updated_data, indent=4))
if __name__ == '__main__':
update_json_file()
该脚本将向GET
GitHub API 发送请求并获取我在 Json 文件中列出的存储库的最新更新,并更新repo_data.json
文件以显示当前启动、观察者和分叉的数量并更新描述。
requirements.txt
在此处创建文件<project_dir>/requirements.txt
并添加requests==2.24.0
。
创建HTML
并JS
加载 JSON 数据的文件:
在此创建文件<project_dir>/index.html
在创建的文件中添加此代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>My Resume</title>
</head>
<body>
<div id="openSourceRepos"></div>
<script src="main.js"></script>
</body>
</html>
** 这只是为了展示您可以按照自己喜欢的任何方式设计和设计您的简历的示例。
在此创建文件<project_dir>/main.js
在创建的文件中添加此代码:
function getJSON(url, callbackFunction) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
try {
var responseData = JSON.parse(xmlhttp.responseText);
} catch(error) {
return;
}
callbackFunction(responseData);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
document.addEventListener('DOMContentLoaded', (event) => {
var container = document.getElementById("openSourceRepos");
getJSON('repo_data.json', function(data) {
data.forEach(function (repo) {
var child = `
<div>
<h2>
<a href='${repo.url}'>${repo.full_name}</a>
</h2>
<p>${repo.short_description}</p>
<ul>
<li>${repo.stars}</li>
<li>${repo.forks}</li>
<li>${repo.watchers}</li>
</ul>
</div>
`;
container.insertAdjacentHTML('beforeend', child);
});
});
});
此 JavaScript 文件将从 Json 文件加载存储库数据并将其显示在 html 上。这里我使用了XMLHttpRequest
,但您可以使用Fetch API
或JQuery
来加载 Json 文件。
完成所有步骤后,您的项目存储库树应如下所示
project_dir
│ index.html
│ main.js
│ requirements.txt
│ repo_data.json
│
└───scripts
│ │ commit.sh
│ │ update.py
│
└───.github
| |
│ └───workflows
| | update_resume.yaml
|
设置 GitHub 页面:
我使用 GitHub Pages 托管我的简历。
您可以在这里了解更多关于如何设置 GitHub Pages 的信息。
设置完成后,GitHub 将每 15 分钟运行一次你的工作流程,如果
json 文件中列出的存储库有任何更改,python 脚本将更新它,并将更改的文件提交
到你的存储库。因此,你在简历中列出的存储库将始终保持最新。
结论
schedules
我展示了GitHub Actions 上的一个小功能。
但你可以用它做很多更复杂的事情。
你可以自动化网站上的许多操作。如果你读了这篇文章,并用它来做了一些事情,请随时在Twitter或评论区 与我
分享。
这是我的第一篇帖子!:)
链接链接:https://dev.to/saadmk11/how-i-use-github-actions-to-keep-my-resume-up-to-date-using-scheduled-events-21j2