diff --git a/build-pipeline.js b/build-pipeline.js index 4cd5750..04617b4 100644 --- a/build-pipeline.js +++ b/build-pipeline.js @@ -20,11 +20,13 @@ const REPO_CONFIG = { }; function clonePrivateRepo(repoConfig, targetDir) { - const repoUrl = `https://gitlab.com/${GITLAB_GROUP}/${repoConfig.name}.git`; + const token = process.env.GITLAB_TOKEN || process.env.VYLA_GITLAB_TOKEN; + const auth = token ? `oauth2:${token}@` : ''; + const repoUrl = `https://${auth}gitlab.com/${GITLAB_GROUP}/${repoConfig.name}.git`; try { if (fs.existsSync(targetDir)) { - fs.rmSync(targetDir, { recursive: true, force: true }); + fs.rmSync(targetDir, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 }); } execSync(`git clone --depth 1 --branch ${repoConfig.branch} ${repoUrl} ${targetDir}`, { @@ -332,6 +334,9 @@ async function build() { } const zipPath = path.join(__dirname, 'update-payload.zip'); + if (fs.existsSync(zipPath)) { + fs.rmSync(zipPath, { force: true }); + } zip.writeZip(zipPath); const checksum = validatePayload(zipPath); diff --git a/main.js b/main.js index e5b727f..dfc3666 100644 --- a/main.js +++ b/main.js @@ -243,6 +243,18 @@ async function start() { sendToTauri('status', { message: 'Loading credentials...' }); serviceManager.credentialManager.loadCredentials(); + sendToTauri('status', { message: 'Installing the Vyla SDK to latest version...' }); + try { + require('child_process').execSync('npm install @vyla-entertainment/sdk@latest --no-save --no-audit --no-fund', { + cwd: APPDATA_DIR, + stdio: 'ignore', + windowsHide: true + }); + debugLog("Vyla SDK updated to latest successfully."); + } catch (e) { + debugLog(`Failed to install Vyla SDK: ${e.message}`); + } + sendToTauri('status', { message: 'Starting backend services...' }); await serviceManager.startServices([ { name: 'auth-proxy', relativeDir: 'auth-proxy' }, diff --git a/package.json b/package.json index 5235d0c..2118b95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vyla-home", - "version": "1.1.4", + "version": "1.1.5", "description": "Vyla Home Desktop App Launcher", "main": "main.js", "scripts": { @@ -14,7 +14,7 @@ "@tauri-apps/api": "^2.0.0", "@tauri-apps/plugin-shell": "^2.0.0", "@tauri-apps/plugin-process": "^2.0.0", - "@vyla-entertainment/sdk": "^1.10.0", + "@vyla-entertainment/sdk": "^1.11.0", "adm-zip": "^0.6.0", "express": "^4.19.2" }, @@ -54,4 +54,4 @@ "installerHeaderIcon": "build/icon.ico" } } -} +} \ No newline at end of file diff --git a/release.js b/release.js index 742c7ea..447ce5c 100644 --- a/release.js +++ b/release.js @@ -78,42 +78,38 @@ function uploadFileToGitLabPackage(filePath, packageName, version, fileName) { } function createGitLabRelease(tag, releaseLinks) { - const sendRequest = (method, path) => { + const sendRequest = (method, path, data = null) => { return new Promise((resolve, reject) => { - let currentRef = 'main'; - try { - currentRef = execSync('git rev-parse HEAD').toString().trim(); - } catch (e) { } - - const postData = JSON.stringify({ - name: `Vyla Home Release ${tag}`, - tag_name: tag, - ref: currentRef, - description: `Automated local release ${tag}`, - assets: { - links: releaseLinks - } - }); - - const req = https.request({ + const options = { hostname: 'gitlab.com', port: 443, path: path, method: method, headers: { 'PRIVATE-TOKEN': TOKEN, - 'Content-Type': 'application/json', - 'Content-Length': Buffer.byteLength(postData) + 'Content-Type': 'application/json' } - }, (res) => { + }; + let postData = ''; + if (data) { + postData = JSON.stringify(data); + options.headers['Content-Length'] = Buffer.byteLength(postData); + } + + const req = https.request(options, (res) => { let body = ''; res.on('data', chunk => body += chunk); res.on('end', () => { - if (res.statusCode === 200 || res.statusCode === 201) { - resolve(JSON.parse(body)); + if (res.statusCode >= 200 && res.statusCode < 300) { + try { + resolve(body ? JSON.parse(body) : {}); + } catch (e) { + resolve({}); + } } else if (res.statusCode === 409 && method === 'POST') { - console.log(`Release ${tag} already exists, updating assets...`); - sendRequest('PUT', `/api/v4/projects/${PROJECT_ID}/releases/${encodeURIComponent(tag)}`) + console.log(`Release ${tag} already exists, deleting and recreating...`); + sendRequest('DELETE', `/api/v4/projects/${PROJECT_ID}/releases/${encodeURIComponent(tag)}`) + .then(() => sendRequest('POST', `/api/v4/projects/${PROJECT_ID}/releases`, data)) .then(resolve) .catch(reject); } else { @@ -123,12 +119,27 @@ function createGitLabRelease(tag, releaseLinks) { }); req.on('error', reject); - req.write(postData); + if (data) req.write(postData); req.end(); }); }; - return sendRequest('POST', `/api/v4/projects/${PROJECT_ID}/releases`); + let currentRef = 'main'; + try { + currentRef = execSync('git rev-parse HEAD').toString().trim(); + } catch (e) { } + + const releaseData = { + name: `Vyla Home Release ${tag}`, + tag_name: tag, + ref: currentRef, + description: `Automated local release ${tag}`, + assets: { + links: releaseLinks + } + }; + + return sendRequest('POST', `/api/v4/projects/${PROJECT_ID}/releases`, releaseData); } async function main() { @@ -182,11 +193,13 @@ async function main() { } console.log('[2/4] Uploading artifacts to GitLab Package Registry...'); + const timestamp = Date.now(); + console.log('Uploading update-payload.zip...'); - const payloadUrl = await uploadFileToGitLabPackage(payloadPath, 'vyla-home', version, 'update-payload.zip'); + const payloadUrl = await uploadFileToGitLabPackage(payloadPath, 'vyla-home', version, `update-payload-${timestamp}.zip`); console.log('Uploading manifest.json...'); - const manifestUrl = await uploadFileToGitLabPackage(manifestPath, 'vyla-home', version, 'manifest.json'); + const manifestUrl = await uploadFileToGitLabPackage(manifestPath, 'vyla-home', version, `manifest-${timestamp}.json`); const releaseLinks = [ { name: 'update-payload.zip', url: payloadUrl, link_type: 'other' }, @@ -195,7 +208,8 @@ async function main() { if (installerPath && installerUploadName) { console.log(`Uploading installer ${installerUploadName}...`); - const installerUrl = await uploadFileToGitLabPackage(installerPath, 'vyla-home', version, installerUploadName); + const installerUnique = installerUploadName.replace('.exe', `-${timestamp}.exe`); + const installerUrl = await uploadFileToGitLabPackage(installerPath, 'vyla-home', version, installerUnique); releaseLinks.push({ name: installerUploadName, url: installerUrl, link_type: 'package' }); } diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index d894945..8edbbaa 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4222,7 +4222,7 @@ dependencies = [ [[package]] name = "vyla-home" -version = "1.1.4" +version = "1.1.5" dependencies = [ "serde", "serde_json", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index ba7a472..9ed0cbb 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vyla-home" -version = "1.1.4" +version = "1.1.5" description = "Vyla Home Desktop App Launcher" edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index ca6bb3e..ee20712 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Vyla Home", - "version": "1.1.4", + "version": "1.1.5", "identifier": "com.vyla.home", "build": { "frontendDist": "../ui"