diff --git a/.gitignore b/.gitignore index 2ac9726..395da48 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ vscode VS*/* VSCode* +VSCodium* .DS_Store build/linux/appimage/out build/linux/appimage/pkg2appimage.AppDir diff --git a/check_tags.sh b/check_tags.sh index da97898..e0bbcf8 100755 --- a/check_tags.sh +++ b/check_tags.sh @@ -11,7 +11,7 @@ VERSIONS_REPO="${GITHUB_USERNAME:-"VSCodium"}/versions" REPOSITORY="${GITHUB_REPOSITORY:-"VSCodium/vscodium"}" GITHUB_RESPONSE=$( curl -s -H "Authorization: token ${GITHUB_TOKEN}" "https://api.github.com/repos/${REPOSITORY}/releases/latest" ) -LATEST_VERSION=$( echo "${GITHUB_RESPONSE}" | jq -c '.tag_name' ) +LATEST_VERSION=$( echo "${GITHUB_RESPONSE}" | jq -c -r '.tag_name' ) if [[ "${LATEST_VERSION}" =~ ^([0-9]+\.[0-9]+\.[0-9]+) ]]; then if [ "${MS_TAG}" != "${BASH_REMATCH[1]}" ]; then diff --git a/patches/build-version.patch b/patches/build-version.patch index 135d2bf..85877fe 100644 --- a/patches/build-version.patch +++ b/patches/build-version.patch @@ -1,18 +1,20 @@ diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index 2abc3f3..91724a5 100644 +index 2abc3f3..a3cbf2d 100644 --- a/build/gulpfile.reh.js +++ b/build/gulpfile.reh.js -@@ -238,7 +238,7 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa - const sources = es.merge(src, extensions, extensionsCommonDependencies) - .pipe(filter(['**', '!**/*.js.map'], { dot: true })); +@@ -246,8 +246,9 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa + } -- let version = packageJson.version; -+ let version = packageJson.version.replace('+', '.'); - const quality = product.quality; + const name = product.nameShort; ++ const release = packageJson.release; + const packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' }) +- .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined })); ++ .pipe(json({ name, version, release, dependencies: undefined, optionalDependencies: undefined })); + + const date = new Date().toISOString(); - if (quality && quality !== 'stable') { diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index 28f8e52..c83a4e1 100644 +index 28f8e52..f17962d 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -187,7 +187,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op @@ -20,12 +22,22 @@ index 28f8e52..c83a4e1 100644 .pipe(filter(['**', '!**/*.js.map'], { dot: true })); - let version = packageJson.version; -+ let version = packageJson.version.replace('+', '.'); ++ let version = packageJson.version const quality = product.quality; if (quality && quality !== 'stable') { +@@ -195,7 +195,8 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op + } + + const name = product.nameShort; +- const packageJsonUpdates = { name, version }; ++ const release = packageJson.release; ++ const packageJsonUpdates = { name, version, release }; + + // for linux url handling + if (platform === 'linux') { diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js -index 489d9cc..51db755 100644 +index 489d9cc..e9f00f3 100644 --- a/build/gulpfile.vscode.linux.js +++ b/build/gulpfile.vscode.linux.js @@ -83,7 +83,7 @@ function prepareDebPackage(arch) { @@ -33,7 +45,7 @@ index 489d9cc..51db755 100644 gulp.src('resources/linux/debian/control.template', { base: '.' }) .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision)) -+ .pipe(replace('@@VERSION@@', packageJson.version.replace('+', '.'))) ++ .pipe(replace('@@VERSION@@', `${packageJson.version}.${packageJson.release}`)) .pipe(replace('@@ARCHITECTURE@@', debArch)) .pipe(replace('@@DEPENDS@@', dependencies.join(', '))) .pipe(replace('@@RECOMMENDS@@', debianRecommendedDependencies.join(', '))) @@ -43,7 +55,7 @@ index 489d9cc..51db755 100644 .pipe(replace('@@ICON@@', product.linuxIconName)) - .pipe(replace('@@VERSION@@', packageJson.version)) - .pipe(replace('@@RELEASE@@', linuxPackageRevision)) -+ .pipe(replace('@@VERSION@@', packageJson.version.replace('+', '.'))) ++ .pipe(replace('@@VERSION@@', `${packageJson.version}.${packageJson.release}`)) .pipe(replace('@@ARCHITECTURE@@', rpmArch)) .pipe(replace('@@LICENSE@@', product.licenseName)) .pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@')) @@ -52,25 +64,12 @@ index 489d9cc..51db755 100644 const snapcraft = gulp.src('resources/linux/snap/snapcraft.yaml', { base: '.' }) .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(replace('@@VERSION@@', commit.substr(0, 8))) -+ .pipe(replace('@@VERSION@@', packageJson.version.replace('+', '.'))) ++ .pipe(replace('@@VERSION@@', `${packageJson.version}.${packageJson.release}`)) // Possible run-on values https://snapcraft.io/docs/architectures .pipe(replace('@@ARCHITECTURE@@', arch === 'x64' ? 'amd64' : arch)) .pipe(rename('snap/snapcraft.yaml')); -diff --git a/build/gulpfile.vscode.web.js b/build/gulpfile.vscode.web.js -index 4c1259c..0d41560 100644 ---- a/build/gulpfile.vscode.web.js -+++ b/build/gulpfile.vscode.web.js -@@ -28,7 +28,7 @@ const WEB_FOLDER = path.join(REPO_ROOT, 'remote', 'web'); - - const commit = util.getVersion(REPO_ROOT); - const quality = product.quality; --const version = (quality && quality !== 'stable') ? `${packageJson.version}-${quality}` : packageJson.version; -+const version = (quality && quality !== 'stable') ? `${packageJson.version.replace('+', '.')}-${quality}` : packageJson.version.replace('+', '.'); - - const vscodeWebResourceIncludes = [ - // Workbench diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js -index 81ba509..a445749 100644 +index 81ba509..43f5377 100644 --- a/build/gulpfile.vscode.win32.js +++ b/build/gulpfile.vscode.win32.js @@ -91,8 +91,8 @@ function buildWin32Setup(arch, target) { @@ -79,8 +78,8 @@ index 81ba509..a445749 100644 DirName: product.win32DirName, - Version: pkg.version, - RawVersion: pkg.version.replace(/-\w+$/, ''), -+ Version: pkg.version.replace('+', '.'), -+ RawVersion: pkg.version.replace(/-\w+$/, '').replace('+', '.'), ++ Version: `${pkg.version}.${pkg.release}`, ++ RawVersion: `${pkg.version.replace(/-\w+$/, '')}.${pkg.release}`, NameVersion: product.win32NameVersion + (target === 'user' ? ' (User)' : ''), ExeBasename: product.nameShort, RegValueName: product.win32RegValueName, @@ -96,89 +95,92 @@ index 00ddb6f..814c964 100644 Summary: Code editing. Redefined. Group: Development/Tools Vendor: Microsoft Corporation -diff --git a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts -index 3515dea..c0aa528 100644 ---- a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts -+++ b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts -@@ -23,7 +23,7 @@ import { IFileService } from 'vs/platform/files/common/files'; - import { ILogService } from 'vs/platform/log/common/log'; - import { IProductService } from 'vs/platform/product/common/productService'; - import { asJson, asTextOrError, IRequestService, isSuccess } from 'vs/platform/request/common/request'; --import { resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; -+import { getCoreVersion, resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; - import { IStorageService } from 'vs/platform/storage/common/storage'; - import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +diff --git a/src/vs/base/common/product.ts b/src/vs/base/common/product.ts +index 1ae8079..0dad6ac 100644 +--- a/src/vs/base/common/product.ts ++++ b/src/vs/base/common/product.ts +@@ -32,6 +32,7 @@ export type ExtensionVirtualWorkspaceSupport = { -@@ -988,7 +988,8 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi - return undefined; - } + export interface IProductConfiguration { + readonly version: string; ++ readonly release: string; + readonly date?: string; + readonly quality?: string; + readonly commit?: string; +diff --git a/src/vs/platform/diagnostics/node/diagnosticsService.ts b/src/vs/platform/diagnostics/node/diagnosticsService.ts +index e1c60a3..a12d52c 100644 +--- a/src/vs/platform/diagnostics/node/diagnosticsService.ts ++++ b/src/vs/platform/diagnostics/node/diagnosticsService.ts +@@ -237,7 +237,7 @@ export class DiagnosticsService implements IDiagnosticsService { -- const url = isWeb ? this.api(`/itemName/${publisher}.${name}/version/${version}/statType/${type === StatisticType.Install ? '1' : '3'}/vscodewebextension`) : this.api(`/publishers/${publisher}/extensions/${name}/${version}/stats?statType=${type}`); -+ const coreVersion = getCoreVersion(version); -+ const url = isWeb ? this.api(`/itemName/${publisher}.${name}/version/${coreVersion}/statType/${type === StatisticType.Install ? '1' : '3'}/vscodewebextension`) : this.api(`/publishers/${publisher}/extensions/${name}/${coreVersion}/stats?statType=${type}`); - const Accept = isWeb ? 'api-version=6.1-preview.1' : '*/*;api-version=4.0-preview.1'; - - const commonHeaders = await this.commonHeadersPromise; -diff --git a/src/vs/platform/extensions/common/extensionValidator.ts b/src/vs/platform/extensions/common/extensionValidator.ts -index 0a5e7d2..e453393 100644 ---- a/src/vs/platform/extensions/common/extensionValidator.ts -+++ b/src/vs/platform/extensions/common/extensionValidator.ts -@@ -9,6 +9,7 @@ import { URI } from 'vs/base/common/uri'; - import * as nls from 'vs/nls'; - import * as semver from 'vs/base/common/semver/semver'; - import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -+import { getCoreVersion } from 'vs/platform/externalServices/common/marketplace'; - - export interface IParsedVersion { - hasCaret: boolean; -@@ -371,7 +372,8 @@ function isVersionValid(currentVersion: string, date: ProductDate, requestedVers - } - } - -- if (!isValidVersion(currentVersion, date, desiredVersion)) { -+ const coreVersion = getCoreVersion(currentVersion); -+ if (!isValidVersion(coreVersion, date, desiredVersion)) { - notices.push(nls.localize('versionMismatch', "Extension is not compatible with Code {0}. Extension requires: {1}.", currentVersion, requestedVersion)); - return false; - } -diff --git a/src/vs/platform/externalServices/common/marketplace.ts b/src/vs/platform/externalServices/common/marketplace.ts -index 5923e1c..d70c59f 100644 ---- a/src/vs/platform/externalServices/common/marketplace.ts -+++ b/src/vs/platform/externalServices/common/marketplace.ts -@@ -13,6 +13,10 @@ import { IStorageService } from 'vs/platform/storage/common/storage'; - import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; - import { getTelemetryLevel, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; - -+export function getCoreVersion(version: string): string { -+ return version.replace(/\.[0-9]+$/, ''); -+} -+ - export async function resolveMarketplaceHeaders(version: string, - productService: IProductService, - environmentService: IEnvironmentService, -@@ -20,9 +24,10 @@ export async function resolveMarketplaceHeaders(version: string, - fileService: IFileService, - storageService: IStorageService | undefined, - telemetryService: ITelemetryService): Promise<IHeaders> { -+ const coreVersion = getCoreVersion(version); - const headers: IHeaders = { -- 'X-Market-Client-Id': `VSCode ${version}`, -- 'User-Agent': `VSCode ${version} (${productService.nameShort})` -+ 'X-Market-Client-Id': `VSCode ${coreVersion}`, -+ 'User-Agent': `VSCode ${coreVersion} (${productService.nameShort})` - }; - const uuid = await getServiceMachineId(environmentService, fileService, storageService); - const { sessionId } = await telemetryService.getTelemetryInfo(); + private formatEnvironment(info: IMainProcessInfo): string { + const output: string[] = []; +- output.push(`Version: ${this.productService.nameShort} ${this.productService.version} (${this.productService.commit || 'Commit unknown'}, ${this.productService.date || 'Date unknown'})`); ++ output.push(`Version: ${this.productService.nameShort} ${this.productService.version} ${this.productService.release || 'Release unknown'} (${this.productService.commit || 'Commit unknown'}, ${this.productService.date || 'Date unknown'})`); + output.push(`OS Version: ${osLib.type()} ${osLib.arch()} ${osLib.release()}`); + const cpus = osLib.cpus(); + if (cpus && cpus.length > 0) { diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts -index 7e63a16..767f4f6 100644 +index 7e63a16..74d1f26 100644 --- a/src/vs/platform/product/common/product.ts +++ b/src/vs/platform/product/common/product.ts -@@ -45,7 +45,7 @@ else if (typeof require?.__$__nodeRequire === 'function') { +@@ -32,7 +32,7 @@ else if (typeof require?.__$__nodeRequire === 'function') { + const rootPath = dirname(FileAccess.asFileUri('', require)); + + product = require.__$__nodeRequire(joinPath(rootPath, 'product.json').fsPath); +- const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string }; ++ const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string, release: string }; + + // Running out of sources + if (env['VSCODE_DEV']) { +@@ -45,7 +45,8 @@ else if (typeof require?.__$__nodeRequire === 'function') { } Object.assign(product, { - version: pkg.version -+ version: pkg.version.replace('+', '.') ++ version: pkg.version, ++ release: pkg.release }); } +diff --git a/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts b/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts +index ec4ff95..f721052 100644 +--- a/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts ++++ b/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts +@@ -144,7 +144,8 @@ export class BrowserDialogHandler implements IDialogHandler { + async about(): Promise<void> { + const detailString = (useAgo: boolean): string => { + return localize('aboutDetail', +- "Version: {0}\nCommit: {1}\nDate: {2}\nBrowser: {3}", ++ "Version: {0}\nRelease: {1}\nCommit: {2}\nDate: {3}\nBrowser: {4}", ++ this.productService.release || 'Unknown', + this.productService.version || 'Unknown', + this.productService.commit || 'Unknown', + this.productService.date ? `${this.productService.date}${useAgo ? ' (' + fromNow(new Date(this.productService.date), true) + ')' : ''}` : 'Unknown', +diff --git a/src/vs/workbench/contrib/issue/browser/issueService.ts b/src/vs/workbench/contrib/issue/browser/issueService.ts +index dc7430b..23def01 100644 +--- a/src/vs/workbench/contrib/issue/browser/issueService.ts ++++ b/src/vs/workbench/contrib/issue/browser/issueService.ts +@@ -65,6 +65,7 @@ export class WebIssueService implements IWorkbenchIssueService { + return `ADD ISSUE DESCRIPTION HERE + + Version: ${this.productService.version} ++Release: ${this.productService.release ?? 'unknown'} + Commit: ${this.productService.commit ?? 'unknown'} + User Agent: ${userAgent ?? 'unknown'} + Embedder: ${this.productService.embedderIdentifier ?? 'unknown'} +diff --git a/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts b/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts +index a4728e7..d1a8b94 100644 +--- a/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts ++++ b/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts +@@ -167,8 +167,9 @@ export class NativeDialogHandler implements IDialogHandler { + + const detailString = (useAgo: boolean): string => { + return localize({ key: 'aboutDetail', comment: ['Electron, Chromium, Node.js and V8 are product names that need no translation'] }, +- "Version: {0}\nCommit: {1}\nDate: {2}\nElectron: {3}\nChromium: {4}\nNode.js: {5}\nV8: {6}\nOS: {7}", ++ "Version: {0}\nRelease: {1}\nCommit: {2}\nDate: {3}\nElectron: {4}\nChromium: {5}\nNode.js: {6}\nV8: {7}\nOS: {8}", + version, ++ this.productService.release || 'Unknown', + this.productService.commit || 'Unknown', + this.productService.date ? `${this.productService.date}${useAgo ? ' (' + fromNow(new Date(this.productService.date), true) + ')' : ''}` : 'Unknown', + process.versions['electron'], diff --git a/prepare_artifacts.sh b/prepare_artifacts.sh index 319991f..89af9a7 100755 --- a/prepare_artifacts.sh +++ b/prepare_artifacts.sh @@ -26,7 +26,7 @@ if [[ "${OS_NAME}" == "osx" ]]; then echo "Building and moving DMG" pushd "VSCode-darwin-${VSCODE_ARCH}" npx create-dmg VSCodium.app .. - mv "../VSCodium ${RELEASE_VERSION}.dmg" "../artifacts/VSCodium.${VSCODE_ARCH}.${RELEASE_VERSION}.dmg" + mv "../VSCodium ${MS_TAG}.dmg" "../artifacts/VSCodium.${VSCODE_ARCH}.${RELEASE_VERSION}.dmg" popd fi diff --git a/prepare_vscode.sh b/prepare_vscode.sh index 125afb7..9f50057 100755 --- a/prepare_vscode.sh +++ b/prepare_vscode.sh @@ -97,9 +97,10 @@ rm -f product.json.tmp cat product.json mv package.json package.json.bak -package_json_changes="setpath(["\""version"\""]; "\""${RELEASE_VERSION}"\"")" +package_json_changes="setpath(["\""version"\""]; "\""${RELEASE_VERSION}"\"") | setpath(["\""release"\""]; "\""${RELEASE_VERSION}"\"")" cat package.json.bak | jq "${package_json_changes}" > package.json -gsed -i -E 's/"version": "(.*)\.([0-9]+)"/"version": "\1+\2"/' package.json +gsed -i -E 's/"version": "(.*)\.([0-9]+)"/"version": "\1"/' package.json +gsed -i -E 's/"release": "(.*)\.([0-9]+)"/"release": "\2"/' package.json ../undo_telemetry.sh