Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
7ee6719
feat: add TypeScript TOML config loader and consolidate types
christierney Mar 5, 2026
f181b66
remove unnecessary type assertion
christierney Mar 5, 2026
7e081b6
remove a couple other unneeded Record types
christierney Mar 5, 2026
fd817b6
refactor: loader throws ConfigurationLoadError instead of returning e…
christierney Mar 5, 2026
d055200
feat: add config writer, discovery, and compliance modules
christierney Mar 5, 2026
13b0c2f
refactor: replace Go API config calls with TypeScript toml module
christierney Mar 6, 2026
12e5565
fix: use relative projectDir in Configuration to match Go API convention
christierney Mar 6, 2026
834a9b7
refactor: writeConfigToFile resolves paths internally from configName…
christierney Mar 6, 2026
612a2ff
refactor: reduce toml barrel exports to public API surface only
christierney Mar 6, 2026
bd9ba78
fix: preserve empty section objects in stripEmpty to satisfy schema
christierney Mar 6, 2026
866a827
fix: update stale error context strings to reference toml module func…
christierney Mar 6, 2026
a80fcd9
remove Go API handlers for configuration get/getAll/createOrUpdate
christierney Mar 6, 2026
9be0e77
style: fix prettier formatting in state.test.ts
christierney Mar 6, 2026
982a583
feat: skip __pycache__, renv, and packrat in recursive config discovery
christierney Mar 9, 2026
f789789
fix: format schema validation errors to match Go's output
christierney Mar 9, 2026
955949c
fix: handle entrypointObjectRef in compliance and share formatValidat…
christierney Mar 9, 2026
ef8f13e
fix: filter redundant unevaluatedProperties errors using full key
christierney Mar 9, 2026
7dfc4eb
fix: replace non-null assertions on workspaces.path() with defensive …
christierney Mar 9, 2026
35dbd3a
perf: improve discovery.ts with parallel loading, fewer syscalls, and…
christierney Mar 9, 2026
f07d55d
refactor: reorder discovery.ts with public API first, private helpers…
christierney Mar 9, 2026
36d1e2a
refactor: deduplicate Ajv schema setup into shared validate module
christierney Mar 9, 2026
df7025c
refactor: reduce error-wrapping boilerplate in loadConfigFromFile
christierney Mar 9, 2026
ed814e2
refactor: deduplicate convertKeys and reduce boilerplate in writer
christierney Mar 9, 2026
836264a
fix: add missing await to satisfy require-await lint rule
christierney Mar 9, 2026
a7b0521
ci: pass debug_cypress input to e2e workflow from pull-request
christierney Mar 10, 2026
ae8edc6
fix: set productType when creating config via selectNewOrExistingConfig
christierney Mar 10, 2026
25062f6
docs: add comment explaining loadConfigsFromPaths error handling
christierney Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/pull-request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ name: Pull Request
on:
pull_request:
workflow_dispatch:
inputs:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for fixing this!

debug_cypress:
description: "Enable Cypress debug mode (videos, extra logs)"
type: boolean
default: false
permissions:
contents: read
id-token: write # Required for upload.yaml AWS OIDC authentication
Expand Down Expand Up @@ -120,6 +125,8 @@ jobs:
!contains(needs.*.result, 'failure') &&
!contains(needs.*.result, 'cancelled')
uses: ./.github/workflows/e2e.yaml
with:
debug_cypress: ${{ inputs.debug_cypress || false }}
secrets:
CONNECT_LICENSE: ${{ secrets.CONNECT_LICENSE }}
CONNECT_LICENSE_FILE: ${{ secrets.CONNECT_LICENSE_FILE }}
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed

