diff --git a/spug_api/apps/apis/deploy.py b/spug_api/apps/apis/deploy.py index 17289db..8d81da9 100644 --- a/spug_api/apps/apis/deploy.py +++ b/spug_api/apps/apis/deploy.py @@ -22,7 +22,7 @@ def auto_deploy(request, deploy_id, kind): if kind == 'branch' and _kind == 'heads': commit_id = body['after'] if commit_id != '0000000000000000000000000000000000000000' and ref == request.GET.get('name'): - message = _parse_message(body, repo)[:20] + message = _parse_message(body, repo) Thread(target=_dispatch, args=(deploy_id, ref, commit_id, message)).start() return HttpResponse(status=202) elif kind == 'tag' and _kind == 'tags': @@ -82,7 +82,7 @@ def _parse_message(body, repo): message = body['commits'][0].get('message', '') else: raise ValueError(f'repo {repo} is not supported') - return message + return message[:20].strip() def _dispatch(deploy_id, ref, commit_id=None, message=None): diff --git a/spug_api/apps/deploy/utils.py b/spug_api/apps/deploy/utils.py index fe8dc63..e2149a0 100644 --- a/spug_api/apps/deploy/utils.py +++ b/spug_api/apps/deploy/utils.py @@ -131,7 +131,10 @@ def _ext2_deploy(req, helper, env): if action.get('type') == 'transfer': action['src'] = render_str(action.get('src', '').strip().rstrip('/'), env) action['dst'] = render_str(action['dst'].strip().rstrip('/'), env) - if action.get('src_mode') == '1': + if action.get('src_mode') == '1': # upload when publish + extra = json.loads(req.extra) + if 'name' in extra: + action['name'] = extra['name'] break helper.send_step('local', step, f'{human_time()} 检测到来源为本地路径的数据传输动作,执行打包... \r\n') action['src'] = action['src'].rstrip('/ ') @@ -263,7 +266,14 @@ def _deploy_ext2_host(helper, h_id, actions, env, spug_version): if action.get('type') == 'transfer': if action.get('src_mode') == '1': try: - ssh.put_file(os.path.join(REPOS_DIR, env.SPUG_DEPLOY_ID, spug_version), action['dst']) + dst = action['dst'] + command = f'[ -e {dst} ] || mkdir -p $(dirname {dst}); [ -d {dst} ]' + code, _ = ssh.exec_command_raw(command) + if code == 0: # is dir + if not action.get('name'): + raise RuntimeError('internal error 1002') + dst = dst.rstrip('/') + '/' + action['name'] + ssh.put_file(os.path.join(REPOS_DIR, env.SPUG_DEPLOY_ID, spug_version), dst) except Exception as e: helper.send_error(host.id, f'Exception: {e}') helper.send_info(host.id, 'transfer completed\r\n')