mirror of https://github.com/microsoft/WSL
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
# pip install click
|
|
# python gh-release-server.py 2.0.0 --msi ..\..\bin\x64\Debug\wsl.msi --msix ..\..\bin\x64\Debug\installer.msix
|
|
|
|
import click
|
|
from http.server import SimpleHTTPRequestHandler, HTTPServer
|
|
from http import HTTPStatus
|
|
import socketserver
|
|
import json
|
|
from winreg import *
|
|
|
|
RELEASES_PATH = '/releases'
|
|
MSI_PATH = '/msi'
|
|
MSIX_PATH = '/msix'
|
|
|
|
@click.command()
|
|
@click.argument('version', required=True)
|
|
@click.option('--msi', default=None)
|
|
@click.option('--port', default=8000)
|
|
@click.option('--msix', default=None)
|
|
@click.option('--pre-release', default=False, is_flag=True)
|
|
def main(port: int, version: str, msi: str, msix: str, pre_release: bool):
|
|
lxss_key = OpenKeyEx(HKEY_LOCAL_MACHINE, '''SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss''', 0, KEY_SET_VALUE)
|
|
|
|
assets = []
|
|
if msix:
|
|
assets.append({'url': f'http://127.0.0.1:{port}{MSIX_PATH}', 'id': 0, 'name': 'wsl.msixbundle'})
|
|
|
|
if msi:
|
|
assets.append({'url': f'http://127.0.0.1:{port}{MSI_PATH}', 'id': 0, 'name': 'wsl.x64.msi'})
|
|
|
|
release_json = {'name': version, 'created_at': '2023-06-14T16:56:30Z', 'assets': assets}
|
|
release_response = json.dumps([release_json] if pre_release else release_json).encode()
|
|
|
|
class ReleaseRequestHandler(SimpleHTTPRequestHandler):
|
|
def translate_path(self, path):
|
|
return path
|
|
|
|
def do_GET(self):
|
|
print(self.path)
|
|
|
|
if self.path == RELEASES_PATH:
|
|
self.send_response(HTTPStatus.OK)
|
|
self.send_header("Content-type", 'application/octet-stream')
|
|
self.send_header("Content-Length", str(len(release_response)))
|
|
self.end_headers()
|
|
|
|
self.wfile.write(release_response)
|
|
elif self.path == MSI_PATH:
|
|
self.path = msi
|
|
file = self.send_head()
|
|
if file is None:
|
|
raise RuntimeError(f'Failed to open {msi}')
|
|
|
|
self.copyfile(file, self.wfile)
|
|
elif self.path == MSIX_PATH:
|
|
self.path = msix
|
|
file = self.send_head()
|
|
if file is None:
|
|
raise RuntimeError(f'Failed to open {msix}')
|
|
|
|
self.copyfile(file, self.wfile)
|
|
else:
|
|
print(f'Received unexpected request: {self.path}')
|
|
|
|
SetValueEx(lxss_key, 'GitHubUrlOverride', 0, REG_SZ, f'http://127.0.0.1:{port}{RELEASES_PATH}')
|
|
|
|
try:
|
|
|
|
with socketserver.TCPServer(("127.0.0.1", port), ReleaseRequestHandler) as server:
|
|
print(f'Serving on port {port}')
|
|
server.serve_forever()
|
|
finally:
|
|
DeleteValue(lxss_key, 'GitHubUrlOverride')
|
|
|
|
if __name__ == '__main__':
|
|
main() |