mirror of https://github.com/openspug/spug
A 添加manage.py update命令升级spug
parent
8b13a7eb80
commit
322f17eefb
|
@ -2,16 +2,53 @@
|
|||
# Copyright: (c) <spug.dev@gmail.com>
|
||||
# Released under the MIT License.
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.core.management import execute_from_command_line
|
||||
from django.core.management import call_command
|
||||
from django.conf import settings
|
||||
import subprocess
|
||||
import requests
|
||||
import os
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = '升级Spug版本'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument('version', help='要升级的版本')
|
||||
|
||||
def handle(self, *args, **options):
|
||||
res = requests.get('https://gitee.com/api/v5/repos/openspug/spug/releases/latest').json()
|
||||
version = res.get('tag_name')
|
||||
if not version:
|
||||
return self.stderr.write(self.style.ERROR('获取新版本失败,排除网络问题后可至官方论坛反馈'))
|
||||
if version == settings.SPUG_VERSION:
|
||||
return self.stdout.write(self.style.SUCCESS('当前已是最新版本'))
|
||||
answer = input(f'发现新版本 {version} 是否更新[y|n]?')
|
||||
if answer.lower() != 'y':
|
||||
return
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('升级成功'))
|
||||
# update web
|
||||
web_dir = os.path.join(settings.BASE_DIR, '../spug_web')
|
||||
commands = [
|
||||
f'curl -o /tmp/spug_web.tar.gz https://spug.dev/installer/web_{version}.tar.gz',
|
||||
f'rm -rf {web_dir}/build',
|
||||
f'tar xf /tmp/spug_web.tar.gz -C {web_dir}'
|
||||
]
|
||||
task = subprocess.Popen(' && '.join(commands), shell=True)
|
||||
if task.wait() != 0:
|
||||
return self.stderr.write(self.style.ERROR('获取更新失败,排除网络问题后可至官方论坛反馈。'))
|
||||
|
||||
# update api
|
||||
commands = [
|
||||
f'cd {settings.BASE_DIR}',
|
||||
'git fetch --tags',
|
||||
f'git checkout {version}'
|
||||
]
|
||||
task = subprocess.Popen(' && '.join(commands), shell=True)
|
||||
if task.wait() != 0:
|
||||
return self.stderr.write(self.style.ERROR('获取更新失败,排除网络问题后可至官方论坛反馈。'))
|
||||
|
||||
# update db
|
||||
apps = [x.split('.')[-1] for x in settings.INSTALLED_APPS if x.startswith('apps.')]
|
||||
call_command('makemigrations', *apps)
|
||||
call_command('migrate')
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('''升级成功,请自行重启服务,如果通过官方文档安装一般重启命令为
|
||||
Centos: systemctl restart supervisord
|
||||
Ubuntu: systemctl restart supervisor'''))
|
||||
|
|
Loading…
Reference in New Issue