Compare commits

...

7 Commits

Author SHA1 Message Date
Asher
ae9e8c54df Maybe fix quick input
It seems to type too quickly before the input is visible.
2026-09-25 14:53:18 -08:00
Asher
2d12f799b7 Add preinstall setup to build
Already had this in the release build step, not sure why it is not in
the main build step.  But we started getting errors building native
modules in ci, and this might be why.
2026-09-25 13:34:31 -08:00
Asher
03f52fd181 Wrap changelog 2026-09-25 12:19:46 -08:00
Asher
f095c524e7 Bump proxy-addr to 2.0.8 2026-09-25 12:06:02 -08:00
cdrci
885c0a62f8 Update Code to 1.139.1 2026-09-25 16:19:59 +00:00
Leo Camus
8a7bf87a4d Fix --idle-timeout-seconds validation being skipped (#8009)
The lower bound check ran before the parser had resolved the value, so it
only saw a value with the --idle-timeout-seconds=<value> form. With the
space-separated form the value was still undefined at that point,
Number(undefined) is NaN, and NaN <= 60 is false, so anything got through.

Move the check below the block that pulls the value from the next
argument so both forms are validated the same way.
2026-09-20 02:53:04 -08:00
cdrci
cd0f21dc72 Update Helm chart and changelog with 4.138.0 (#8014) 2026-09-20 02:51:41 -08:00
18 changed files with 70 additions and 29 deletions

View File

@@ -156,6 +156,7 @@ jobs:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
DISABLE_V8_COMPILE_CACHE: 1
VERSION: 0.0.0
VSCODE_ARCH: x64
VSCODE_TARGET: linux-x64
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
@@ -179,13 +180,13 @@ jobs:
cache-dependency-path: |
package-lock.json
test/package-lock.json
- run: SKIP_SUBMODULE_DEPS=1 npm ci
- run: npm run build
# Get Code's git hash. When this changes it means the content is
# different and we need to rebuild.
- name: Get latest lib/vscode rev
id: vscode-rev
run: echo "rev=$(git rev-parse HEAD:./lib/vscode)" >> $GITHUB_OUTPUT
# We need to rebuild when we have a new version of Code, when any of the
# patches changed, or when the code-server version changes (since it gets
# embedded into the code). Use VSCODE_CACHE_VERSION to force a rebuild.
@@ -198,10 +199,21 @@ jobs:
- name: Build vscode
if: steps.cache-vscode.outputs.cache-hit != 'true'
run: |
pushd lib/vscode
cd lib/vscode/build
npm ci
popd
cd ..
source ./build/azure-pipelines/linux/setup-env.sh
# Run preinstall script before root dependencies are installed
# so that v8 headers are patched correctly for native modules.
node build/npm/preinstall.ts
npm ci
cd ../..
npm run build:vscode
# Build the code-server wrapper.
- run: SKIP_SUBMODULE_DEPS=1 npm ci
- run: npm run build
# Push up an artifact containing the linux-x64 release.
- run: KEEP_MODULES=1 npm run release
- run: tar -czf package.tar.gz release

View File

@@ -1 +1 @@
24.18.1
24.20.0

View File

@@ -22,6 +22,20 @@ Code v99.99.999
## Unreleased
Code v1.139.1
### Changed
- Update to Code 1.139.1
### Fixed
- `--idle-timeout-seconds` was only validated when passed as
`--idle-timeout-seconds=<value>`; values of 60 or less passed as
`--idle-timeout-seconds <value>` were silently accepted.
## [4.138.0](https://github.com/coder/code-server/releases/tag/v4.138.0) - 2026-09-19
Code v1.138.0
### Changed

View File

@@ -15,9 +15,9 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 3.52.0
version: 3.53.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
appVersion: 4.137.0
appVersion: 4.138.0

View File

@@ -6,7 +6,7 @@ replicaCount: 1
image:
repository: codercom/code-server
tag: '4.137.0'
tag: '4.138.0'
pullPolicy: Always
# Specifies one or more secrets to be used when pulling images from a

10
package-lock.json generated
View File

@@ -5243,9 +5243,9 @@
}
},
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
"integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
"license": "MIT",
"dependencies": {
"forwarded": "0.2.0",
@@ -5253,6 +5253,10 @@
},
"engines": {
"node": ">= 0.10"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/proxy-agent": {

View File

@@ -44,7 +44,7 @@ Index: code-server/lib/vscode/build/lib/extensions.ts
import watcher from './watch/index.ts';
import { createRequire } from 'module';
@@ -491,6 +492,116 @@ export function packageCopilotExtensionS
@@ -487,6 +488,116 @@ export function packageCopilotExtensionS
).pipe(util2.setExecutableBit(['**/*.sh']));
}

View File

