From 7ebeee43ceedcc7e94ac760ade5b580ab74217a5 Mon Sep 17 00:00:00 2001 From: Louis Date: Thu, 27 Jun 2024 17:00:54 +0700 Subject: [PATCH 1/3] feat/cpuinfo-as-node-module-new-build-scripts --- .gitignore | 8 +- cortex-js/cpuinfo/bin/cpuinfo | Bin 24008 -> 0 bytes cortex-js/cpuinfo/bin/cpuinfo.exe | Bin 223416 -> 0 bytes cortex-js/cpuinfo/binding.gyp | 10 + cortex-js/cpuinfo/index.d.ts | 10 + cortex-js/cpuinfo/index.js | 1 + cortex-js/cpuinfo/package.json | 38 +++ cortex-js/cpuinfo/src/cpuinfo.cpp | 276 ++++++++++-------- cortex-js/cpuinfo/tsconfig.json | 28 ++ cortex-js/package.json | 24 +- .../infrastructure/commanders/init.command.ts | 3 +- .../commanders/test/models.command.spec.ts | 1 - .../commanders/usecases/init.cli.usecases.ts | 39 +-- 13 files changed, 279 insertions(+), 159 deletions(-) delete mode 100644 cortex-js/cpuinfo/bin/cpuinfo delete mode 100644 cortex-js/cpuinfo/bin/cpuinfo.exe create mode 100644 cortex-js/cpuinfo/binding.gyp create mode 100644 cortex-js/cpuinfo/index.d.ts create mode 100644 cortex-js/cpuinfo/index.js create mode 100644 cortex-js/cpuinfo/package.json create mode 100644 cortex-js/cpuinfo/tsconfig.json diff --git a/.gitignore b/.gitignore index 154cd292..3f5bb546 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,10 @@ cortex.log api.log prism.log api.json -openai-python/* \ No newline at end of file +openai-python/* +build +cortex-js/cortex.exe +cortex-js/package-lock.json +.vscode +cortex-js/command +cortex-js/src/infrastructure/commanders/test/test_data diff --git a/cortex-js/cpuinfo/bin/cpuinfo b/cortex-js/cpuinfo/bin/cpuinfo deleted file mode 100644 index a4e172c3416f0a7c414d4d24ffbd07a65abd105d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24008 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Ś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 z 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 +export type InstructionSet = 'AVX' | 'AVX2' | 'AVX512'; // Add more as needed later +declare module "cpuinfo" { + declare const cpuInfo: { + cpuInfo: () => InstructionSet[]; + } +} \ No newline at end of file diff --git a/cortex-js/cpuinfo/index.js b/cortex-js/cpuinfo/index.js new file mode 100644 index 00000000..2018ed99 --- /dev/null +++ b/cortex-js/cpuinfo/index.js @@ -0,0 +1 @@ +module.exports = exports = { cpuInfo: require('./build/Release/cpuinfo.node') } diff --git a/cortex-js/cpuinfo/package.json b/cortex-js/cpuinfo/package.json new file mode 100644 index 00000000..fc37fc89 --- /dev/null +++ b/cortex-js/cpuinfo/package.json @@ -0,0 +1,38 @@ +{ + "name": "cpuinfo", + "version": "1.0.0", + "description": "Get CPU instructions", + "main": "index.js", + "types": "./index.d.ts", + "scripts": { + "install": "prebuild-install -r napi || node-gyp rebuild" + }, + "author": "", + "license": "ISC", + "gypfile": true, + "binary": { + "napi_versions": [ + 3, + 6 + ] + }, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1" + }, + "devDependencies": { + "@types/node": "^20.14.9", + "typescript": "^5.5.3" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "files": [ + "binding.gyp", + "deps/", + "*.js", + "*.d.ts", + "src/" + ] +} diff --git a/cortex-js/cpuinfo/src/cpuinfo.cpp b/cortex-js/cpuinfo/src/cpuinfo.cpp index 9ba181ca..b0b947c1 100644 --- a/cortex-js/cpuinfo/src/cpuinfo.cpp +++ b/cortex-js/cpuinfo/src/cpuinfo.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -5,85 +6,88 @@ #ifdef _WIN32 #include #include -typedef unsigned __int32 uint32_t; +typedef unsigned __int32 uint32_t; #else #include #endif using namespace std; +#if defined(_WIN32) || defined(LINUX) #define MAX_INTEL_TOP_LVL 4 -class CPUID { +class CPUID +{ uint32_t regs[4]; - public: - explicit CPUID(unsigned funcId, unsigned subFuncId) { +public: + explicit CPUID(unsigned funcId, unsigned subFuncId) + { #ifdef _WIN32 __cpuidex((int *)regs, (int)funcId, (int)subFuncId); #else - asm volatile - ("cpuid" : "=a" (regs[0]), "=b" (regs[1]), "=c" (regs[2]), "=d" (regs[3]) - : "a" (funcId), "c" (subFuncId)); + asm volatile("cpuid" : "=a"(regs[0]), "=b"(regs[1]), "=c"(regs[2]), "=d"(regs[3]) + : "a"(funcId), "c"(subFuncId)); // ECX is set to zero for CPUID function 4 #endif } - const uint32_t &EAX() const {return regs[0];} - const uint32_t &EBX() const {return regs[1];} - const uint32_t &ECX() const {return regs[2];} - const uint32_t &EDX() const {return regs[3];} + const uint32_t &EAX() const { return regs[0]; } + const uint32_t &EBX() const { return regs[1]; } + const uint32_t &ECX() const { return regs[2]; } + const uint32_t &EDX() const { return regs[3]; } }; -class CPUInfo { - public: - CPUInfo(); - string vendor() const { return mVendorId; } - string model() const { return mModelName; } - int cores() const { return mNumCores; } - float cpuSpeedInMHz() const { return mCPUMHz; } - bool isSSE() const { return mIsSSE; } - bool isSSE2() const { return mIsSSE2; } - bool isSSE3() const { return mIsSSE3; } - bool isSSE41() const { return mIsSSE41; } - bool isSSE42() const { return mIsSSE42; } - bool isAVX() const { return mIsAVX; } - bool isAVX2() const { return mIsAVX2; } - bool isAVX512() const { return mIsAVX512; } - bool isHyperThreaded() const { return mIsHTT; } - int logicalCpus() const { return mNumLogCpus; } - - private: - // Bit positions for data extractions - static const uint32_t SSE_POS = 0x02000000; - static const uint32_t SSE2_POS = 0x04000000; - static const uint32_t SSE3_POS = 0x00000001; - static const uint32_t SSE41_POS = 0x00080000; - static const uint32_t SSE42_POS = 0x00100000; - static const uint32_t AVX_POS = 0x10000000; - static const uint32_t AVX2_POS = 0x00000020; - static const uint32_t AVX512_POS = 0x00010000; // AVX-512F bit in EBX from CPUID function 7 - static const uint32_t LVL_NUM = 0x000000FF; - static const uint32_t LVL_TYPE = 0x0000FF00; - static const uint32_t LVL_CORES = 0x0000FFFF; - - // Attributes - string mVendorId; - string mModelName; - int mNumSMT; - int mNumCores; - int mNumLogCpus; - float mCPUMHz; - bool mIsHTT; - bool mIsSSE; - bool mIsSSE2; - bool mIsSSE3; - bool mIsSSE41; - bool mIsSSE42; - bool mIsAVX; - bool mIsAVX2; - bool mIsAVX512; +class CPUInfo +{ +public: + CPUInfo(); + string vendor() const { return mVendorId; } + string model() const { return mModelName; } + int cores() const { return mNumCores; } + float cpuSpeedInMHz() const { return mCPUMHz; } + bool isSSE() const { return mIsSSE; } + bool isSSE2() const { return mIsSSE2; } + bool isSSE3() const { return mIsSSE3; } + bool isSSE41() const { return mIsSSE41; } + bool isSSE42() const { return mIsSSE42; } + bool isAVX() const { return mIsAVX; } + bool isAVX2() const { return mIsAVX2; } + bool isAVX512() const { return mIsAVX512; } + bool isHyperThreaded() const { return mIsHTT; } + int logicalCpus() const { return mNumLogCpus; } + +private: + // Bit positions for data extractions + static const uint32_t SSE_POS = 0x02000000; + static const uint32_t SSE2_POS = 0x04000000; + static const uint32_t SSE3_POS = 0x00000001; + static const uint32_t SSE41_POS = 0x00080000; + static const uint32_t SSE42_POS = 0x00100000; + static const uint32_t AVX_POS = 0x10000000; + static const uint32_t AVX2_POS = 0x00000020; + static const uint32_t AVX512_POS = 0x00010000; // AVX-512F bit in EBX from CPUID function 7 + static const uint32_t LVL_NUM = 0x000000FF; + static const uint32_t LVL_TYPE = 0x0000FF00; + static const uint32_t LVL_CORES = 0x0000FFFF; + + // Attributes + string mVendorId; + string mModelName; + int mNumSMT; + int mNumCores; + int mNumLogCpus; + float mCPUMHz; + bool mIsHTT; + bool mIsSSE; + bool mIsSSE2; + bool mIsSSE3; + bool mIsSSE41; + bool mIsSSE42; + bool mIsAVX; + bool mIsAVX2; + bool mIsAVX512; }; CPUInfo::CPUInfo() @@ -96,99 +100,139 @@ CPUInfo::CPUInfo() mVendorId += string((const char *)&cpuID0.ECX(), 4); // Get SSE instructions availability CPUID cpuID1(1, 0); - mIsHTT = cpuID1.EDX() & AVX_POS; - mIsSSE = cpuID1.EDX() & SSE_POS; - mIsSSE2 = cpuID1.EDX() & SSE2_POS; - mIsSSE3 = cpuID1.ECX() & SSE3_POS; + mIsHTT = cpuID1.EDX() & AVX_POS; + mIsSSE = cpuID1.EDX() & SSE_POS; + mIsSSE2 = cpuID1.EDX() & SSE2_POS; + mIsSSE3 = cpuID1.ECX() & SSE3_POS; mIsSSE41 = cpuID1.ECX() & SSE41_POS; mIsSSE42 = cpuID1.ECX() & SSE41_POS; - mIsAVX = cpuID1.ECX() & AVX_POS; + mIsAVX = cpuID1.ECX() & AVX_POS; // Get AVX2 and AVX512 instructions availability CPUID cpuID7(7, 0); - mIsAVX2 = cpuID7.EBX() & AVX2_POS; + mIsAVX2 = cpuID7.EBX() & AVX2_POS; mIsAVX512 = cpuID7.EBX() & AVX512_POS; string upVId = mVendorId; - for_each(upVId.begin(), upVId.end(), [](char& in) { in = ::toupper(in); }); + for_each(upVId.begin(), upVId.end(), [](char &in) + { in = ::toupper(in); }); // Get num of cores - if (upVId.find("INTEL") != std::string::npos) { - if(HFS >= 11) { - for (int lvl=0; lvl>8; - switch(currLevel) { - case 0x01: mNumSMT = LVL_CORES & cpuID4.EBX(); break; - case 0x02: mNumLogCpus = LVL_CORES & cpuID4.EBX(); break; - default: break; - } + if (upVId.find("INTEL") != std::string::npos) + { + if (HFS >= 11) + { + for (int lvl = 0; lvl < MAX_INTEL_TOP_LVL; ++lvl) + { + CPUID cpuID4(0x0B, lvl); + uint32_t currLevel = (LVL_TYPE & cpuID4.ECX()) >> 8; + switch (currLevel) + { + case 0x01: + mNumSMT = LVL_CORES & cpuID4.EBX(); + break; + case 0x02: + mNumLogCpus = LVL_CORES & cpuID4.EBX(); + break; + default: + break; + } } - mNumCores = mNumLogCpus/mNumSMT; - } else { - if (HFS>=1) { + mNumCores = mNumLogCpus / mNumSMT; + } + else + { + if (HFS >= 1) + { mNumLogCpus = (cpuID1.EBX() >> 16) & 0xFF; - if (HFS>=4) { + if (HFS >= 4) + { mNumCores = 1 + (CPUID(4, 0).EAX() >> 26) & 0x3F; } } - if (mIsHTT) { - if (!(mNumCores>1)) { + if (mIsHTT) + { + if (!(mNumCores > 1)) + { mNumCores = 1; mNumLogCpus = (mNumLogCpus >= 2 ? mNumLogCpus : 2); } - } else { + } + else + { mNumCores = mNumLogCpus = 1; } } - } else if (upVId.find("AMD") != std::string::npos) { - if (HFS>=1) { + } + else if (upVId.find("AMD") != std::string::npos) + { + if (HFS >= 1) + { mNumLogCpus = (cpuID1.EBX() >> 16) & 0xFF; - if (CPUID(0x80000000, 0).EAX() >=8) { + if (CPUID(0x80000000, 0).EAX() >= 8) + { mNumCores = 1 + (CPUID(0x80000008, 0).ECX() & 0xFF); } } - if (mIsHTT) { - if (!(mNumCores>1)) { + if (mIsHTT) + { + if (!(mNumCores > 1)) + { mNumCores = 1; mNumLogCpus = (mNumLogCpus >= 2 ? mNumLogCpus : 2); } - } else { + } + else + { mNumCores = mNumLogCpus = 1; } - } else { - cout<< "Unexpected vendor id" </$1", "@commanders/(.*)$": "/../src/infrastructure/commanders/$1" } + }, + "pkg": { + "scripts": "command/**/*.js", + "assets": ["command/*.node", "**/package.json", "node_modules/axios/**/*", "cpuinfo/**/*"], + "outputPath": "dist" } } diff --git a/cortex-js/src/infrastructure/commanders/init.command.ts b/cortex-js/src/infrastructure/commanders/init.command.ts index 38cde473..30a80143 100644 --- a/cortex-js/src/infrastructure/commanders/init.command.ts +++ b/cortex-js/src/infrastructure/commanders/init.command.ts @@ -38,7 +38,7 @@ export class InitCommand extends CommandRunner { if (options?.silent) { const installationOptions = await this.initUsecases.defaultInstallationOptions(); - return this.initUsecases.installEngine(installationOptions); + await this.initUsecases.installEngine(installationOptions); } else { options = await this.inquirerService.ask( 'init-run-mode-questions', @@ -57,6 +57,7 @@ export class InitCommand extends CommandRunner { TelemetrySource.CLI, ); } + console.log('Cortex engines installed successfully!'); } @Option({ diff --git a/cortex-js/src/infrastructure/commanders/test/models.command.spec.ts b/cortex-js/src/infrastructure/commanders/test/models.command.spec.ts index e5434eb1..a40f49dc 100644 --- a/cortex-js/src/infrastructure/commanders/test/models.command.spec.ts +++ b/cortex-js/src/infrastructure/commanders/test/models.command.spec.ts @@ -4,7 +4,6 @@ import { CommandTestFactory } from 'nest-commander-testing'; import { CommandModule } from '@/command.module'; import { join } from 'path'; import { rmSync } from 'fs'; -import { timeout } from '@/infrastructure/commanders/test/helpers.command.spec'; import { FileManagerService } from '@/infrastructure/services/file-manager/file-manager.service'; let commandInstance: TestingModule; diff --git a/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts b/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts index c9e1e701..0297fa0b 100644 --- a/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts +++ b/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts @@ -1,5 +1,5 @@ import { cpSync, createWriteStream, existsSync, readdirSync, rmSync } from 'fs'; -import { delimiter, join } from 'path'; +import { join } from 'path'; import { HttpService } from '@nestjs/axios'; import { Presets, SingleBar } from 'cli-progress'; import decompress from 'decompress'; @@ -9,8 +9,6 @@ import { Injectable } from '@nestjs/common'; import { firstValueFrom } from 'rxjs'; import { FileManagerService } from '@/infrastructure/services/file-manager/file-manager.service'; import { rm } from 'fs/promises'; -import { exec } from 'child_process'; -import { appPath } from '@/utils/app-path'; import { CORTEX_ENGINE_RELEASES_URL, CORTEX_RELEASES_URL, @@ -18,7 +16,8 @@ import { } from '@/infrastructure/constants/cortex'; import { checkNvidiaGPUExist, cudaVersion } from '@/utils/cuda'; import { Engines } from '../types/engine.interface'; -import { checkModelCompatibility } from '@/utils/model-check'; + +import { cpuInfo } from 'cpuinfo'; @Injectable() export class InitCliUsecases { @@ -272,35 +271,9 @@ export class InitCliUsecases { private detectInstructions = (): Promise< 'AVX' | 'AVX2' | 'AVX512' | undefined > => { - return new Promise<'AVX' | 'AVX2' | 'AVX512' | undefined>((res) => { - // Execute the cpuinfo command - - exec( - join( - appPath, - `bin/cpuinfo${process.platform !== 'linux' ? '.exe' : ''}`, - ), - (error, stdout) => { - if (error) { - // If there's an error, it means lscpu is not installed - console.log('CPUInfo is not installed.'); - res('AVX'); - } else { - // If the command executes successfully, parse the output to detect CPU instructions - if (stdout.includes('"AVX512": "true"')) { - console.log('AVX-512 instructions detected.'); - res('AVX512'); - } else if ('"AVX2": "true"') { - console.log('AVX2 instructions detected.'); - res('AVX2'); - } else { - console.log('AVXs instructions detected.'); - res('AVX'); - } - } - }, - ); - }); + const cpuInstruction = cpuInfo.cpuInfo()[0]?? 'AVX' + console.log(cpuInstruction, 'CPU instructions detected'); + return Promise.resolve(cpuInstruction); }; /** From 3d856954ed7a0b6a98079f634471e5c22c950010 Mon Sep 17 00:00:00 2001 From: Hien To Date: Wed, 3 Jul 2024 11:42:00 +0700 Subject: [PATCH 2/3] Update CICD and makefile --- .github/workflows/cortex-build.yml | 2 +- .gitignore | 1 + cortex-js/Makefile | 52 ++++++++++++++++++++++-------- cortex-js/installer.iss | 1 - cortex-js/package.json | 5 ++- 5 files changed, 45 insertions(+), 16 deletions(-) diff --git a/.github/workflows/cortex-build.yml b/.github/workflows/cortex-build.yml index 9b22dc1b..09ecce04 100644 --- a/.github/workflows/cortex-build.yml +++ b/.github/workflows/cortex-build.yml @@ -449,7 +449,7 @@ jobs: command: | cd cortex-js set PATH=%PATH%;%USERPROFILE%\.dotnet\tools - make codesign CODE_SIGN=true AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}" + make codesign-installer CODE_SIGN=true CORTEX_VERSION="0.${{ needs.create-draft-release.outputs.version }}" AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}" name: Code Signing Windows if: runner.os == 'Windows' diff --git a/.gitignore b/.gitignore index 3f5bb546..d3c4ef22 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ dist *.lock node_modules .turbo +package-lock.json # CI - Test - Coverage cortex.log diff --git a/cortex-js/Makefile b/cortex-js/Makefile index aa0c3062..7a1fa625 100644 --- a/cortex-js/Makefile +++ b/cortex-js/Makefile @@ -5,26 +5,36 @@ AZURE_TENANT_ID ?= xxxx AZURE_CLIENT_SECRET ?= xxxx AZURE_CERT_NAME ?= xxxx DEVELOPER_ID ?= xxxx +CORTEX_EXE_IN ?= "dist/cortexso-win.exe" +CORTEX_EXE_OUT ?= "cortex.exe" +CORTEX_VERSION ?= "0.0.0.1" -postbundle: -ifeq ($(RUN_TESTS),false) - @echo "Skipping tests" +update-app-info: +ifeq ($(OS),Windows_NT) + @powershell -Command 'npx resedit --in $(CORTEX_EXE_IN) --out $(CORTEX_EXE_OUT) --icon "1,favicon.ico" --no-grow --company-name "Homebrew Computer Pte Ltd" --file-description "cortex cli" --file-version "$(CORTEX_VERSION)" --internal-name "cortex" --product-name "cortex" --product-version "$(CORTEX_VERSION)"' +else ifeq ($(shell uname -s),Linux) + @cp ./dist/cortexso-linux ./cortex +else + @cp ./dist/cortexso-macos ./cortex +endif + +codesign-binary: update-app-info +ifeq ($(CODE_SIGN),false) + @echo "Skipping Code Sign" @exit 0 endif + ifeq ($(OS),Windows_NT) - @powershell -Command "7z a -ttar temp.tar cortex.exe; 7z a -tgzip cortex.tar.gz temp.tar;" - @powershell -Command "7z a -ttar temp2.tar setup.exe; 7z a -tgzip cortex-installer.tar.gz temp2.tar;" + @powershell -Command "dotnet tool install --global AzureSignTool;" + @powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex-js\cortex.exe";' else ifeq ($(shell uname -s),Linux) - @chmod +x cortex; - tar -czvf cortex.tar.gz cortex; + @echo "Skipping Code Sign for linux" + @exit 0 else - @chmod +x cortex; - tar -czvf cortex.tar.gz cortex; - tar -czvf cortex-installer.tar.gz cortex-installer.pkg; + find "cortex" -type f -exec codesign --force -s "$(DEVELOPER_ID)" --options=runtime {} \; endif - -codesign: +codesign-installer: codesign-binary ifeq ($(CODE_SIGN),false) @echo "Skipping Code Sign" @exit 0 @@ -32,11 +42,27 @@ endif ifeq ($(OS),Windows_NT) @powershell -Command "dotnet tool install --global AzureSignTool;" - @powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex-js\cortex.exe";' @powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex-js\setup.exe";' else ifeq ($(shell uname -s),Linux) @echo "Skipping Code Sign for linux" @exit 0 else find "cortex" -type f -exec codesign --force -s "$(DEVELOPER_ID)" --options=runtime {} \; +endif + +postbundle: +ifeq ($(RUN_TESTS),false) + @echo "Skipping tests" + @exit 0 +endif +ifeq ($(OS),Windows_NT) + @powershell -Command "7z a -ttar temp.tar cortex.exe; 7z a -tgzip cortex.tar.gz temp.tar;" + @powershell -Command "7z a -ttar temp2.tar setup.exe; 7z a -tgzip cortex-installer.tar.gz temp2.tar;" +else ifeq ($(shell uname -s),Linux) + @chmod +x cortex; + tar -czvf cortex.tar.gz cortex; +else + @chmod +x cortex; + tar -czvf cortex.tar.gz cortex; + tar -czvf cortex-installer.tar.gz cortex-installer.pkg; endif \ No newline at end of file diff --git a/cortex-js/installer.iss b/cortex-js/installer.iss index 96fc8f4d..b5208848 100644 --- a/cortex-js/installer.iss +++ b/cortex-js/installer.iss @@ -26,7 +26,6 @@ Name: "{group}\Cortex"; Filename: "{app}\cortex.exe" ; Define the run section to execute the application after installation [Run] Filename: "cmd"; Parameters: "/c setx PATH ""%PATH%;{app}"""; StatusMsg: "Updating system PATH environment variable..."; Flags: runhidden -Filename: "cmd"; Parameters: "/c cortex init"; StatusMsg: "Initializing Cortex..."; Flags: runhidden waituntilterminated Filename: "{app}\cortex.exe"; Description: "{cm:LaunchProgram,Cortex}"; Flags: nowait postinstall skipifsilent ; Define the tasks section (optional, for additional tasks like creating desktop icons) diff --git a/cortex-js/package.json b/cortex-js/package.json index de7f104b..405ece44 100644 --- a/cortex-js/package.json +++ b/cortex-js/package.json @@ -101,7 +101,10 @@ "ts-jest": "^29.1.0", "ts-loader": "^9.4.3", "tsconfig-paths": "^4.2.0", - "typescript": "^5.1.3" + "typescript": "^5.1.3", + "patch-package": "^8.0.0", + "@yao-pkg/pkg": "^5.12.0", + "resedit-cli": "^2.0.0" }, "resolutions": { "ajv": "8.15.0", From e9935cd087ca61df6745fbf45470ab1e78b0d40e Mon Sep 17 00:00:00 2001 From: Hien To Date: Wed, 3 Jul 2024 11:53:41 +0700 Subject: [PATCH 3/3] Fix issue macos pip setuptools --- .github/workflows/cortex-build.yml | 31 ++++++++++++++++++++++++++++-- cortex-js/Makefile | 6 +++--- cortex-js/package.json | 3 ++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cortex-build.yml b/.github/workflows/cortex-build.yml index 09ecce04..2ba76a72 100644 --- a/.github/workflows/cortex-build.yml +++ b/.github/workflows/cortex-build.yml @@ -392,7 +392,14 @@ jobs: node-version: "20.x" registry-url: "https://registry.npmjs.org" - - run: yarn install && yarn build && yarn build:binary + - uses: actions/setup-python@v3 + with: + python-version: "3.10" + + - run: pip3 install --upgrade setuptools + if: runner.os == 'macOS' + + - run: yarn install && yarn build:binary working-directory: ./cortex-js - name: Get Cer for code signing @@ -408,11 +415,16 @@ jobs: p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} + - name: update app info + run: | + cd cortex-js + make update-app-info + - name: Code Signing macOS if: runner.os == 'macOS' run: | cd cortex-js - make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" + make codesign-binary CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" - name: Create MacOS PKG Installer if: runner.os == 'macOS' @@ -421,6 +433,7 @@ jobs: mkdir installer cp cortex installer/cortex pkgbuild --identifier ai.cortex.pkg --install-location ./usr/local/bin/ --root ./installer cortex-installer.pkg + make codesign-installer CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" - name: Create MacOS PKG Installer if: runner.os == 'Linux' @@ -432,6 +445,20 @@ jobs: cp cortex cortexso/usr/local/bin/cortex dpkg-deb --build cortexso + - uses: nick-fields/retry@v3 + with: + continue_on_error: true + retry_wait_seconds: 10 + timeout_minutes: 10 + max_attempts: 3 + shell: cmd + command: | + cd cortex-js + set PATH=%PATH%;%USERPROFILE%\.dotnet\tools + make codesign-binary CODE_SIGN=true CORTEX_VERSION="0.${{ needs.create-draft-release.outputs.version }}" AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}" + name: Code Signing Windows + if: runner.os == 'Windows' + - name: Compile .ISS to .EXE Installer uses: Minionguyjpro/Inno-Setup-Action@v1.2.2 if: runner.os == 'Windows' diff --git a/cortex-js/Makefile b/cortex-js/Makefile index 7a1fa625..70468c6d 100644 --- a/cortex-js/Makefile +++ b/cortex-js/Makefile @@ -11,14 +11,14 @@ CORTEX_VERSION ?= "0.0.0.1" update-app-info: ifeq ($(OS),Windows_NT) - @powershell -Command 'npx resedit --in $(CORTEX_EXE_IN) --out $(CORTEX_EXE_OUT) --icon "1,favicon.ico" --no-grow --company-name "Homebrew Computer Pte Ltd" --file-description "cortex cli" --file-version "$(CORTEX_VERSION)" --internal-name "cortex" --product-name "cortex" --product-version "$(CORTEX_VERSION)"' + @powershell -Command 'npx resedit --in $(CORTEX_EXE_IN) --out $(CORTEX_EXE_OUT) --icon "1,cortex.ico" --no-grow --company-name "Homebrew Computer Pte Ltd" --file-description "cortex cli" --file-version "$(CORTEX_VERSION)" --internal-name "cortex" --product-name "cortex" --product-version "$(CORTEX_VERSION)"' else ifeq ($(shell uname -s),Linux) @cp ./dist/cortexso-linux ./cortex else @cp ./dist/cortexso-macos ./cortex endif -codesign-binary: update-app-info +codesign-binary: ifeq ($(CODE_SIGN),false) @echo "Skipping Code Sign" @exit 0 @@ -34,7 +34,7 @@ else find "cortex" -type f -exec codesign --force -s "$(DEVELOPER_ID)" --options=runtime {} \; endif -codesign-installer: codesign-binary +codesign-installer: ifeq ($(CODE_SIGN),false) @echo "Skipping Code Sign" @exit 0 diff --git a/cortex-js/package.json b/cortex-js/package.json index 405ece44..a9f21c68 100644 --- a/cortex-js/package.json +++ b/cortex-js/package.json @@ -104,7 +104,8 @@ "typescript": "^5.1.3", "patch-package": "^8.0.0", "@yao-pkg/pkg": "^5.12.0", - "resedit-cli": "^2.0.0" + "resedit-cli": "^2.0.0", + "@vercel/ncc": "^0.38.0" }, "resolutions": { "ajv": "8.15.0",