跳至主要内容

串接所有功能

經過前面的說明,我們已經完成了所有功能的開發,現在需要把這些功能串接起來,讓整個系統在後續的運作中能夠自動化執行。

完整流程

我們撰寫一支 bash 程式 update_targets_infos.sh,將所有的步驟串接在一起。

其中包括了函數調用還有自動推送到 GitHub 的功能。

在現階段,我們追蹤了幾個專案,包含:

  • albumentations
  • onnxruntime
  • pytorch-lightning
  • BentoML
  • docusaurus

過程中也加入了一些 Log 機制,以便於後續的追蹤。

#!/bin/bash

# 定義目錄和環境變量
origin_dir="$HOME/workspace/GmailSummary"
targ_dir="$HOME/workspace/website"
pyenv_path="$HOME/.pyenv/versions/3.10.14/envs/main/bin/python"
log_dir="$origin_dir/logs"
current_date=$(date '+%Y-%m-%d')
project_path="$targ_dir/docs/gmailsummary/news/$current_date"

# 創建所需的目錄
mkdir -p "$log_dir" "$project_path"

cd $origin_dir

# 指定項目名稱列表
project_names=("albumentations" "onnxruntime" "pytorch-lightning" "docusaurus")

for project_name in "${project_names[@]}"; do
log_file="$log_dir/$project_name-log-$current_date.txt"
file_name="$project_name.md"

# 執行 Python 程式並處理輸出
{
echo "Starting the script for $project_name at $(date)"
$pyenv_path main.py --project_name $project_name --time_length 1
mv "$origin_dir/$file_name" "$project_path"
git -C "$targ_dir" add "$project_path/$file_name"
echo "Script finished for $project_name at $(date)"
} >> "$log_file" 2>&1

# 檢查執行狀態
if [ $? -ne 0 ]; then
echo "An error occurred for $project_name, please check the log file $log_file." >> "$log_file"
fi
done

# 推送 Git 變更
git -C "$targ_dir" commit -m "[C] Update project report for $current_date"
git -C "$targ_dir" push

實作建議

在這個專案中,為了串接 API 而使整個專案充斥著憑證和密鑰,因此我們有些建議:

首先,不管怎樣,拜託不要:硬編碼你的憑證和密鑰

這樣做會導致你的憑證和密鑰泄露,進而導致你的郵件和數據不再安全。

請將這些敏感信息存儲在安全的地方,並且不要將它們直接公開在任何場合。

  • 確保安全性:處理 Gmail API 和 OpenAI API 時,請妥善保管你的 credentials.json 和 API 密鑰。

其他就不是很重要了,就是一些小建議:

  • 考慮郵件多樣性:在過濾和解析郵件時,考慮到不同類型的郵件格式和內容,使程式能夠靈活應對各種情況。
  • 定期檢查與維護:雖然這是一個自動化方案,但定期檢查執行狀況和更新程式以適應可能的 API 變更仍然是必要的。