@@ -56,7 +56,7 @@ Index: code-server/lib/vscode/src/vs/server/node/remoteLanguagePacks.ts
import type { INLSConfiguration } from '../../nls.js';
@@ -33,7 +35,94 @@ export async function getNLSConfiguratio
if (!result) {
result = resolveNLSConfiguration({ userLocale: language, osLocale: language, commit: product.commit, userDataPath, nlsMetadataPath });
result = resolveNLSConfiguration({ userLocale: language, osLocale: language, commit: product.commit, nlsMetadataHash: product.nlsMetadataHash, userDataPath, nlsMetadataPath });
nlsConfigurationCache.set(cacheKey, result);
+ // If the language pack does not yet exist, it defaults to English, which is
+ // then cached and you have to restart even if you then install the pack.

View File

@@ -19,7 +19,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro
import { renderFormattedText } from '../../../../base/browser/formattedTextRenderer.js';
import { status } from '../../../../base/browser/ui/aria/aria.js';
import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js';
@@ -54,7 +54,7 @@ import { IRecentFolder, IRecentWorkspace
@@ -55,7 +55,7 @@ import { IRecentFolder, IRecentWorkspace
import { OpenRecentAction } from '../../../browser/actions/windowActions.js';
import { OpenFileFolderAction, OpenFolderAction, OpenFolderViaWorkspaceAction } from '../../../browser/actions/workspaceActions.js';
import { EditorPane } from '../../../browser/parts/editor/editorPane.js';
@@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro
import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js';
import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js';
import './gettingStartedColors.js';
@@ -928,6 +928,72 @@ export class GettingStartedPage extends
@@ -930,6 +930,72 @@ export class GettingStartedPage extends
$('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved"))
);
@@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro
const leftColumn = $('.categories-column.categories-column-left', {},);
const rightColumn = $('.categories-column.categories-column-right', {},);
@@ -977,6 +1043,9 @@ export class GettingStartedPage extends
@@ -980,6 +1046,9 @@ export class GettingStartedPage extends
recentList.setLimit(5);
reset(leftColumn, startList.getDomElement(), recentList.getDomElement());
}

View File

@@ -66,7 +66,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co
===================================================================
--- code-server.orig/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts
+++ code-server/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts
@@ -148,8 +148,10 @@ export class WorkspaceService extends Di
@@ -150,8 +150,10 @@ export class WorkspaceService extends Di
this.workspaceConfiguration = this._register(new WorkspaceConfiguration(configurationCache, fileService, uriIdentityService, logService));
this._register(this.workspaceConfiguration.onDidUpdateConfiguration(fromCache => {
this.onWorkspaceConfigurationChanged(fromCache).then(() => {
@@ -79,7 +79,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co
});
}));
@@ -561,6 +563,12 @@ export class WorkspaceService extends Di
@@ -563,6 +565,12 @@ export class WorkspaceService extends Di
previousFolders = this.workspace.folders;
this.workspace.update(workspace);
} else {

View File

@@ -20,7 +20,7 @@ Index: code-server/lib/vscode/src/vs/platform/product/common/product.ts
--- code-server.orig/lib/vscode/src/vs/platform/product/common/product.ts
+++ code-server/lib/vscode/src/vs/platform/product/common/product.ts
@@ -65,6 +65,17 @@ else if (globalThis._VSCODE_PRODUCT_JSON
Object.assign(product, { copilotVersions: { runtime, sdk } });
Object.assign(product, { copilotVersions: { runtime: packageConfiguration.copilotRuntimeVersion, sdk } });
}
}
+

View File

@@ -6,7 +6,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.ts
===================================================================
--- code-server.orig/lib/vscode/build/gulpfile.reh.ts
+++ code-server/lib/vscode/build/gulpfile.reh.ts
@@ -344,10 +344,15 @@ function packageTask(type: string, platf
@@ -260,10 +260,15 @@ function packageTask(type: string, platf
const destination = path.join(BUILD_ROOT, destinationFolderName);
return () => {

View File

@@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts
readonly version: string;
readonly date?: string;
@@ -145,6 +146,7 @@ export interface IProductConfiguration {
@@ -148,6 +149,7 @@ export interface IProductConfiguration {
};
readonly extensionsGallery?: {

View File

@@ -429,10 +429,6 @@ export const parse = (
throw new Error("--github-auth can only be set in the config file or passed in via $GITHUB_TOKEN")
}
if (key === "idle-timeout-seconds" && Number(value) <= 60) {
throw new Error("--idle-timeout-seconds must be greater than 60 seconds.")
}
const option = options[key]
if (option.type === "boolean") {
;(args[key] as boolean) = true
@@ -452,6 +448,10 @@ export const parse = (
throw error(`--${key} requires a value`)
}
if (key === "idle-timeout-seconds" && Number(value) <= 60) {
throw new Error("--idle-timeout-seconds must be greater than 60 seconds.")
}
if (option.type === OptionalString && value === "false") {
continue
}

View File

@@ -54,9 +54,9 @@ function runExternalUriTests(proxyEndpointTemplate?: string) {
await codeServerPage.waitForTestExtensionLoaded()
await codeServerPage.executeCommandViaMenus("code-server: asExternalUri test")
const inputBox = codeServerPage.page.locator(".quick-input-widget input")
await inputBox.fill(input)
await inputBox.press("Enter")
await codeServerPage.page.waitForSelector(".quick-input-widget:focus-within")
await codeServerPage.page.keyboard.type(input)
await codeServerPage.page.keyboard.press("Enter")
// The test extension displays URI.toString(), which also encodes query delimiters.
const output = `${proxyBase.replace(/\/$/, "")}${suffix}`

View File

@@ -437,6 +437,7 @@ export class CodeServerPage {
async executeCommandViaMenus(command: string) {
await this.navigateMenus(["View", "Command Palette..."])
await codeServerPage.page.waitForSelector(".quick-input-widget:focus-within")
await this.page.keyboard.type(command)
await this.page.hover(`text=${command}`)

View File

@@ -268,6 +268,16 @@ describe("parser", () => {
expect(() => parse(["--log", "invalid"])).toThrowError(/--log valid values: \[trace, debug, info, warn, error\]/)
})
it("should error if idle-timeout-seconds is too low", () => {
expect(() => parse(["--idle-timeout-seconds=60"])).toThrowError(
/--idle-timeout-seconds must be greater than 60 seconds/,
)
expect(() => parse(["--idle-timeout-seconds", "60"])).toThrowError(
/--idle-timeout-seconds must be greater than 60 seconds/,
)
expect(parse(["--idle-timeout-seconds", "61"])).toEqual({ "idle-timeout-seconds": 61 })
})
it("should error if the option doesn't exist", () => {
expect(() => parse(["--foo"])).toThrowError(/Unknown option --foo/)
})