前言
最近突然想起年前图床仓库发生的一个遗留问题:由于我的网络图床服务是Github + Typora
的形式,本地的图片会自动转义成网络图片并存储在图床仓库下,一般我们会指定一个目录进行图片存储,但是由于GitHub设定的单个目录最大存储文件数不能超过1000.
所以在注意到这件事的情况下GitHub的图床仓库就发生了问题:新加入的图片文件由于没有文件位,会自动代替旧的图片文件,这就导致了部分文件的丢失,所以这里想写一个GitHub仓库的自动化Action,每天检测仓库下每个目录下的文件个数,超过999个文件自动给GitHub默认绑定的邮箱发送信息提醒。
具体流程
当每天自动检测仓库中每个目录中的文件数量,并且如果超过999个文件时,自动向与GitHub账户关联的默认邮箱发送消息。
1. 创建GitHub工作流文件
在GitHub仓库中,转到.github/workflows
目录并创建一个新文件,比如file_count.yml
。该文件将定义运行自动化操作的工作流。
2. 定义工作流
在file_count.yml
文件中,添加以下代码:
name: File Count Reminder
on:
schedule:
- cron: "0 0 * * *" # Runs every day at midnight UTC
jobs:
count-files:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.10' # Replace with the desired Python version
- name: Count files and send email
run: |
pip install -r requirements.txt
python send_email.py ${{ secrets.GITHUB_TOKEN }}
3. 创建requirements.txt文件
在GitHub仓库中创建一个名为requirements.txt
的文件,并将以下内容添加到文件中:
smtplib
4. 创建send_email.py文件
在GitHub仓库中创建一个名为send_email.py
的文件,并将以下代码添加到文件中:文章来源:https://www.toymoban.com/news/detail-466318.html
import os
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def count_files(directory):
file_count = 0
for root, dirs, files in os.walk(directory):
file_count += len(files)
return file_count
def send_email(github_token, recipient, file_count):
smtp_server = 'smtp.gmail.com'
smtp_port = 587
subject = 'File Count Reminder'
content = f'The repository has {file_count} files.'
message = MIMEText(content, 'plain', 'utf-8')
message['From'] = Header('GitHub Action')
message['To'] = Header(recipient)
message['Subject'] = Header(subject)
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login('githubaction@gmail.com', github_token)
server.sendmail('githubaction@gmail.com', recipient, message.as_string())
server.quit()
print("Email reminder sent to", recipient)
except Exception as e:
print("Failed to send email:", str(e))
repository_path = '.' # Replace with the path to your repository if needed
file_limit = 999
file_count = count_files(repository_path)
if file_count > file_limit:
github_token = os.environ.get('INPUT_GITHUB_TOKEN')
default_email = os.environ.get('GITHUB_ACTOR') + '@users.noreply.github.com'
send_email(github_token, default_email, file_count)
else:
print("The repository has", file_count, "files. No reminder needed.")
使用这些步骤,工作流将每天UTC时间午夜运行,计算仓库中的文件数量,如果文件数量超过999,则会向与GitHub账户关联的默认邮箱发送邮件提醒。文章来源地址https://www.toymoban.com/news/detail-466318.html
到了这里,关于【版本控制】GitHub图床服务Action---自动监视图床仓库的目录下的文件数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!