From 5136794741f3253844f634b0078fbe503b183edc Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Sun, 16 Jul 2023 19:38:32 +0800 Subject: [PATCH] #modify package maker program --- .gitignore | 3 +- .vscodeignore | 22 +++--- README.md | 23 +++++- package.json | 2 +- script/build.bat | 21 ++++++ script/command/make_package.py | 114 +++++++++++++++++++++++++++++ script/test.bat | 13 ++++ src/test/user/Hardware/src/hello.v | 5 +- tsconfig.json | 2 +- vsixmake.js | 54 -------------- webpack.config.js | 2 +- 11 files changed, 190 insertions(+), 71 deletions(-) create mode 100644 script/build.bat create mode 100644 script/command/make_package.py create mode 100644 script/test.bat delete mode 100644 vsixmake.js diff --git a/.gitignore b/.gitignore index 40fd2b5..21f64e3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ node_modules .vscode-test/ *.vsix parser_stuck.v -**/*.wasm \ No newline at end of file +**/*.wasm +out-js/ \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore index 0a5eb9f..252fec8 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,17 +1,19 @@ .vscode/** -.vscode-test/** -test/** .gitignore +**/.gitignore .git -.yarnrc -vsc-extension-quickstart.md -**/jsconfig.json **/*.map -**/.eslintrc.json -dist/**/*.map +.eslintrc.json +dist webpack.config.js node_modules -out1/** -vsixmake.js +out-js +src script -CHANGELOG.md \ No newline at end of file +resources/**/*.js +resources/**/*.d.ts +resources/**/*.wasm +vsixmake.js +CHANGELOG.md +README.md +tsconfig.json \ No newline at end of file diff --git a/README.md b/README.md index 9c7e599..59fb4cc 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,27 @@ ![](https://img.shields.io/badge/version-0.3.0-blue) + + +--- + +## Developer + +make pakage: + ```bash -npm i +python script/command/make_package.py ``` -Enter Vscode & F5 \ No newline at end of file +make package.json command title token: + +```bash +python script/command/make_title_token.py +``` + + +translate title token: + +```bash +python script/command/translate_from_en.py +``` \ No newline at end of file diff --git a/package.json b/package.json index b4253b7..f0a32b4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "publisher": "sterben", "homepage": "https://digital-eda.github.io/DIDE-doc-Cn", "version": "0.3.0", - "main": "./out1/extension", + "main": "./out/extension", "icon": "images/DIDE.png", "engines": { "vscode": "^1.72.0" diff --git a/script/build.bat b/script/build.bat new file mode 100644 index 0000000..317bf18 --- /dev/null +++ b/script/build.bat @@ -0,0 +1,21 @@ +@echo off +cls +echo [10%] compile typescript +call tsc -p ./ --outDir out-js + +echo [20%] webpack +call webpack --mode production + +echo collect static resources +mkdir + +echo [30%] remove out-js +if exist out-js ( + rmdir /s /q out-js +) +echo [30%] remove out +if exist out ( + rmdir /s /q out +) + +echo [100%] finish build :D \ No newline at end of file diff --git a/script/command/make_package.py b/script/command/make_package.py new file mode 100644 index 0000000..6c9ad3b --- /dev/null +++ b/script/command/make_package.py @@ -0,0 +1,114 @@ +import os +import shutil +import zipfile +from colorama import Fore, Style +from typing import List, Union +from collections import namedtuple + +Command = namedtuple(typename='Command', field_names=['name', 'cmd']) + +class CommandPipe: + def __init__(self) -> None: + self.pipes: List[Command] = [] + + def add_command(self, name: str, cmd: str): + command = Command(name, cmd) + self.pipes.append(command) + + def run(self): + for i, p in enumerate(self.pipes): + progress = int((i + 1) / len(self.pipes) * 100) + space_prefix = ' ' if progress < 100 else '' + print(Fore.GREEN, f'[{space_prefix}{progress}%]', Style.RESET_ALL, p.name) + if callable(p.cmd): + p.cmd() + elif isinstance(p.cmd, str): + os.system(p.cmd) + print('Done! :D') + + +def remove_folder(name: str): + if os.path.exists(name): + shutil.rmtree(name) + +def copy_dir(src, dist): + if os.path.exists(dist): + shutil.rmtree(dist) + shutil.copytree(src, dist) + +def copy_file(src, dist): + if os.path.exists(dist): + os.remove(dist) + dirname = os.path.dirname(dist) + if not os.path.exists(dirname): + os.makedirs(dirname) + shutil.copyfile(src, dist) + +def modify_vsix(): + vsix_filter = filter(lambda file: file.endswith('.vsix'), os.listdir('.')) + vsix_file = list(vsix_filter) + if len(vsix_file) == 0: + print(Fore.RED, 'no .vsix is detected', Style.RESET_ALL) + exit() + vsix_path = vsix_file[0] + if not os.path.exists('dist'): + os.mkdir('dist') + + dist_path = os.path.join('dist', vsix_path.replace('.vsix', '.zip')) + shutil.move(vsix_path, dist_path) + + extract_folder = os.path.join('dist', 'digital-ide-temp') + with zipfile.ZipFile(dist_path, 'r') as zip_ref: + zip_ref.extractall(extract_folder) + + os.remove(dist_path) + + # move public + copy_dir('./resources/public', os.path.join(extract_folder, 'extension', 'resources', 'public')) + + # move wasm + copy_dir('./resources/netlist/resources/kernel', os.path.join(extract_folder, 'extension', 'resources', 'kernel')) + copy_dir('./resources/fsm/resources/tree-sitter', os.path.join(extract_folder, 'extension', 'resources', 'tree-sitter')) + copy_file('./resources/hdlParser/parser.wasm', os.path.join(extract_folder, 'extension', 'out', 'parser.wasm')) + + + # webview + copy_dir('./resources/fsm/view', os.path.join(extract_folder, 'extension', 'resources', 'fsm', 'view')) + copy_dir('./resources/netlist/view', os.path.join(extract_folder, 'extension', 'resources', 'netlist', 'view')) + + + # remake + target_path = os.path.join('dist', vsix_path) + zip_dir(extract_folder, target_path) + + + +def zip_dir(dirpath, outFullName): + zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED) + for path, _, filenames in os.walk(dirpath): + fpath = path.replace(dirpath, '') + for filename in filenames: + zip.write(os.path.join(path, filename), os.path.join(fpath, filename)) + zip.close() + +def install_extension(): + vsix_filter = filter(lambda file: file.endswith('.vsix'), os.listdir('dist')) + vsix_files = list(vsix_filter) + if len(vsix_files) == 0: + print(Fore.RED, 'no .vsix is detected in dist', Style.RESET_ALL) + exit() + + vsix_path = os.path.join('dist', vsix_files[0]) + os.system('code --install-extension ' + vsix_path) + +pipe = CommandPipe() +pipe.add_command('uninstall original extension', 'code --uninstall-extension sterben.digital-ide') +pipe.add_command('compile typescript', 'tsc -p ./ --outDir out-js') +pipe.add_command('webpack', 'webpack --mode production') +pipe.add_command('make vsix installer', 'vsce package') +pipe.add_command('modify vsix installer', lambda : modify_vsix()) +pipe.add_command('remove out-js', lambda : remove_folder('out-js')) +pipe.add_command('remove out', lambda : remove_folder('out')) +pipe.add_command('install', lambda : install_extension()) + +pipe.run() \ No newline at end of file diff --git a/script/test.bat b/script/test.bat new file mode 100644 index 0000000..5f54b00 --- /dev/null +++ b/script/test.bat @@ -0,0 +1,13 @@ +@echo off + +set production_folder=dist + +@REM important static or config + + +if not exist %production_folder% ( + mkdir %production_folder% +) + +echo vsce package +call vsce package diff --git a/src/test/user/Hardware/src/hello.v b/src/test/user/Hardware/src/hello.v index 9198e12..c96ec27 100644 --- a/src/test/user/Hardware/src/hello.v +++ b/src/test/user/Hardware/src/hello.v @@ -8,6 +8,9 @@ module mux2to1( ); + + + assign outp = sel == 1'b0 ? a : b; - + endmodule diff --git a/tsconfig.json b/tsconfig.json index 607df42..e8f8126 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "module": "commonjs", "target": "ES2020", - "outDir": "out1", + "outDir": "out-js", "skipLibCheck": true, "lib": [ "ES2020" diff --git a/vsixmake.js b/vsixmake.js deleted file mode 100644 index 79aeb57..0000000 --- a/vsixmake.js +++ /dev/null @@ -1,54 +0,0 @@ -const { execSync } = require('child_process'); -const fs = require('fs'); -const fspath = require('path'); - -const PACKAGE_PATH = './package.json'; -const SAVE_FOLDER = 'dist'; -const WEBPACK_OUT_FOLDER = 'out'; - -function readJSON(path) { - const context = fs.readFileSync(path, 'utf-8'); - return JSON.parse(context); -} - - -function writeJSON(path, obj) { - const jsonString = JSON.stringify(obj, null, '\t'); - fs.writeFileSync(path, jsonString); -} - -function changeMain(path) { - const packageJS = readJSON(PACKAGE_PATH); - packageJS.main = path; - writeJSON(PACKAGE_PATH, packageJS); -} - -function findVsix() { - for (const file of fs.readdirSync(__dirname)) { - if (file.endsWith('.vsix') && file.includes('digital-ide')) { - return file; - } - } - return null; -} - -if (!fs.existsSync(SAVE_FOLDER)) { - fs.mkdirSync(SAVE_FOLDER); -} - -changeMain('./out/extension'); -execSync('vsce package'); -changeMain('./src/extension'); - -// remove orginal digital ide -execSync('code --uninstall-extension sterben.digital-ide'); - -const vsix = findVsix(); -const targetPath = fspath.join(SAVE_FOLDER, vsix); -fs.copyFileSync(vsix, targetPath); -fs.unlinkSync(vsix); -fs.rm(WEBPACK_OUT_FOLDER, { recursive: true, force: true }, () => {}); - -const vsixPath = fspath.join(SAVE_FOLDER, vsix); -// install new one -execSync('code --install-extension ' + vsixPath); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 2422212..6e79297 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,7 +2,7 @@ const path = require('path'); const config = { target: 'node', - entry: './out1/extension.js', + entry: './out-js/extension.js', output: { path: path.resolve(__dirname, 'out'), filename: 'extension.js',