python - GitHub Actions:工作流程永无止境
问题描述
我有一个应用程序在 GitHub Action 上无休止地运行,每次我需要手动取消工作流程。
我的main.yml
文件很简单:
#main.yml
name: Python Script Workflow
on:
schedule:
- cron: "50 13 * * 1-5"
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
environment:
name: production
steps:
- name: Checkout repository content
uses: actions/checkout@v2 # Checkout the repository content to github runner.
- name: Setup Python Version
uses: actions/setup-python@v2
with:
python-version: 3.9.6
- name: Install Python dependencies
uses: py-actions/py-dependency-install@v2
with:
path: "requirements.txt"
- name: Run Python script # Run the app.py
env:
FROM_EMAIL: ${{ secrets.FROM_EMAIL }}
FROM_PWD: ${{ secrets.FROM_PWD }}
API_KEY: ${{ secrets.API_KEY }}
API_KEY_SECRET: ${{ secrets.API_KEY_SECRET }}
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}
BEARER_TOKEN: ${{ secrets.BEARER_TOKEN }}
run: python app.py
我有一个app.py
调用该文件的文件,该文件read_email.py
在读取后调用下面的文件,这又会执行推文。他在这里:
#post_tweet.py
from dotenv import load_dotenv
from os import getenv
from textwrap import wrap
from time import sleep
from tweepy import OAuthHandler, API
def twitter_connect(tweet_list):
load_dotenv()
consumer_key = getenv('API_KEY')
consumer_secret = getenv('API_KEY_SECRET')
access_token = getenv('ACCESS_TOKEN')
access_token_secret = getenv('ACCESS_TOKEN_SECRET')
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = API(auth)
try:
api.verify_credentials()
post_tweet(tweet_list, api)
except:
sleep(120)
twitter_connect(tweet_list)
def post_tweet(tweet_list, api):
for tweet in tweet_list:
print('\n' + tweet + '\n')
each_tweet = wrap(tweet, 280, break_long_words=False)
original_tweet = []
for i, chunk in zip(range(len(each_tweet)), each_tweet):
original_tweet.extend([chunk])
print(original_tweet)
if i == 0:
original_tweet[i] = api.update_status(chunk)
else:
original_tweet[i] = api.update_status(chunk,
in_reply_to_status_id=original_tweet[i-1].id,
auto_populate_reply_metadata=True)
sleep(1)
sleep(300)
当我在 localhost 上运行它时,它会正常运行并完成。但是当它在 GitHub Actions 上运行时,在最后一条推文之后,它并没有按预期完成。
有谁知道我要去哪里错了?我错过了什么?
最后构建:https ://github.com/arnonrdp/Bot-Deschamps-Newsletter/actions/runs/1329254957
编辑:
#read_email.py
from dotenv import load_dotenv
from imap_tools import MailBox, MailMessageFlags, A
from os import getenv
from post_tweet import twitter_connect
from time import sleep
def mail_connect():
load_dotenv()
FROM_EMAIL = getenv('FROM_EMAIL')
FROM_PWD = getenv('FROM_PWD')
SMTP_SERVER = "imap.gmail.com"
mailbox = MailBox(SMTP_SERVER).login(
FROM_EMAIL, FROM_PWD, initial_folder='INBOX')
read_email(mailbox)
def read_email(mailbox):
posts = []
mail_list = [i.uid for i in mailbox.fetch()]
if mail_list:
for msg in mailbox.fetch(A(from_='newsletter@filipedeschamps.com.br')):
posts = msg.text.replace('*', '').split('\r\n\r\n')
posts = posts[2:-3]
mark_as_read(mailbox)
archive_message(mailbox, msg.uid)
twitter_connect(posts)
else:
sleep(60)
mail_connect()
def mark_as_read(mailbox):
flags = (MailMessageFlags.ANSWERED, MailMessageFlags.FLAGGED)
mailbox.flag(mailbox.fetch(A(seen=False)), flags, True)
mailbox.flag(mailbox.fetch("SENTON 01-Jan-2021"),
MailMessageFlags.SEEN, False)
def archive_message(mailbox, msg_uid):
move_to = 'Tweeted'
mailbox.move(msg_uid, move_to)
解决方案
推荐阅读
- jquery - jQuery扩展功能失败
- reactjs - 我在我的反应应用程序中遇到了 applyMiddleware 的问题
- java - 使用 Java 从 AWS Lambda 访问 SQS 时超时
- python - Pandas:如何过滤具有一对多和一对一关系的参数
- html - 如何给网格列和行一个边框?
- android - Google 管理签名密钥是否会覆盖signingConfigs 中的设置?
- azure - 如何在 Powershell 中授予管理员对 Azure AAD 应用程序的许可?
- php - 带有大表的 PHP PDO
- javascript - 单击旁边的按钮时如何交叉?
- python - 在数据框中的两个列表中检测和计数模式