grasp/extension/build
Dima Gerasimov 60bdc0ae15 more attempts for v3 and v2 simultaneous support
so far v3 works in firefox
but doesn't work with chrome, for some reason it refuses to import the webpack chunk
2022-12-30 04:01:09 +00:00

118 lines
3.6 KiB
Python
Executable file

#!/usr/bin/env python3
import argparse
import os
from subprocess import check_call
from pathlib import Path
# right, specifying id in manifest doesn't seem to work
# AMO responds with: Server response: Duplicate add-on ID found. (status: 400)
IDS = {
'firefox' : '{37e42980-a7c9-473c-96d5-13f18e0efc74}',
'chrome' : 'ohhbcfjmnbmgkajljopdjcaokbpgbgfa',
}
TARGETS = [
'chrome',
'firefox',
]
def main():
p = argparse.ArgumentParser()
p.add_argument('--release', action='store_true', help="Use release flavor of build")
p.add_argument('--watch' , action='store_true')
p.add_argument('--lint' , action='store_true')
p.add_argument('--publish', action='store_true', help="Publish on chrome web store/addons.mozilla.org")
tg = p.add_mutually_exclusive_group(required=True)
tg.add_argument('--target', type=str, choices=TARGETS)
for b in TARGETS:
tg.add_argument('--' + b, action='store_const', const=b, dest='target')
args = p.parse_args()
target = args.target
assert target is not None
base_ext_dir = Path(__file__).absolute().parent / 'dist'
ext_dir = (base_ext_dir / target).resolve() # webext can't into symlinks
# sadly no way to specify zip name in the regex..
artifacts_dir = (base_ext_dir / 'artifacts' / target).resolve()
def webext(*args, **kwargs):
check_call([
'npm', 'run', 'web-ext',
'--',
'--source-dir' , ext_dir,
'--artifacts-dir', artifacts_dir,
*args,
], **kwargs)
env = {
'TARGET' : target,
'RELEASE': 'YES' if args.release else 'NO',
'PUBLISH': 'YES' if args.publish else 'NO',
'EXT_ID' : IDS[target],
**os.environ,
}
if args.watch:
check_call([
'npm', 'run', 'watch',
], env=env, cwd=str(Path(__file__).absolute().parent))
# TODO exec instead?
return
check_call([
'npm', 'run', 'build',
], env=env, cwd=str(Path(__file__).absolute().parent))
if args.lint:
# TODO --self-hosted
# TODO warnings as errors??
webext('lint')
# TODO move somewhere more appropriate..
webext('build', '-o') # -o overwrites existing artifact
if args.release:
assert args.lint # TODO not sure..
def firefox_release_args():
from firefox_dev_secrets import API_KEY, API_SECRET
return [
'--artifacts-dir', str(artifacts_dir),
'--api-key' , API_KEY,
'--api-secret' , API_SECRET,
'--id' , IDS[target],
]
if args.publish:
assert args.release
if 'firefox' in target:
check_call([
'npm', 'run', 'release:amo',
'--',
'--channel', 'listed',
'--source-dir', str(ext_dir),
*firefox_release_args(),
])
elif target == 'chrome':
from chrome_dev_secrets import CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN
check_call([
'npm', 'run', 'release:cws',
'--',
'upload',
# '--auto-publish',
'--source' , str(ext_dir),
'--client-id' , CLIENT_ID,
'--client-secret' , CLIENT_SECRET,
'--refresh--token', REFRESH_TOKEN,
'--extension-id' , IDS[target],
# TODO trusted testers?
])
else:
raise RuntimeError("{target} is not supported for publishing yet".format(target=target))
if __name__ == '__main__':
main()