refactor(SwitchBundle): 重构h5子游戏拆分上传工具
This commit is contained in:
196
python/switch_bundle_common.py
Normal file
196
python/switch_bundle_common.py
Normal file
@@ -0,0 +1,196 @@
|
||||
"""Shared Vault authorization and bundle publishing for both environments."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import hashlib
|
||||
|
||||
from vault_options import parse_vault_options, read_switch_bundle
|
||||
|
||||
REGION_CONFIG = {
|
||||
'dev': 'ap-east-1',
|
||||
'prod': 'eu-west-3',
|
||||
}
|
||||
|
||||
OSS_PATH_CONFIG = {
|
||||
'dev': {
|
||||
'waje': 's3://web-h5game-test-waje/internal/',
|
||||
'wtan': 's3://web-h5game-test-wtan/internal/',
|
||||
},
|
||||
'prod': {
|
||||
'waje': 's3://web-h5game-prod/internal/',
|
||||
'wtan': ''
|
||||
},
|
||||
}
|
||||
|
||||
PROFILE_CONFIG = {
|
||||
'dev': {
|
||||
'waje': 'h5-new',
|
||||
'wtan': 'h5-new',
|
||||
},
|
||||
'prod': {
|
||||
'waje': 'default',
|
||||
'wtan': 'h5-new',
|
||||
}
|
||||
}
|
||||
|
||||
VAULT_ADDR = 'https://keys.i-see--you.icu'
|
||||
VAULT_TOKEN = 'hvs.CAESIJrOb65T9ylAMyzlqQOJjI-yutFmTysRbvYbN3IpGra5Gh4KHGh2cy5GeXU4N3FuVEhIQ3A5YmpIM1BETFdYMDc'
|
||||
|
||||
BUNDLE_CONFIG = {
|
||||
'6001': 'whot',
|
||||
'6002': 'whot',
|
||||
'6003': 'whot',
|
||||
'6005': 'BRWhot',
|
||||
'2001': 'roulette',
|
||||
'2002': 'wajeSpin',
|
||||
'2003': 'bottleSpin',
|
||||
'2004': 'blackjack',
|
||||
'2006': 'betterjack',
|
||||
'6007': 'BRWhot',
|
||||
'2008': 'slots',
|
||||
'2005': 'christmas',
|
||||
}
|
||||
|
||||
UNLINK_ARRAY = [
|
||||
'cocos2d-js.109f3.js',
|
||||
'cocos2d-js-min.13181.js',
|
||||
'physics.9d2de.js',
|
||||
'physics-min.ce5ee.js',
|
||||
'style-desktop.dfd76.css',
|
||||
'style-mobile.6e9cd.css',
|
||||
'splash.85cfd.png',
|
||||
]
|
||||
|
||||
|
||||
def create_vault_client(**kwargs):
|
||||
"""Create the default Vault client only when a real publish is run."""
|
||||
import hvac
|
||||
|
||||
return hvac.Client(**kwargs)
|
||||
|
||||
|
||||
def remove_folder(path):
|
||||
print('remove path: ', path)
|
||||
if os.path.exists(path):
|
||||
if os.path.isfile(path) or os.path.islink(path):
|
||||
os.remove(path)
|
||||
else:
|
||||
for filename in os.listdir(path):
|
||||
remove_folder(os.path.join(path, filename))
|
||||
os.rmdir(path)
|
||||
|
||||
|
||||
def run_publish(proj_dir, subgame_path, region, profile,
|
||||
run_command=subprocess.run):
|
||||
"""Upload shared resources and bundles, then publish each game's shell."""
|
||||
build_dir = proj_dir + '\\build\\web-mobile\\'
|
||||
|
||||
src_dir = build_dir + '\\src\\'
|
||||
src_dst = subgame_path + 'lib/src/'
|
||||
remove_result = run_command(
|
||||
['cmd', '/c', 'aws s3 rm ' + src_dst + ' --recursive' + ' --profile ' + profile + ' --region ' + region],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
print('remove dir src result: ', remove_result)
|
||||
|
||||
command = (
|
||||
'call aws s3 cp ' + src_dir + ' ' + src_dst
|
||||
+ ' --recursive'
|
||||
+ ' --profile ' + profile
|
||||
+ ' --region ' + region
|
||||
)
|
||||
result = run_command(
|
||||
['cmd', '/c', command],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
print('upload dir src result: ', result)
|
||||
remove_folder(src_dir)
|
||||
|
||||
for filename in os.listdir(build_dir):
|
||||
file_path = os.path.join(build_dir, filename)
|
||||
if filename in UNLINK_ARRAY:
|
||||
os.remove(file_path)
|
||||
|
||||
for gameid in BUNDLE_CONFIG:
|
||||
aws_path = (
|
||||
subgame_path + gameid + '/assets/'
|
||||
+ BUNDLE_CONFIG[gameid] + '/'
|
||||
)
|
||||
remove_result = run_command(
|
||||
['cmd', '/c', 'aws s3 rm ' + aws_path + ' --recursive' + ' --profile ' + profile + ' --region ' + region],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
print('remove game gameid: ', gameid, ' result: ', remove_result)
|
||||
|
||||
subgame_dir = build_dir + 'assets\\' + BUNDLE_CONFIG[gameid] + '\\'
|
||||
command = (
|
||||
'call aws s3 cp ' + subgame_dir + ' ' + aws_path
|
||||
+ ' --recursive'
|
||||
+ ' --profile ' + profile
|
||||
+ ' --region ' + region
|
||||
)
|
||||
result = run_command(
|
||||
['cmd', '/c', command],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
print(result)
|
||||
|
||||
for gameid in BUNDLE_CONFIG:
|
||||
subgame_dir = build_dir + 'assets\\' + BUNDLE_CONFIG[gameid]
|
||||
remove_folder(subgame_dir)
|
||||
|
||||
for gameid in BUNDLE_CONFIG:
|
||||
aws_path = subgame_path + gameid + '/'
|
||||
command = (
|
||||
'call aws s3 cp ' + build_dir + ' ' + aws_path
|
||||
+ ' --recursive'
|
||||
+ ' --profile ' + profile
|
||||
+ ' --region ' + region
|
||||
)
|
||||
result = run_command(
|
||||
['cmd', '/c', command],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
print('upload game gameid: ', gameid, ' result: ', result)
|
||||
|
||||
|
||||
def main(argv, client_factory=None, publish=None):
|
||||
"""Parse the legacy CLI arguments and publish when Vault permits it."""
|
||||
proj_dir, pwd, env, cat, vault_path, vault_mount_point = parse_vault_options(argv)
|
||||
if len(argv) < 5:
|
||||
print('argv error!')
|
||||
sys.exit(-1)
|
||||
md5_obj = hashlib.md5()
|
||||
md5_obj.update((env + cat).encode('utf-8'))
|
||||
hash_value = md5_obj.hexdigest()
|
||||
print('hash = ' + hash_value)
|
||||
if hash_value != pwd:
|
||||
print('argv verify failed!')
|
||||
sys.exit(-2)
|
||||
|
||||
if client_factory is None:
|
||||
client_factory = create_vault_client
|
||||
if publish is None:
|
||||
publish = run_publish
|
||||
|
||||
client = client_factory(url=VAULT_ADDR, token=VAULT_TOKEN)
|
||||
|
||||
if client.is_authenticated():
|
||||
secret = read_switch_bundle(client, vault_path, vault_mount_point)
|
||||
switch_bundle = secret['data']['data']['enable']
|
||||
print(switch_bundle)
|
||||
if '1' != switch_bundle:
|
||||
print('script exit, switchBundle status is ' + switch_bundle)
|
||||
sys.exit(-999)
|
||||
else:
|
||||
print('running script failed!')
|
||||
sys.exit(-1000)
|
||||
|
||||
print('start running script...')
|
||||
publish(proj_dir, OSS_PATH_CONFIG[env][cat], REGION_CONFIG[env], PROFILE_CONFIG[env][cat])
|
||||
Reference in New Issue
Block a user