import pathlib, subprocess, json, os, sys
root = pathlib.Path(sys.argv[1]).resolve()
out = pathlib.Path(sys.argv[2]).resolve()
out.mkdir(parents=True, exist_ok=False)
(out/'tmp').mkdir()
os.environ['TMPDIR']=str(out/'tmp')
node_exec=subprocess.check_output(['node', '-p', 'process.execPath'], cwd=root, text=True).strip()
def run(label, args, cwd=root, env=None):
    with (out / (label + '.log')).open('w') as f:
        f.write('$ ' + ' '.join(args) + '\n'); f.flush()
        command = [node_exec, *args[1:]] if args[0] == 'node' else args
        p = subprocess.run(command, cwd=cwd, stdout=f, stderr=subprocess.STDOUT, env=env)
        f.write('\nEXIT CODE: ' + str(p.returncode) + '\n')
    print(label, p.returncode, flush=True)
    return p.returncode
run('environment', ['node', '--version'])
run('commit', ['git', 'rev-parse', 'HEAD'])
run('clean-build', ['node', 'scripts/build-desktop-artifact.ts', '--platform', 'linux', '--target', 'dir', '--arch', 'x64', '--verbose'])
def probe(label, asar):
    dest=out/(label+'-extracted')
    run(label+'-extract', ['node', '-e', "require('./scripts/node_modules/@electron/asar/lib/asar.js').extractAll(process.argv[1],process.argv[2])", str(asar), str(dest)])
    env=dict(os.environ, NODE_PATH='')
    run(label+'-probe', ['node', '--no-global-search-paths', 'apps/server/dist/bin.mjs', '--version'], cwd=dest, env=env)
probe('clean', root/'release/linux-unpacked/resources/app.asar')
manifest=root/'apps/server/package.json' 
original=manifest.read_text()
try:
    data=json.loads(original)
    del data['dependencies']['undici']
    manifest.write_text(json.dumps(data, indent=2)+'\n')
    run('missing-undici-build', ['node', 'scripts/build-desktop-artifact.ts', '--platform', 'linux', '--target', 'dir', '--arch', 'x64', '--skip-build', '--verbose', '--keep-stage'])
finally:
    manifest.write_text(original)

asars=list((out/'tmp').glob('t3code-desktop-linux-stage-*/app/dist/linux-unpacked/resources/app.asar'))
if len(asars)!=1: raise RuntimeError('Expected exactly one retained packaged app')
probe('missing-undici', asars[0])
