Spaces:
Running
Running
File size: 3,223 Bytes
d772d81 550cc96 b43f3e0 7c5e2c8 d772d81 7c5e2c8 b43f3e0 d772d81 7c5e2c8 d772d81 7c5e2c8 d772d81 7c5e2c8 d772d81 7c5e2c8 d772d81 63b83fd d772d81 7c5e2c8 550cc96 b43f3e0 550cc96 d772d81 7c5e2c8 b43f3e0 7c5e2c8 d772d81 3632a28 7c5e2c8 d772d81 7c5e2c8 d772d81 7c5e2c8 d772d81 35f72da |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
from flask import Flask, render_template, send_from_directory
import schedule
import threading
import time
import subprocess
import os
import shutil
import stat
import logging
# ロギング設定
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
# 定数
REPO_URL = "https://github.com/SharkPool-SP/SharkPools-Extensions.git"
REPO_DIR = "SharkPools-Extensions"
TARGET_FILE = os.path.join(REPO_DIR, "pages", "startup.js")
# Flask アプリケーション設定
app = Flask(__name__, template_folder="templates", static_folder="static")
@app.route("/")
def index():
return render_template("index.html")
@app.route('/static/<path:filename>')
def serve_static(filename):
return send_from_directory(app.static_folder, filename)
# 読み取り専用ファイルを削除できるようにする
def remove_readonly(func, path, excinfo):
os.chmod(path, stat.S_IWRITE)
func(path)
# リポジトリをクローンまたは更新し、ファイルを修正・コピーする関数
def clone_or_update_repo():
logging.info("リポジトリの更新を開始します。")
if not os.path.exists(REPO_DIR):
logging.info("リポジトリをクローン中...")
subprocess.run(["git", "clone", REPO_URL])
else:
logging.info("リポジトリをプル中...")
result = subprocess.run(["git", "-C", REPO_DIR, "pull"], capture_output=True, text=True)
logging.info(result.stdout)
if result.stderr:
logging.error(result.stderr)
if os.path.exists(TARGET_FILE):
with open(TARGET_FILE, "r", encoding="utf-8") as f:
content = f.read()
new_content = content.replace(
'}, "https://studio.penguinmod.com");',
'}, "*");'
)
if content == new_content:
logging.warning("置換対象の文字列が見つかりませんでした。")
else:
with open(TARGET_FILE, "w", encoding="utf-8") as f:
f.write(new_content)
logging.info("置換が完了しました。")
logging.info("テンプレートと静的ファイルをコピー中...")
os.makedirs("templates", exist_ok=True)
shutil.copy(os.path.join(REPO_DIR, "index.html"), "templates/index.html")
dest_pages = os.path.join("static", "pages")
if os.path.exists(dest_pages):
shutil.rmtree(dest_pages, onerror=remove_readonly)
os.makedirs("static", exist_ok=True)
shutil.copytree(os.path.join(REPO_DIR, "pages"), dest_pages)
logging.info("リポジトリの更新が完了しました。")
# スケジューラを実行する関数(1分ごと)
def run_scheduler():
schedule.every(60).minutes.do(clone_or_update_repo)
try:
while True:
schedule.run_pending()
time.sleep(1)
except Exception as e:
logging.error(f"スケジューラでエラーが発生しました: {e}")
# 初回実行およびスケジューラ起動
clone_or_update_repo()
scheduler_thread = threading.Thread(target=run_scheduler, daemon=True)
scheduler_thread.start()
# アプリ起動
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=7860)
|