- Connect Cloud users who have permissions to publish to multiple accounts are able to create credentials again. (#3446)
- Fixed configuration schema to use `auth_type` (snake_case) for integration requests, matching the format the extension actually produces. Added strict property validation to integration request items. (#3651)

## [1.34.0]

Expand Down
104 changes: 91 additions & 13 deletions extensions/vscode/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions extensions/vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,8 @@
},
"dependencies": {
"@vscode/codicons": "^0.0.44",
"ajv": "^8.18.0",
"ajv-formats": "^3.0.1",
"async-mutex": "^0.5.0",
"axios": "^1.13.6",
"debounce": "^3.0.0",
Expand All @@ -688,6 +690,7 @@
"filenamify": "^7.0.1",
"get-port": "^7.1.0",
"retry": "^0.13.1",
"smol-toml": "^1.6.0",
"tar-stream": "^3.1.8",
"vscode-uri": "^3.0.8"
}
Expand Down
53 changes: 1 addition & 52 deletions extensions/vscode/src/api/resources/Configurations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@

import { AxiosInstance } from "axios";

import {
Configuration,
ConfigurationDetails,
ConfigurationError,
ConfigurationInspectionResult,
} from "../types/configurations";
import { ConfigurationInspectionResult } from "../types/configurations";
import { PythonExecutable, RExecutable } from "../../types/shared";

export class Configurations {
Expand All @@ -17,52 +12,6 @@ export class Configurations {
this.client = client;
}

// Returns:
// 200 - success
// 404 - not found
// 500 - internal server error
get(configName: string, dir: string) {
const encodedName = encodeURIComponent(configName);
return this.client.get<Configuration | ConfigurationError>(
`/configurations/${encodedName}`,
{
params: { dir },
},
);
}

// Returns:
// 200 - success
// 500 - internal server error
getAll(dir: string, params?: { entrypoint?: string; recursive?: boolean }) {
return this.client.get<Array<Configuration | ConfigurationError>>(
"/configurations",
{
params: {
dir,
...params,
},
},
);
}

// Returns:
// 200 - success
// 400 - bad request
// 500 - internal server error
createOrUpdate(configName: string, cfg: ConfigurationDetails, dir: string) {
const encodedName = encodeURIComponent(configName);
return this.client.put<Configuration>(
`configurations/${encodedName}`,
cfg,
{
params: {
dir,
},
},
);
}

// Inspect the project, returning all possible (detected) configurations
// Returns:
// 200 - success
Expand Down
47 changes: 17 additions & 30 deletions extensions/vscode/src/api/types/configurations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { ProductType } from "./contentRecords";
export type ConfigurationLocation = {
configurationName: string;
configurationPath: string;
configurationRelPath: string;
projectDir: string;
};

Expand Down Expand Up @@ -114,26 +113,27 @@ export const contentTypeStrings = {

export type ConfigurationDetails = {
$schema: SchemaURL;
comments?: string[];
alternatives?: ConfigurationDetails[];
productType: ProductType;
type: ContentType;
entrypoint?: string;
entrypointObjectRef?: string;
source?: string;
title?: string;
description?: string;
thumbnail?: string;
tags?: string[];
hasParameters?: boolean;
python?: PythonConfig;
r?: RConfig;
quarto?: QuartoConfig;
jupyter?: JupyterConfig;
environment?: EnvironmentConfig;
validate: boolean;
files?: string[];
secrets?: string[];
integrationRequests?: IntegrationRequest[];
schedules?: ScheduleConfig[];
access?: AccessConfig;
connect?: ConnectConfig;
connectCloud?: ConnectCloudConfig;
};

export type IntegrationRequest = {
Expand All @@ -151,12 +151,15 @@ export type PythonConfig = {
version: string;
packageFile: string;
packageManager: string;
requiresPython?: string;
};

export type RConfig = {
version: string;
packageFile: string;
packageManager: string;
requiresR?: string;
packagesFromLibrary?: boolean;
};

export type QuartoConfig = {
Expand All @@ -166,35 +169,19 @@ export type QuartoConfig = {

export type EnvironmentConfig = Record<string, string>;

export type ScheduleConfig = {
start: string;
recurrence: string;
export type JupyterConfig = {
hideAllInput?: boolean;
hideTaggedInput?: boolean;
};

export enum AccessType {
ANONYMOUS = "all",
LOGGED_IN = "logged-in",
ACL = "acl",
}

export type AccessConfig = {
type: AccessType;
users?: User[];
groups?: Group[];
};

export type User = {
id?: string;
guid?: string;
name?: string;
permissions: string;
export type ConnectCloudConfig = {
vanityName?: string;
accessControl?: ConnectCloudAccessControl;
};

export type Group = {
id?: string;
guid?: string;
name?: string;
permissions: string;
export type ConnectCloudAccessControl = {
publicAccess?: boolean;
organizationAccess?: string;
};

export function UpdateAllConfigsWithDefaults(
Expand Down
Loading
Loading