From 1eaef8542b6f5f30f85841b253256a67272b6647 Mon Sep 17 00:00:00 2001 From: dieriba Date: Fri, 24 Jan 2025 17:07:48 +0100 Subject: [PATCH 01/85] fix pg trigger display (#5127) --- backend/windmill-api/openapi.yaml | 3 +++ .../routes/(root)/(logged)/postgres_triggers/+page.svelte | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 82bd7a9c0e..537ae2892c 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -13221,6 +13221,9 @@ components: type: string error: type: string + last_server_ping: + type: string + format: date-time required: - path - script_path diff --git a/frontend/src/routes/(root)/(logged)/postgres_triggers/+page.svelte b/frontend/src/routes/(root)/(logged)/postgres_triggers/+page.svelte index 5459fe58eb..c69a447f3b 100644 --- a/frontend/src/routes/(root)/(logged)/postgres_triggers/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/postgres_triggers/+page.svelte @@ -55,7 +55,10 @@ if (newTrigger) { triggers[i] = { ...triggers[i], - enabled: newTrigger.enabled + error: newTrigger.error, + last_server_ping: newTrigger.last_server_ping, + enabled: newTrigger.enabled, + server_id: newTrigger.server_id } } } From 1a1ea682166af62133d3df2816490e3ebc92462f Mon Sep 17 00:00:00 2001 From: Alexander Petric Date: Fri, 24 Jan 2025 12:17:00 -0500 Subject: [PATCH 02/85] feat(frontend): operator visibility setting per workspace (#5124) * feat(frontend): operator visibility setting per workspace * section + reactivity * sqlx prep * npm check * more sqlx * fix table bg dark mode * improve db query / reactivity * sqlx prepare * more merge fixing * npm check * npm check --- ...c7ba2f60f41e1abb6ff8332bd2dfa7379d14.json} | 12 +- ...c61296a3ff7489ae12f52a19f9543173ac597.json | 6 + ...dcc40f463cbc52d94ed9315cf9a547d4c89f2.json | 6 + ...5a0652d6a72024a0c17f5271add38168d1ab3.json | 15 ++ ...49bb6cb06581079b5fc5bea5ddd8e7a895b79.json | 23 --- .../20250122211942_operator_settings.down.sql | 1 + .../20250122211942_operator_settings.up.sql | 11 ++ backend/windmill-api/openapi.yaml | 71 ++++++++- backend/windmill-api/src/workspaces.rs | 46 +++++- .../settings/WorkspaceOperatorSettings.svelte | 144 ++++++++++++++++++ .../settings/WorkspaceUserSettings.svelte | 4 +- .../components/sidebar/OperatorMenu.svelte | 38 +++-- frontend/src/lib/stores.ts | 6 +- .../(root)/(logged)/audit_logs/+page.svelte | 9 +- .../(root)/(logged)/folders/+page.svelte | 9 +- .../(root)/(logged)/groups/+page.svelte | 9 +- .../(logged)/kafka_triggers/+page.svelte | 9 +- .../(logged)/nats_triggers/+page.svelte | 9 +- .../(root)/(logged)/resources/+page.svelte | 9 +- .../(root)/(logged)/routes/+page.svelte | 9 +- .../(logged)/runs/[...path]/+page.svelte | 9 +- .../(root)/(logged)/schedules/+page.svelte | 12 +- .../(root)/(logged)/variables/+page.svelte | 9 +- .../(root)/(logged)/workers/+page.svelte | 9 +- 24 files changed, 433 insertions(+), 52 deletions(-) rename backend/.sqlx/{query-6c845f168b6265e6cf92e4d33c5409edfdc1847d0348df2ea55504ddaaa67736.json => query-1452033a8e2b160883a649c986d6c7ba2f60f41e1abb6ff8332bd2dfa7379d14.json} (53%) create mode 100644 backend/.sqlx/query-597b89889c3820fe7986b834c0e5a0652d6a72024a0c17f5271add38168d1ab3.json delete mode 100644 backend/.sqlx/query-64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79.json create mode 100644 backend/migrations/20250122211942_operator_settings.down.sql create mode 100644 backend/migrations/20250122211942_operator_settings.up.sql create mode 100644 frontend/src/lib/components/settings/WorkspaceOperatorSettings.svelte diff --git a/backend/.sqlx/query-6c845f168b6265e6cf92e4d33c5409edfdc1847d0348df2ea55504ddaaa67736.json b/backend/.sqlx/query-1452033a8e2b160883a649c986d6c7ba2f60f41e1abb6ff8332bd2dfa7379d14.json similarity index 53% rename from backend/.sqlx/query-6c845f168b6265e6cf92e4d33c5409edfdc1847d0348df2ea55504ddaaa67736.json rename to backend/.sqlx/query-1452033a8e2b160883a649c986d6c7ba2f60f41e1abb6ff8332bd2dfa7379d14.json index b4199d4ca1..1bad8b94d0 100644 --- a/backend/.sqlx/query-6c845f168b6265e6cf92e4d33c5409edfdc1847d0348df2ea55504ddaaa67736.json +++ b/backend/.sqlx/query-1452033a8e2b160883a649c986d6c7ba2f60f41e1abb6ff8332bd2dfa7379d14.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT workspace.id, workspace.name, usr.username, workspace_settings.color\n FROM workspace\n JOIN usr ON usr.workspace_id = workspace.id\n JOIN workspace_settings ON workspace_settings.workspace_id = workspace.id\n WHERE usr.email = $1 AND workspace.deleted = false", + "query": "SELECT workspace.id, workspace.name, usr.username, workspace_settings.color,\n CASE WHEN usr.operator THEN workspace_settings.operator_settings ELSE NULL END as operator_settings\n FROM workspace\n JOIN usr ON usr.workspace_id = workspace.id\n JOIN workspace_settings ON workspace_settings.workspace_id = workspace.id\n WHERE usr.email = $1 AND workspace.deleted = false", "describe": { "columns": [ { @@ -22,6 +22,11 @@ "ordinal": 3, "name": "color", "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "operator_settings", + "type_info": "Jsonb" } ], "parameters": { @@ -33,8 +38,9 @@ false, false, false, - true + true, + null ] }, - "hash": "6c845f168b6265e6cf92e4d33c5409edfdc1847d0348df2ea55504ddaaa67736" + "hash": "1452033a8e2b160883a649c986d6c7ba2f60f41e1abb6ff8332bd2dfa7379d14" } diff --git a/backend/.sqlx/query-1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597.json b/backend/.sqlx/query-1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597.json index 64d273ed70..b6fee2c5ff 100644 --- a/backend/.sqlx/query-1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597.json +++ b/backend/.sqlx/query-1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597.json @@ -127,6 +127,11 @@ "ordinal": 24, "name": "color", "type_info": "Varchar" + }, + { + "ordinal": 25, + "name": "operator_settings", + "type_info": "Jsonb" } ], "parameters": { @@ -159,6 +164,7 @@ true, true, true, + true, true ] }, diff --git a/backend/.sqlx/query-55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2.json b/backend/.sqlx/query-55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2.json index 6092b0551a..baf7cb42f5 100644 --- a/backend/.sqlx/query-55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2.json +++ b/backend/.sqlx/query-55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2.json @@ -127,6 +127,11 @@ "ordinal": 24, "name": "color", "type_info": "Varchar" + }, + { + "ordinal": 25, + "name": "operator_settings", + "type_info": "Jsonb" } ], "parameters": { @@ -159,6 +164,7 @@ true, true, true, + true, true ] }, diff --git a/backend/.sqlx/query-597b89889c3820fe7986b834c0e5a0652d6a72024a0c17f5271add38168d1ab3.json b/backend/.sqlx/query-597b89889c3820fe7986b834c0e5a0652d6a72024a0c17f5271add38168d1ab3.json new file mode 100644 index 0000000000..57989bb6de --- /dev/null +++ b/backend/.sqlx/query-597b89889c3820fe7986b834c0e5a0652d6a72024a0c17f5271add38168d1ab3.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET operator_settings = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Text" + ] + }, + "nullable": [] + }, + "hash": "597b89889c3820fe7986b834c0e5a0652d6a72024a0c17f5271add38168d1ab3" +} diff --git a/backend/.sqlx/query-64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79.json b/backend/.sqlx/query-64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79.json deleted file mode 100644 index d201c1c08e..0000000000 --- a/backend/.sqlx/query-64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "select path from script where hash = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "path", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Int8", - "Text" - ] - }, - "nullable": [ - false - ] - }, - "hash": "64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79" -} diff --git a/backend/migrations/20250122211942_operator_settings.down.sql b/backend/migrations/20250122211942_operator_settings.down.sql new file mode 100644 index 0000000000..4831bcdf10 --- /dev/null +++ b/backend/migrations/20250122211942_operator_settings.down.sql @@ -0,0 +1 @@ +ALTER TABLE workspace_settings DROP COLUMN operator_settings; \ No newline at end of file diff --git a/backend/migrations/20250122211942_operator_settings.up.sql b/backend/migrations/20250122211942_operator_settings.up.sql new file mode 100644 index 0000000000..22bbddb17c --- /dev/null +++ b/backend/migrations/20250122211942_operator_settings.up.sql @@ -0,0 +1,11 @@ +ALTER TABLE workspace_settings ADD COLUMN operator_settings JSONB DEFAULT '{ + "runs": true, + "groups": true, + "folders": true, + "workers": true, + "triggers": true, + "resources": true, + "schedules": true, + "variables": true, + "audit_logs": true +}'; diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 537ae2892c..6819bb5553 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -1618,6 +1618,29 @@ paths: schema: $ref: "#/components/schemas/User" + /w/{workspace}/workspaces/operator_settings: + post: + operationId: updateOperatorSettings + summary: Update operator settings for a workspace + description: Updates the operator settings for a specific workspace. Requires workspace admin privileges. + tags: + - workspace + parameters: + - $ref: "#/components/parameters/WorkspaceId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/OperatorSettings" + responses: + '200': + description: Operator settings updated successfully + content: + text/plain: + schema: + type: string + /users/exists/{email}: get: summary: exists email @@ -1745,6 +1768,8 @@ paths: type: boolean color: type: string + operator_settings: + $ref: "#/components/schemas/OperatorSettings" required: - code_completion_enabled - automatic_billing @@ -13643,6 +13668,8 @@ components: type: string color: type: string + operator_settings: + $ref: "#/components/schemas/OperatorSettings" required: - id - name @@ -14501,6 +14528,48 @@ components: required: - trigger_kind + OperatorSettings: + nullable: true + type: object + required: + - runs + - schedules + - resources + - variables + - triggers + - audit_logs + - groups + - folders + - workers + properties: + runs: + type: boolean + description: Whether operators can view runs + schedules: + type: boolean + description: Whether operators can view schedules + resources: + type: boolean + description: Whether operators can view resources + variables: + type: boolean + description: Whether operators can view variables + audit_logs: + type: boolean + description: Whether operators can view audit logs + triggers: + type: boolean + description: Whether operators can view triggers + groups: + type: boolean + description: Whether operators can view groups page + folders: + type: boolean + description: Whether operators can view folders page + workers: + type: boolean + description: Whether operators can view workers page + TeamInfo: type: object required: @@ -14521,7 +14590,7 @@ components: description: List of channels within the team items: $ref: '#/components/schemas/ChannelInfo' - + ChannelInfo: type: object required: diff --git a/backend/windmill-api/src/workspaces.rs b/backend/windmill-api/src/workspaces.rs index a4adc61977..3758f5def4 100644 --- a/backend/windmill-api/src/workspaces.rs +++ b/backend/windmill-api/src/workspaces.rs @@ -121,7 +121,8 @@ pub fn workspaced_service() -> Router { "/critical_alerts/acknowledge_all", post(acknowledge_all_critical_alerts), ) - .route("/critical_alerts/mute", post(mute_critical_alerts)); + .route("/critical_alerts/mute", post(mute_critical_alerts)) + .route("/operator_settings", post(update_operator_settings)); #[cfg(feature = "stripe")] { @@ -188,6 +189,7 @@ pub struct WorkspaceSettings { pub default_scripts: Option, pub mute_critical_alerts: Option, pub color: Option, + pub operator_settings: Option, } #[derive(FromRow, Serialize, Debug)] @@ -286,6 +288,7 @@ struct UserWorkspace { pub name: String, pub username: String, pub color: Option, + pub operator_settings: Option>, } #[derive(Deserialize)] @@ -1366,7 +1369,8 @@ async fn user_workspaces( let mut tx = db.begin().await?; let workspaces = sqlx::query_as!( UserWorkspace, - "SELECT workspace.id, workspace.name, usr.username, workspace_settings.color + "SELECT workspace.id, workspace.name, usr.username, workspace_settings.color, + CASE WHEN usr.operator THEN workspace_settings.operator_settings ELSE NULL END as operator_settings FROM workspace JOIN usr ON usr.workspace_id = workspace.id JOIN workspace_settings ON workspace_settings.workspace_id = workspace.id @@ -2135,3 +2139,41 @@ async fn mute_critical_alerts( pub async fn mute_critical_alerts() -> Error { Error::NotFound("Critical Alerts require EE".to_string()) } + +#[derive(Deserialize, Serialize)] +struct ChangeOperatorSettings { + runs: bool, + schedules: bool, + resources: bool, + variables: bool, + triggers: bool, + audit_logs: bool, + groups: bool, + folders: bool, + workers: bool, +} + +async fn update_operator_settings( + authed: ApiAuthed, + Path(w_id): Path, + Extension(db): Extension, + Json(settings): Json, +) -> Result { + require_admin(authed.is_admin, &authed.username)?; + + let mut tx = db.begin().await?; + + let settings_json = serde_json::json!(settings); + + sqlx::query!( + "UPDATE workspace_settings SET operator_settings = $1 WHERE workspace_id = $2", + settings_json, + &w_id + ) + .execute(&mut *tx) + .await?; + + tx.commit().await?; + + Ok("Operator settings updated successfully".to_string()) +} diff --git a/frontend/src/lib/components/settings/WorkspaceOperatorSettings.svelte b/frontend/src/lib/components/settings/WorkspaceOperatorSettings.svelte new file mode 100644 index 0000000000..f12062493f --- /dev/null +++ b/frontend/src/lib/components/settings/WorkspaceOperatorSettings.svelte @@ -0,0 +1,144 @@ + + +
+
+
+
+
+ Configure the operator visibility settings for your workspace. Toggle the settings you + want to enable. +
+
+
+ +
+
+
+ +
+ + + + Section + Description + + + + + + + + + + {#each Object.entries(descriptions) as [key, { title, description }]} + + {title} + {description} + + + + + + + + {/each} + + +
+ +
+ +
+
+
diff --git a/frontend/src/lib/components/settings/WorkspaceUserSettings.svelte b/frontend/src/lib/components/settings/WorkspaceUserSettings.svelte index 43aa4af06c..11ed4ae402 100644 --- a/frontend/src/lib/components/settings/WorkspaceUserSettings.svelte +++ b/frontend/src/lib/components/settings/WorkspaceUserSettings.svelte @@ -3,7 +3,7 @@ import { Badge, Button, Popup, Skeleton } from '$lib/components/common' import ToggleButton from '$lib/components/common/toggleButton-v2/ToggleButton.svelte' import ToggleButtonGroup from '$lib/components/common/toggleButton-v2/ToggleButtonGroup.svelte' - + import WorkspaceOperatorSettings from '$lib/components/settings/WorkspaceOperatorSettings.svelte' import InviteUser from '$lib/components/InviteUser.svelte' import PageHeader from '$lib/components/PageHeader.svelte' @@ -441,6 +441,8 @@ + + {#if showInvites} + link.id === 'home' || + ($userWorkspaces && $workspaceStore && $userWorkspaces.find((_) => _.id === $workspaceStore)?.operator_settings?.[link.id] === true) + ) - let secondMenuLinks = [ + $: secondMenuLinks = [ { label: 'Resources', + id: 'resources', href: `${base}/resources` }, { label: 'Variables', + id: 'variables', href: `${base}/variables` }, { label: 'Custom HTTP routes', + id: 'triggers', href: `${base}/routes` }, { label: 'Websocket triggers', + id: 'triggers', href: `${base}/websocket_triggers` }, { label: 'Postgres triggers', - href: `${base}/kafka_triggers` + id: 'triggers', + href: `${base}/postgres_triggers` }, { label: 'Kafka triggers', + id: 'triggers', href: `${base}/kafka_triggers` }, { label: 'NATS triggers', + id: 'triggers', href: `${base}/nats_triggers` }, { label: 'Audit logs', + id: 'audit_logs', href: `${base}/audit_logs` }, { label: 'Groups', + id: 'groups', href: `${base}/groups` }, { label: 'Folders', + id: 'folders', href: `${base}/folders` }, { label: 'Workers', + id: 'workers', href: `${base}/workers` } - ] + ].filter((link) => { + if (!$userWorkspaces || !$workspaceStore) return false; + return $userWorkspaces.find((_) => _.id === $workspaceStore)?.operator_settings?.[link.id] === true + }) let moreOpen = false @@ -208,7 +226,7 @@ class="divide-y" role="none" > - {#if moreOpen == false} + {#if moreOpen == false && secondMenuLinks.length > 0}
More...
{:else} {#each secondMenuLinks as menuLink (menuLink.href ?? menuLink.label)} diff --git a/frontend/src/lib/stores.ts b/frontend/src/lib/stores.ts index 353eeeac7c..98886e1bc0 100644 --- a/frontend/src/lib/stores.ts +++ b/frontend/src/lib/stores.ts @@ -1,9 +1,11 @@ import { BROWSER } from 'esm-env' import { derived, type Readable, writable } from 'svelte/store' + import { type WorkspaceDefaultScripts, type TokenResponse, type UserWorkspaceList, + type OperatorSettings } from './gen' import type { IntrospectionQuery } from 'graphql' import { getLocalSetting } from './utils' @@ -60,6 +62,7 @@ export const userWorkspaces: Readable< name: string username: string color: string | null + operator_settings?: OperatorSettings }> > = derived([usersWorkspaceStore, superadmin], ([store, superadmin]) => { const originalWorkspaces = store?.workspaces ?? [] @@ -70,7 +73,8 @@ export const userWorkspaces: Readable< id: 'admins', name: 'Admins', username: 'superadmin', - color: null + color: null, + operator_settings: null } ] } else { diff --git a/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte b/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte index 22f301af5b..498a0d1293 100644 --- a/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte @@ -12,7 +12,7 @@ import SplitPanesWrapper from '$lib/components/splitPanes/SplitPanesWrapper.svelte' import type { AuditLog } from '$lib/gen' - import { enterpriseLicense } from '$lib/stores' + import { enterpriseLicense, userStore, workspaceStore, userWorkspaces } from '$lib/stores' import { Splitpanes, Pane } from 'svelte-splitpanes' let username: string = $page.url.searchParams.get('username') ?? 'all' @@ -32,6 +32,12 @@ let auditLogDrawer: Drawer +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.audit_logs} + +{:else}
@@ -118,6 +124,7 @@ />
+{/if} diff --git a/frontend/src/routes/(root)/(logged)/folders/+page.svelte b/frontend/src/routes/(root)/(logged)/folders/+page.svelte index 4bcbc02c8c..090223ebbd 100644 --- a/frontend/src/routes/(root)/(logged)/folders/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/folders/+page.svelte @@ -6,7 +6,7 @@ import Dropdown from '$lib/components/DropdownV2.svelte' import FolderEditor from '$lib/components/FolderEditor.svelte' import PageHeader from '$lib/components/PageHeader.svelte' - import { userStore, workspaceStore } from '$lib/stores' + import { userStore, workspaceStore, userWorkspaces } from '$lib/stores' import { Button, Drawer, DrawerContent, Popup, Skeleton } from '$lib/components/common' import FolderInfo from '$lib/components/FolderInfo.svelte' import FolderUsageInfo from '$lib/components/FolderUsageInfo.svelte' @@ -78,6 +78,12 @@ +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.folders} + +{:else}
+{/if} diff --git a/frontend/src/routes/(root)/(logged)/groups/+page.svelte b/frontend/src/routes/(root)/(logged)/groups/+page.svelte index d1fc02a826..93fc04d45d 100644 --- a/frontend/src/routes/(root)/(logged)/groups/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/groups/+page.svelte @@ -11,7 +11,7 @@ import PageHeader from '$lib/components/PageHeader.svelte' import SharedBadge from '$lib/components/SharedBadge.svelte' import TableCustom from '$lib/components/TableCustom.svelte' - import { userStore, workspaceStore } from '$lib/stores' + import { userStore, workspaceStore, userWorkspaces } from '$lib/stores' import { canWrite } from '$lib/utils' import { Pen, Plus, Trash } from 'lucide-svelte' import DataTable from '$lib/components/table/DataTable.svelte' @@ -73,6 +73,12 @@ +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.groups} + +{:else} {/if} +{/if} diff --git a/frontend/src/routes/(root)/(logged)/kafka_triggers/+page.svelte b/frontend/src/routes/(root)/(logged)/kafka_triggers/+page.svelte index f66a7beca1..13c9cfd1d9 100644 --- a/frontend/src/routes/(root)/(logged)/kafka_triggers/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/kafka_triggers/+page.svelte @@ -15,7 +15,7 @@ import SharedBadge from '$lib/components/SharedBadge.svelte' import ShareModal from '$lib/components/ShareModal.svelte' import Toggle from '$lib/components/Toggle.svelte' - import { userStore, workspaceStore } from '$lib/stores' + import { userStore, workspaceStore, userWorkspaces } from '$lib/stores' import { Code, Eye, Pen, Plus, Share, Trash, Circle } from 'lucide-svelte' import { goto } from '$lib/navigation' import SearchItems from '$lib/components/SearchItems.svelte' @@ -208,6 +208,12 @@ f={(x) => (x.summary ?? '') + ' ' + x.path + ' (' + x.script_path + ')'} /> +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.triggers} + +{:else} {/if} +{/if} (x.summary ?? '') + ' ' + x.path + ' (' + x.script_path + ')'} /> +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.triggers} + +{:else} {/if} +{/if} x.path + ' ' + x.resource_type + ' ' + x.description + ' '} /> +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.resources} + +{:else} +{/if} diff --git a/frontend/src/routes/(root)/(logged)/routes/+page.svelte b/frontend/src/routes/(root)/(logged)/routes/+page.svelte index 6666df29ec..bd12e6d5eb 100644 --- a/frontend/src/routes/(root)/(logged)/routes/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/routes/+page.svelte @@ -9,7 +9,7 @@ import SharedBadge from '$lib/components/SharedBadge.svelte' import ShareModal from '$lib/components/ShareModal.svelte' import Toggle from '$lib/components/Toggle.svelte' - import { userStore, workspaceStore } from '$lib/stores' + import { userStore, workspaceStore, userWorkspaces } from '$lib/stores' import { Route, Code, Eye, Pen, Plus, Share, Trash } from 'lucide-svelte' import { goto } from '$lib/navigation' import SearchItems from '$lib/components/SearchItems.svelte' @@ -156,6 +156,12 @@ f={(x) => (x.summary ?? '') + ' ' + x.path + ' (' + x.script_path + ')'} /> +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.triggers} + +{:else} {/if} +{/if} +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.runs} + +{:else} {#if innerWidth > 900}
@@ -1371,3 +1377,4 @@
{/if} +{/if} diff --git a/frontend/src/routes/(root)/(logged)/schedules/+page.svelte b/frontend/src/routes/(root)/(logged)/schedules/+page.svelte index f440e54600..cad5a7ee4f 100644 --- a/frontend/src/routes/(root)/(logged)/schedules/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/schedules/+page.svelte @@ -11,7 +11,7 @@ import SharedBadge from '$lib/components/SharedBadge.svelte' import ShareModal from '$lib/components/ShareModal.svelte' import Toggle from '$lib/components/Toggle.svelte' - import { userStore, workspaceStore } from '$lib/stores' + import { userStore, workspaceStore, userWorkspaces } from '$lib/stores' import { Calendar, Circle, @@ -232,9 +232,12 @@ } onMount(() => { + console.log(`on mount: `, $userStore?.operator, $workspaceStore, $userWorkspaces) loadQueryFilters() }) + $: $userWorkspaces && $userStore && $workspaceStore && console.log(`user workspaces: `, $userWorkspaces) + $: updateQueryFilters(selectedFilterKind, filterUserFolders, filterEnabledDisabled) @@ -247,6 +250,12 @@ f={(x) => (x.summary ?? '') + ' ' + x.path + ' (' + x.script_path + ')'} /> +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.schedules} + +{:else} {/if} +{/if} x.path + ' ' + x.description} /> +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.variables} + +{:else} {/if} +{/if} +{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.workers} + +{:else} {/if} +{/if} From 7084d2e61a0ee8c0ac636f22ae4ff89db4845c86 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 24 Jan 2025 18:21:21 +0100 Subject: [PATCH 03/85] chore(main): release 1.449.0 (#5122) * chore(main): release 1.449.0 * Apply automatic changes --------- Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com> --- CHANGELOG.md | 15 ++++ backend/Cargo.lock | 78 +++++++++---------- backend/Cargo.toml | 4 +- backend/windmill-api/openapi.yaml | 2 +- benchmarks/lib.ts | 2 +- cli/main.ts | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- lsp/Pipfile | 4 +- openflow.openapi.yaml | 2 +- .../WindmillClient/WindmillClient.psd1 | 2 +- python-client/wmill/pyproject.toml | 2 +- python-client/wmill_pg/pyproject.toml | 2 +- typescript-client/jsr.json | 2 +- typescript-client/package.json | 2 +- version.txt | 2 +- 16 files changed, 71 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4de463cfa..12e0a8ff60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [1.449.0](https://github.com/windmill-labs/windmill/compare/v1.448.1...v1.449.0) (2025-01-24) + + +### Features + +* **frontend:** operator visibility setting per workspace ([#5124](https://github.com/windmill-labs/windmill/issues/5124)) ([1a1ea68](https://github.com/windmill-labs/windmill/commit/1a1ea682166af62133d3df2816490e3ebc92462f)) +* msft teams support for critical alerts ([#5113](https://github.com/windmill-labs/windmill/issues/5113)) ([a88fbb2](https://github.com/windmill-labs/windmill/commit/a88fbb238ae21ca53bccd53ccfd3c77e2946fda2)) +* postgres triggers ([#4860](https://github.com/windmill-labs/windmill/issues/4860)) ([316a216](https://github.com/windmill-labs/windmill/commit/316a2167e7648052afb3d7456c5ab9324348e56c)) +* **python:** Multiple runtime versions ([#4579](https://github.com/windmill-labs/windmill/issues/4579)) ([e47dd69](https://github.com/windmill-labs/windmill/commit/e47dd697f96883f8f97bf469e69d3344f12d9633)) + + +### Bug Fixes + +* **bun, windows:** Fix "A required privilege is not held by the client." ([#5126](https://github.com/windmill-labs/windmill/issues/5126)) ([74bb660](https://github.com/windmill-labs/windmill/commit/74bb660b9799e79e31c33d96a4f06d77094287d5)) + ## [1.448.1](https://github.com/windmill-labs/windmill/compare/v1.448.0...v1.448.1) (2025-01-22) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index aa79cf5e13..c2dea6d120 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -651,9 +651,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-config" -version = "1.5.14" +version = "1.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f40e82e858e02445402906e454a73e244c7f501fcae198977585946c48e8697" +checksum = "dc47e70fc35d054c8fcd296d47a61711f043ac80534a10b4f741904f81e73a90" dependencies = [ "aws-credential-types", "aws-runtime", @@ -718,9 +718,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.55.0" +version = "1.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33993c0b054f4251ff2946941b56c26b582677303eeca34087594eb901ece022" +checksum = "12e057fdcb8842de9b83592a70f5b4da0ee10bc0ad278247da1425a742a444d7" dependencies = [ "aws-credential-types", "aws-runtime", @@ -740,9 +740,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.56.0" +version = "1.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd3ceba74a584337a8f3839c818f14f1a2288bfd24235120ff22d7e17a0dd54" +checksum = "aba487b6a05de9858f83c05133ddd1b465be60b95460491f96c5c7b761823a04" dependencies = [ "aws-credential-types", "aws-runtime", @@ -762,9 +762,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.56.0" +version = "1.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07835598e52dd354368429cb2abf447ce523ea446d0a533a63cb42cd0d2d9280" +checksum = "115fd4fb663817ed595a5ee4f1649d7aacd861d47462323cb37576ce89271b93" dependencies = [ "aws-credential-types", "aws-runtime", @@ -2661,9 +2661,9 @@ dependencies = [ [[package]] name = "deno_media_type" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "577fe2bbe04f3e9b1b7c6fac6a75101a9fbd611c50a6b68789e69f4d63dcb2b4" +checksum = "600222d059ab31ff31182b3e12615df2134a9e01605836b78ad8df91ba39eab3" dependencies = [ "data-url", "serde", @@ -5779,9 +5779,9 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-src" @@ -10280,9 +10280,9 @@ checksum = "2f322b60f6b9736017344fa0635d64be2f458fbc04eef65f6be22976dd1ffd5b" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" [[package]] name = "unicode-normalization" @@ -10785,7 +10785,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windmill" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "axum", @@ -10827,7 +10827,7 @@ dependencies = [ [[package]] name = "windmill-api" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "argon2", @@ -10919,7 +10919,7 @@ dependencies = [ [[package]] name = "windmill-api-client" -version = "1.448.1" +version = "1.449.0" dependencies = [ "base64 0.22.1", "chrono", @@ -10937,7 +10937,7 @@ dependencies = [ [[package]] name = "windmill-audit" -version = "1.448.1" +version = "1.449.0" dependencies = [ "chrono", "serde", @@ -10950,7 +10950,7 @@ dependencies = [ [[package]] name = "windmill-autoscaling" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "serde", @@ -10964,7 +10964,7 @@ dependencies = [ [[package]] name = "windmill-common" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "async-stream", @@ -11023,7 +11023,7 @@ dependencies = [ [[package]] name = "windmill-git-sync" -version = "1.448.1" +version = "1.449.0" dependencies = [ "regex", "serde", @@ -11037,7 +11037,7 @@ dependencies = [ [[package]] name = "windmill-indexer" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "bytes", @@ -11060,7 +11060,7 @@ dependencies = [ [[package]] name = "windmill-macros" -version = "1.448.1" +version = "1.449.0" dependencies = [ "itertools 0.14.0", "lazy_static", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "windmill-parser" -version = "1.448.1" +version = "1.449.0" dependencies = [ "convert_case 0.6.0", "serde", @@ -11081,7 +11081,7 @@ dependencies = [ [[package]] name = "windmill-parser-bash" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "lazy_static", @@ -11093,7 +11093,7 @@ dependencies = [ [[package]] name = "windmill-parser-csharp" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "serde_json", @@ -11105,7 +11105,7 @@ dependencies = [ [[package]] name = "windmill-parser-go" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "gosyn", @@ -11117,7 +11117,7 @@ dependencies = [ [[package]] name = "windmill-parser-graphql" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "lazy_static", @@ -11129,7 +11129,7 @@ dependencies = [ [[package]] name = "windmill-parser-php" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11140,7 +11140,7 @@ dependencies = [ [[package]] name = "windmill-parser-py" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11151,7 +11151,7 @@ dependencies = [ [[package]] name = "windmill-parser-py-imports" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "async-recursion", @@ -11169,7 +11169,7 @@ dependencies = [ [[package]] name = "windmill-parser-rust" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "convert_case 0.6.0", @@ -11186,7 +11186,7 @@ dependencies = [ [[package]] name = "windmill-parser-sql" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "lazy_static", @@ -11198,7 +11198,7 @@ dependencies = [ [[package]] name = "windmill-parser-ts" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "lazy_static", @@ -11216,7 +11216,7 @@ dependencies = [ [[package]] name = "windmill-parser-wasm" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "getrandom 0.2.15", @@ -11238,7 +11238,7 @@ dependencies = [ [[package]] name = "windmill-parser-yaml" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "serde_json", @@ -11248,7 +11248,7 @@ dependencies = [ [[package]] name = "windmill-queue" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "async-recursion", @@ -11281,7 +11281,7 @@ dependencies = [ [[package]] name = "windmill-sql-datatype-parser-wasm" -version = "1.448.1" +version = "1.449.0" dependencies = [ "wasm-bindgen", "wasm-bindgen-test", @@ -11291,7 +11291,7 @@ dependencies = [ [[package]] name = "windmill-worker" -version = "1.448.1" +version = "1.449.0" dependencies = [ "anyhow", "async-recursion", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 2ef62c9f57..7b72b16611 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "windmill" -version = "1.448.1" +version = "1.449.0" authors.workspace = true edition.workspace = true @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "1.448.1" +version = "1.449.0" authors = ["Ruben Fiszel "] edition = "2021" diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 6819bb5553..af485e0cc5 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.448.1 + version: 1.449.0 title: Windmill API contact: diff --git a/benchmarks/lib.ts b/benchmarks/lib.ts index cedf27fb7b..85091b8841 100644 --- a/benchmarks/lib.ts +++ b/benchmarks/lib.ts @@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts"; import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts"; import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts"; -export const VERSION = "v1.448.1"; +export const VERSION = "v1.449.0"; export async function login(email: string, password: string): Promise { return await windmill.UserService.login({ diff --git a/cli/main.ts b/cli/main.ts index 59b672bdf8..9f37785809 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -60,7 +60,7 @@ export { // } // }); -export const VERSION = "1.448.1"; +export const VERSION = "1.449.0"; const command = new Command() .name("wmill") diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 01d0951aca..5855d4c673 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "windmill-components", - "version": "1.448.1", + "version": "1.449.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "windmill-components", - "version": "1.448.1", + "version": "1.449.0", "license": "AGPL-3.0", "dependencies": { "@anthropic-ai/sdk": "^0.32.1", diff --git a/frontend/package.json b/frontend/package.json index bd4f81e8a5..2e35acd242 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "windmill-components", - "version": "1.448.1", + "version": "1.449.0", "scripts": { "dev": "vite dev", "build": "vite build", diff --git a/lsp/Pipfile b/lsp/Pipfile index 2fa2caa1f0..c8d80b188c 100644 --- a/lsp/Pipfile +++ b/lsp/Pipfile @@ -4,8 +4,8 @@ verify_ssl = true name = "pypi" [packages] -wmill = ">=1.448.1" -wmill_pg = ">=1.448.1" +wmill = ">=1.449.0" +wmill_pg = ">=1.449.0" sendgrid = "*" mysql-connector-python = "*" pymongo = "*" diff --git a/openflow.openapi.yaml b/openflow.openapi.yaml index 5ce7f73b0f..d08759f72b 100644 --- a/openflow.openapi.yaml +++ b/openflow.openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.448.1 + version: 1.449.0 title: OpenFlow Spec contact: name: Ruben Fiszel diff --git a/powershell-client/WindmillClient/WindmillClient.psd1 b/powershell-client/WindmillClient/WindmillClient.psd1 index b9e9b63862..c7cba1cb55 100644 --- a/powershell-client/WindmillClient/WindmillClient.psd1 +++ b/powershell-client/WindmillClient/WindmillClient.psd1 @@ -12,7 +12,7 @@ RootModule = 'WindmillClient.psm1' # Version number of this module. - ModuleVersion = '1.448.1' + ModuleVersion = '1.449.0' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/python-client/wmill/pyproject.toml b/python-client/wmill/pyproject.toml index 537764407d..71cdb1e681 100644 --- a/python-client/wmill/pyproject.toml +++ b/python-client/wmill/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill" -version = "1.448.1" +version = "1.449.0" description = "A client library for accessing Windmill server wrapping the Windmill client API" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/python-client/wmill_pg/pyproject.toml b/python-client/wmill_pg/pyproject.toml index 6f3b1c40eb..a3a32128f4 100644 --- a/python-client/wmill_pg/pyproject.toml +++ b/python-client/wmill_pg/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill-pg" -version = "1.448.1" +version = "1.449.0" description = "An extension client for the wmill client library focused on pg" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/typescript-client/jsr.json b/typescript-client/jsr.json index 773bc3f561..3862b5fff9 100644 --- a/typescript-client/jsr.json +++ b/typescript-client/jsr.json @@ -1,6 +1,6 @@ { "name": "@windmill/windmill", - "version": "1.448.1", + "version": "1.449.0", "exports": "./src/index.ts", "publish": { "exclude": ["!src", "./s3Types.ts", "./client.ts"] diff --git a/typescript-client/package.json b/typescript-client/package.json index cd431c71c4..ef5b9f2742 100644 --- a/typescript-client/package.json +++ b/typescript-client/package.json @@ -1,7 +1,7 @@ { "name": "windmill-client", "description": "Windmill SDK client for browsers and Node.js", - "version": "1.448.1", + "version": "1.449.0", "author": "Ruben Fiszel", "license": "Apache 2.0", "devDependencies": { diff --git a/version.txt b/version.txt index 738d56fd9f..f76595875c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.448.1 +1.449.0 From ecf2222f18bc6f7b963b116c05bcb09487d8c09a Mon Sep 17 00:00:00 2001 From: Henri Courdent <122811744+hcourdent@users.noreply.github.com> Date: Fri, 24 Jan 2025 19:33:12 +0100 Subject: [PATCH 04/85] Changelogs frontend update (#5129) --- .../src/lib/components/sidebar/changelogs.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/frontend/src/lib/components/sidebar/changelogs.ts b/frontend/src/lib/components/sidebar/changelogs.ts index 9ee437224c..cd3ea063da 100644 --- a/frontend/src/lib/components/sidebar/changelogs.ts +++ b/frontend/src/lib/components/sidebar/changelogs.ts @@ -5,6 +5,46 @@ export type Changelog = { } const changelogs: Changelog[] = [ + { + label: 'Select Python version', + href: 'https://www.windmill.dev/changelog/select-python-version', + date: '2025-01-24' + }, + { + label: 'Postgres triggers', + href: 'https://www.windmill.dev/changelog/postgres-triggers', + date: '2025-01-24' + }, + { + label: 'Oracle support', + href: 'https://www.windmill.dev/changelog/oracle-support', + date: '2025-01-15' + }, + { + label: 'NATS triggers', + href: 'https://www.windmill.dev/changelog/nats-triggers', + date: '2025-01-15' + }, + { + label: 'Workspace color', + href: 'https://www.windmill.dev/changelog/workspace-color', + date: '2025-01-10' + }, + { + label: 'Interactive Slack approval steps', + href: 'https://www.windmill.dev/changelog/slack-approval-steps', + date: '2024-12-20' + }, + { + label: 'C#', + href: 'https://www.windmill.dev/changelog/csharp', + date: '2024-12-13' + }, + { + label: 'App custom URL', + href: 'https://www.windmill.dev/changelog/app-custom-url', + date: '2024-12-05' + }, { label: 'Full text search on jobs and logs', href: 'https://www.windmill.dev/changelog/instant-full-text-search-on-jobs-and-logs', From 2f1804b6d0e6f3492608967f8937d5e34481661b Mon Sep 17 00:00:00 2001 From: pyranota <92104930+pyranota@users.noreply.github.com> Date: Sat, 25 Jan 2025 14:38:32 +0300 Subject: [PATCH 05/85] fix: Fix python refetching wheels from S3 (#5133) --- backend/windmill-worker/src/python_executor.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/backend/windmill-worker/src/python_executor.rs b/backend/windmill-worker/src/python_executor.rs index 4d3a946926..001f771eb7 100644 --- a/backend/windmill-worker/src/python_executor.rs +++ b/backend/windmill-worker/src/python_executor.rs @@ -2158,6 +2158,18 @@ pub async fn handle_python_reqs( db ).await; pids.lock().await.get_mut(i).and_then(|e| e.take()); + + // Create a file to indicate that installation was successfull + let valid_path = venv_p.clone() + "/.valid.windmill"; + // This is atomic operation, meaning, that it either completes and wheel is valid, + // or it does not and wheel is invalid and will be reinstalled next run + if let Err(e) = File::create(&valid_path).await{ + tracing::error!( + workspace_id = %w_id, + job_id = %job_id, + "Failed to create {}!\n{e}\n + This file needed for python jobs to function", valid_path) + }; return Ok(()); } } From 411ad1b190623f716be02901eb4d3fa53d295d9e Mon Sep 17 00:00:00 2001 From: dieriba Date: Sat, 25 Jan 2025 12:48:29 +0100 Subject: [PATCH 06/85] nit triggers --- backend/windmill-api/src/postgres_triggers/trigger.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/windmill-api/src/postgres_triggers/trigger.rs b/backend/windmill-api/src/postgres_triggers/trigger.rs index 0ed9891cbc..2e84c0c7ec 100644 --- a/backend/windmill-api/src/postgres_triggers/trigger.rs +++ b/backend/windmill-api/src/postgres_triggers/trigger.rs @@ -359,7 +359,7 @@ async fn listen_to_transactions( Some((update.o_id, relations.body_to_json((update.o_id, update.new_tuple)), "update")) } Delete(delete) => { - let body = delete.old_tuple.unwrap_or(delete.key_tuple.unwrap()); + let body = delete.old_tuple.unwrap_or_else(|| delete.key_tuple.unwrap()); Some((delete.o_id, relations.body_to_json((delete.o_id, body)), "delete")) } }; From 1ac63641b9c34a1ed54bc87537ebb7aa92d389c8 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 25 Jan 2025 12:49:38 +0100 Subject: [PATCH 07/85] chore(main): release 1.449.1 (#5134) * chore(main): release 1.449.1 * Apply automatic changes --------- Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com> --- CHANGELOG.md | 7 ++ backend/Cargo.lock | 74 +++++++++---------- backend/Cargo.toml | 4 +- backend/windmill-api/openapi.yaml | 2 +- benchmarks/lib.ts | 2 +- cli/main.ts | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- lsp/Pipfile | 4 +- openflow.openapi.yaml | 2 +- .../WindmillClient/WindmillClient.psd1 | 2 +- python-client/wmill/pyproject.toml | 2 +- python-client/wmill_pg/pyproject.toml | 2 +- typescript-client/jsr.json | 2 +- typescript-client/package.json | 2 +- version.txt | 2 +- 16 files changed, 61 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12e0a8ff60..82599a6ad0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.449.1](https://github.com/windmill-labs/windmill/compare/v1.449.0...v1.449.1) (2025-01-25) + + +### Bug Fixes + +* Fix python refetching wheels from S3 ([#5133](https://github.com/windmill-labs/windmill/issues/5133)) ([2f1804b](https://github.com/windmill-labs/windmill/commit/2f1804b6d0e6f3492608967f8937d5e34481661b)) + ## [1.449.0](https://github.com/windmill-labs/windmill/compare/v1.448.1...v1.449.0) (2025-01-24) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index c2dea6d120..f49cb5b62f 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -740,9 +740,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.57.0" +version = "1.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aba487b6a05de9858f83c05133ddd1b465be60b95460491f96c5c7b761823a04" +checksum = "a120ade4a44691b3c5c2ff2fa61b14ed331fdc218397f61ab48d66593012ae2a" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1893,9 +1893,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -5064,9 +5064,9 @@ dependencies = [ [[package]] name = "malachite" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5616515d632967cd329b6f6db96be9a03ea0b3a49cdbc45b0016803dad8a77b7" +checksum = "4a6ecab92657eb234bfe98abd0b17920772c6b14ce69256950142e2eb36d000b" dependencies = [ "malachite-base", "malachite-nz", @@ -5075,9 +5075,9 @@ dependencies = [ [[package]] name = "malachite-base" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46059721011b0458b7bd6d9179be5d0b60294281c23320c207adceaecc54d13b" +checksum = "06f6d078bb4dad5b76f6a85737e6c9113667d199612a73eef375c56e75d5d4d5" dependencies = [ "hashbrown 0.14.5", "itertools 0.11.0", @@ -5100,9 +5100,9 @@ dependencies = [ [[package]] name = "malachite-nz" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1503b27e825cabd1c3d0ff1e95a39fb2ec9eab6fd3da6cfa41aec7091d273e78" +checksum = "ad61a09cde72dcdb8b2baaf3e71430c5bd94fb6753da89f17301a459f3e466db" dependencies = [ "itertools 0.11.0", "libm", @@ -5111,9 +5111,9 @@ dependencies = [ [[package]] name = "malachite-q" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a475503a70a3679dbe3b9b230a23622516742528ba614a7b2490f180ea9cb514" +checksum = "be4a9dfffb87667ae94e8320213d3f5419e3e37311bc6bf8f4d2ab9b44f3a535" dependencies = [ "itertools 0.11.0", "malachite-base", @@ -10785,7 +10785,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windmill" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "axum", @@ -10827,7 +10827,7 @@ dependencies = [ [[package]] name = "windmill-api" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "argon2", @@ -10919,7 +10919,7 @@ dependencies = [ [[package]] name = "windmill-api-client" -version = "1.449.0" +version = "1.449.1" dependencies = [ "base64 0.22.1", "chrono", @@ -10937,7 +10937,7 @@ dependencies = [ [[package]] name = "windmill-audit" -version = "1.449.0" +version = "1.449.1" dependencies = [ "chrono", "serde", @@ -10950,7 +10950,7 @@ dependencies = [ [[package]] name = "windmill-autoscaling" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "serde", @@ -10964,7 +10964,7 @@ dependencies = [ [[package]] name = "windmill-common" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "async-stream", @@ -11023,7 +11023,7 @@ dependencies = [ [[package]] name = "windmill-git-sync" -version = "1.449.0" +version = "1.449.1" dependencies = [ "regex", "serde", @@ -11037,7 +11037,7 @@ dependencies = [ [[package]] name = "windmill-indexer" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "bytes", @@ -11060,7 +11060,7 @@ dependencies = [ [[package]] name = "windmill-macros" -version = "1.449.0" +version = "1.449.1" dependencies = [ "itertools 0.14.0", "lazy_static", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "windmill-parser" -version = "1.449.0" +version = "1.449.1" dependencies = [ "convert_case 0.6.0", "serde", @@ -11081,7 +11081,7 @@ dependencies = [ [[package]] name = "windmill-parser-bash" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "lazy_static", @@ -11093,7 +11093,7 @@ dependencies = [ [[package]] name = "windmill-parser-csharp" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "serde_json", @@ -11105,7 +11105,7 @@ dependencies = [ [[package]] name = "windmill-parser-go" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "gosyn", @@ -11117,7 +11117,7 @@ dependencies = [ [[package]] name = "windmill-parser-graphql" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "lazy_static", @@ -11129,7 +11129,7 @@ dependencies = [ [[package]] name = "windmill-parser-php" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11140,7 +11140,7 @@ dependencies = [ [[package]] name = "windmill-parser-py" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11151,7 +11151,7 @@ dependencies = [ [[package]] name = "windmill-parser-py-imports" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "async-recursion", @@ -11169,7 +11169,7 @@ dependencies = [ [[package]] name = "windmill-parser-rust" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "convert_case 0.6.0", @@ -11186,7 +11186,7 @@ dependencies = [ [[package]] name = "windmill-parser-sql" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "lazy_static", @@ -11198,7 +11198,7 @@ dependencies = [ [[package]] name = "windmill-parser-ts" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "lazy_static", @@ -11216,7 +11216,7 @@ dependencies = [ [[package]] name = "windmill-parser-wasm" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "getrandom 0.2.15", @@ -11238,7 +11238,7 @@ dependencies = [ [[package]] name = "windmill-parser-yaml" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "serde_json", @@ -11248,7 +11248,7 @@ dependencies = [ [[package]] name = "windmill-queue" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "async-recursion", @@ -11281,7 +11281,7 @@ dependencies = [ [[package]] name = "windmill-sql-datatype-parser-wasm" -version = "1.449.0" +version = "1.449.1" dependencies = [ "wasm-bindgen", "wasm-bindgen-test", @@ -11291,7 +11291,7 @@ dependencies = [ [[package]] name = "windmill-worker" -version = "1.449.0" +version = "1.449.1" dependencies = [ "anyhow", "async-recursion", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 7b72b16611..967f9d86bf 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "windmill" -version = "1.449.0" +version = "1.449.1" authors.workspace = true edition.workspace = true @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "1.449.0" +version = "1.449.1" authors = ["Ruben Fiszel "] edition = "2021" diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index af485e0cc5..81dc07460c 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.0 + version: 1.449.1 title: Windmill API contact: diff --git a/benchmarks/lib.ts b/benchmarks/lib.ts index 85091b8841..4cbe108f36 100644 --- a/benchmarks/lib.ts +++ b/benchmarks/lib.ts @@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts"; import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts"; import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts"; -export const VERSION = "v1.449.0"; +export const VERSION = "v1.449.1"; export async function login(email: string, password: string): Promise { return await windmill.UserService.login({ diff --git a/cli/main.ts b/cli/main.ts index 9f37785809..c531ef6fcb 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -60,7 +60,7 @@ export { // } // }); -export const VERSION = "1.449.0"; +export const VERSION = "1.449.1"; const command = new Command() .name("wmill") diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5855d4c673..9fe72086ea 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "windmill-components", - "version": "1.449.0", + "version": "1.449.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "windmill-components", - "version": "1.449.0", + "version": "1.449.1", "license": "AGPL-3.0", "dependencies": { "@anthropic-ai/sdk": "^0.32.1", diff --git a/frontend/package.json b/frontend/package.json index 2e35acd242..e1b1f523bc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "windmill-components", - "version": "1.449.0", + "version": "1.449.1", "scripts": { "dev": "vite dev", "build": "vite build", diff --git a/lsp/Pipfile b/lsp/Pipfile index c8d80b188c..47a7074580 100644 --- a/lsp/Pipfile +++ b/lsp/Pipfile @@ -4,8 +4,8 @@ verify_ssl = true name = "pypi" [packages] -wmill = ">=1.449.0" -wmill_pg = ">=1.449.0" +wmill = ">=1.449.1" +wmill_pg = ">=1.449.1" sendgrid = "*" mysql-connector-python = "*" pymongo = "*" diff --git a/openflow.openapi.yaml b/openflow.openapi.yaml index d08759f72b..7f90305749 100644 --- a/openflow.openapi.yaml +++ b/openflow.openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.0 + version: 1.449.1 title: OpenFlow Spec contact: name: Ruben Fiszel diff --git a/powershell-client/WindmillClient/WindmillClient.psd1 b/powershell-client/WindmillClient/WindmillClient.psd1 index c7cba1cb55..1722a65186 100644 --- a/powershell-client/WindmillClient/WindmillClient.psd1 +++ b/powershell-client/WindmillClient/WindmillClient.psd1 @@ -12,7 +12,7 @@ RootModule = 'WindmillClient.psm1' # Version number of this module. - ModuleVersion = '1.449.0' + ModuleVersion = '1.449.1' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/python-client/wmill/pyproject.toml b/python-client/wmill/pyproject.toml index 71cdb1e681..04565c0b16 100644 --- a/python-client/wmill/pyproject.toml +++ b/python-client/wmill/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill" -version = "1.449.0" +version = "1.449.1" description = "A client library for accessing Windmill server wrapping the Windmill client API" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/python-client/wmill_pg/pyproject.toml b/python-client/wmill_pg/pyproject.toml index a3a32128f4..fdbcc005e7 100644 --- a/python-client/wmill_pg/pyproject.toml +++ b/python-client/wmill_pg/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill-pg" -version = "1.449.0" +version = "1.449.1" description = "An extension client for the wmill client library focused on pg" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/typescript-client/jsr.json b/typescript-client/jsr.json index 3862b5fff9..97d35ab2a2 100644 --- a/typescript-client/jsr.json +++ b/typescript-client/jsr.json @@ -1,6 +1,6 @@ { "name": "@windmill/windmill", - "version": "1.449.0", + "version": "1.449.1", "exports": "./src/index.ts", "publish": { "exclude": ["!src", "./s3Types.ts", "./client.ts"] diff --git a/typescript-client/package.json b/typescript-client/package.json index ef5b9f2742..7a9824700a 100644 --- a/typescript-client/package.json +++ b/typescript-client/package.json @@ -1,7 +1,7 @@ { "name": "windmill-client", "description": "Windmill SDK client for browsers and Node.js", - "version": "1.449.0", + "version": "1.449.1", "author": "Ruben Fiszel", "license": "Apache 2.0", "devDependencies": { diff --git a/version.txt b/version.txt index f76595875c..fadb61dea5 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.449.0 +1.449.1 From 5381c76b7d194d75f58d70b29aa3f5f8589fa899 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 25 Jan 2025 14:24:59 +0100 Subject: [PATCH 08/85] fix: update rust to 1.83.0 (#5135) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8e45b675a1..8f5c90a8aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ARG DEBIAN_IMAGE=debian:bookworm-slim -ARG RUST_IMAGE=rust:1.82-slim-bookworm +ARG RUST_IMAGE=rust:1.83-slim-bookworm ARG PYTHON_IMAGE=python:3.11.10-slim-bookworm FROM ${RUST_IMAGE} AS rust_base From 928ff002a17ca8eda7996acd1bb9f8f0c1b2a353 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 25 Jan 2025 15:00:15 +0100 Subject: [PATCH 09/85] chore(main): release 1.449.2 (#5136) * chore(main): release 1.449.2 * Apply automatic changes --------- Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com> --- CHANGELOG.md | 7 +++ backend/Cargo.lock | 50 +++++++++---------- backend/Cargo.toml | 4 +- backend/windmill-api/openapi.yaml | 2 +- benchmarks/lib.ts | 2 +- cli/main.ts | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- lsp/Pipfile | 4 +- openflow.openapi.yaml | 2 +- .../WindmillClient/WindmillClient.psd1 | 2 +- python-client/wmill/pyproject.toml | 2 +- python-client/wmill_pg/pyproject.toml | 2 +- typescript-client/jsr.json | 2 +- typescript-client/package.json | 2 +- version.txt | 2 +- 16 files changed, 49 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82599a6ad0..29408670eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.449.2](https://github.com/windmill-labs/windmill/compare/v1.449.1...v1.449.2) (2025-01-25) + + +### Bug Fixes + +* update rust to 1.83.0 ([#5135](https://github.com/windmill-labs/windmill/issues/5135)) ([5381c76](https://github.com/windmill-labs/windmill/commit/5381c76b7d194d75f58d70b29aa3f5f8589fa899)) + ## [1.449.1](https://github.com/windmill-labs/windmill/compare/v1.449.0...v1.449.1) (2025-01-25) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index f49cb5b62f..c95dfb3726 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -10785,7 +10785,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windmill" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "axum", @@ -10827,7 +10827,7 @@ dependencies = [ [[package]] name = "windmill-api" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "argon2", @@ -10919,7 +10919,7 @@ dependencies = [ [[package]] name = "windmill-api-client" -version = "1.449.1" +version = "1.449.2" dependencies = [ "base64 0.22.1", "chrono", @@ -10937,7 +10937,7 @@ dependencies = [ [[package]] name = "windmill-audit" -version = "1.449.1" +version = "1.449.2" dependencies = [ "chrono", "serde", @@ -10950,7 +10950,7 @@ dependencies = [ [[package]] name = "windmill-autoscaling" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "serde", @@ -10964,7 +10964,7 @@ dependencies = [ [[package]] name = "windmill-common" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "async-stream", @@ -11023,7 +11023,7 @@ dependencies = [ [[package]] name = "windmill-git-sync" -version = "1.449.1" +version = "1.449.2" dependencies = [ "regex", "serde", @@ -11037,7 +11037,7 @@ dependencies = [ [[package]] name = "windmill-indexer" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "bytes", @@ -11060,7 +11060,7 @@ dependencies = [ [[package]] name = "windmill-macros" -version = "1.449.1" +version = "1.449.2" dependencies = [ "itertools 0.14.0", "lazy_static", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "windmill-parser" -version = "1.449.1" +version = "1.449.2" dependencies = [ "convert_case 0.6.0", "serde", @@ -11081,7 +11081,7 @@ dependencies = [ [[package]] name = "windmill-parser-bash" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "lazy_static", @@ -11093,7 +11093,7 @@ dependencies = [ [[package]] name = "windmill-parser-csharp" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "serde_json", @@ -11105,7 +11105,7 @@ dependencies = [ [[package]] name = "windmill-parser-go" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "gosyn", @@ -11117,7 +11117,7 @@ dependencies = [ [[package]] name = "windmill-parser-graphql" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "lazy_static", @@ -11129,7 +11129,7 @@ dependencies = [ [[package]] name = "windmill-parser-php" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11140,7 +11140,7 @@ dependencies = [ [[package]] name = "windmill-parser-py" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11151,7 +11151,7 @@ dependencies = [ [[package]] name = "windmill-parser-py-imports" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "async-recursion", @@ -11169,7 +11169,7 @@ dependencies = [ [[package]] name = "windmill-parser-rust" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "convert_case 0.6.0", @@ -11186,7 +11186,7 @@ dependencies = [ [[package]] name = "windmill-parser-sql" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "lazy_static", @@ -11198,7 +11198,7 @@ dependencies = [ [[package]] name = "windmill-parser-ts" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "lazy_static", @@ -11216,7 +11216,7 @@ dependencies = [ [[package]] name = "windmill-parser-wasm" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "getrandom 0.2.15", @@ -11238,7 +11238,7 @@ dependencies = [ [[package]] name = "windmill-parser-yaml" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "serde_json", @@ -11248,7 +11248,7 @@ dependencies = [ [[package]] name = "windmill-queue" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "async-recursion", @@ -11281,7 +11281,7 @@ dependencies = [ [[package]] name = "windmill-sql-datatype-parser-wasm" -version = "1.449.1" +version = "1.449.2" dependencies = [ "wasm-bindgen", "wasm-bindgen-test", @@ -11291,7 +11291,7 @@ dependencies = [ [[package]] name = "windmill-worker" -version = "1.449.1" +version = "1.449.2" dependencies = [ "anyhow", "async-recursion", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 967f9d86bf..7ea9ee04dd 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "windmill" -version = "1.449.1" +version = "1.449.2" authors.workspace = true edition.workspace = true @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "1.449.1" +version = "1.449.2" authors = ["Ruben Fiszel "] edition = "2021" diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 81dc07460c..7cbab76c03 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.1 + version: 1.449.2 title: Windmill API contact: diff --git a/benchmarks/lib.ts b/benchmarks/lib.ts index 4cbe108f36..a310f7c900 100644 --- a/benchmarks/lib.ts +++ b/benchmarks/lib.ts @@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts"; import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts"; import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts"; -export const VERSION = "v1.449.1"; +export const VERSION = "v1.449.2"; export async function login(email: string, password: string): Promise { return await windmill.UserService.login({ diff --git a/cli/main.ts b/cli/main.ts index c531ef6fcb..9819695722 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -60,7 +60,7 @@ export { // } // }); -export const VERSION = "1.449.1"; +export const VERSION = "1.449.2"; const command = new Command() .name("wmill") diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9fe72086ea..cbbc382f25 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "windmill-components", - "version": "1.449.1", + "version": "1.449.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "windmill-components", - "version": "1.449.1", + "version": "1.449.2", "license": "AGPL-3.0", "dependencies": { "@anthropic-ai/sdk": "^0.32.1", diff --git a/frontend/package.json b/frontend/package.json index e1b1f523bc..fdee74a465 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "windmill-components", - "version": "1.449.1", + "version": "1.449.2", "scripts": { "dev": "vite dev", "build": "vite build", diff --git a/lsp/Pipfile b/lsp/Pipfile index 47a7074580..ae048a7d4e 100644 --- a/lsp/Pipfile +++ b/lsp/Pipfile @@ -4,8 +4,8 @@ verify_ssl = true name = "pypi" [packages] -wmill = ">=1.449.1" -wmill_pg = ">=1.449.1" +wmill = ">=1.449.2" +wmill_pg = ">=1.449.2" sendgrid = "*" mysql-connector-python = "*" pymongo = "*" diff --git a/openflow.openapi.yaml b/openflow.openapi.yaml index 7f90305749..4245a4b4b7 100644 --- a/openflow.openapi.yaml +++ b/openflow.openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.1 + version: 1.449.2 title: OpenFlow Spec contact: name: Ruben Fiszel diff --git a/powershell-client/WindmillClient/WindmillClient.psd1 b/powershell-client/WindmillClient/WindmillClient.psd1 index 1722a65186..a2b25abbc1 100644 --- a/powershell-client/WindmillClient/WindmillClient.psd1 +++ b/powershell-client/WindmillClient/WindmillClient.psd1 @@ -12,7 +12,7 @@ RootModule = 'WindmillClient.psm1' # Version number of this module. - ModuleVersion = '1.449.1' + ModuleVersion = '1.449.2' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/python-client/wmill/pyproject.toml b/python-client/wmill/pyproject.toml index 04565c0b16..a69ededdd0 100644 --- a/python-client/wmill/pyproject.toml +++ b/python-client/wmill/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill" -version = "1.449.1" +version = "1.449.2" description = "A client library for accessing Windmill server wrapping the Windmill client API" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/python-client/wmill_pg/pyproject.toml b/python-client/wmill_pg/pyproject.toml index fdbcc005e7..d462488bc2 100644 --- a/python-client/wmill_pg/pyproject.toml +++ b/python-client/wmill_pg/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill-pg" -version = "1.449.1" +version = "1.449.2" description = "An extension client for the wmill client library focused on pg" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/typescript-client/jsr.json b/typescript-client/jsr.json index 97d35ab2a2..93d960d64f 100644 --- a/typescript-client/jsr.json +++ b/typescript-client/jsr.json @@ -1,6 +1,6 @@ { "name": "@windmill/windmill", - "version": "1.449.1", + "version": "1.449.2", "exports": "./src/index.ts", "publish": { "exclude": ["!src", "./s3Types.ts", "./client.ts"] diff --git a/typescript-client/package.json b/typescript-client/package.json index 7a9824700a..e04939b801 100644 --- a/typescript-client/package.json +++ b/typescript-client/package.json @@ -1,7 +1,7 @@ { "name": "windmill-client", "description": "Windmill SDK client for browsers and Node.js", - "version": "1.449.1", + "version": "1.449.2", "author": "Ruben Fiszel", "license": "Apache 2.0", "devDependencies": { diff --git a/version.txt b/version.txt index fadb61dea5..7e9a4990f8 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.449.1 +1.449.2 From 27a25d4af9ca0f0e0ed1d06a462fdd7cf966ce2b Mon Sep 17 00:00:00 2001 From: dieriba Date: Sat, 25 Jan 2025 18:00:12 +0100 Subject: [PATCH 10/85] fix: include postgres triggers in build #5137 --- .github/workflows/build-publish-rh-image.yml | 4 ++-- .github/workflows/build_windows_worker_.yml | 2 +- .github/workflows/docker-image-rpi4.yml | 2 +- .github/workflows/docker-image.yml | 6 +++--- .github/workflows/publish_windows_worker.yml | 2 +- .../windmill-api/src/postgres_triggers/handler.rs | 12 ++++++------ 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build-publish-rh-image.yml b/.github/workflows/build-publish-rh-image.yml index dbfd152a9c..060f572fe8 100644 --- a/.github/workflows/build-publish-rh-image.yml +++ b/.github/workflows/build-publish-rh-image.yml @@ -64,7 +64,7 @@ jobs: platforms: linux/amd64 push: true build-args: | - features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust secrets: | rh_username=${{ secrets.RH_USERNAME }} rh_password=${{ secrets.RH_PASSWORD }} @@ -81,7 +81,7 @@ jobs: platforms: linux/arm64 push: true build-args: | - features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust secrets: | rh_username=${{ secrets.RH_USERNAME }} rh_password=${{ secrets.RH_PASSWORD }} diff --git a/.github/workflows/build_windows_worker_.yml b/.github/workflows/build_windows_worker_.yml index 70398725d8..6082a47e9b 100644 --- a/.github/workflows/build_windows_worker_.yml +++ b/.github/workflows/build_windows_worker_.yml @@ -45,7 +45,7 @@ jobs: $env:OPENSSL_DIR="${Env:VCPKG_INSTALLATION_ROOT}\installed\x64-windows-static" mkdir frontend/build && cd backend New-Item -Path . -Name "windmill-api/openapi-deref.yaml" -ItemType "File" -Force - cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust - name: Rename binary with corresponding architecture run: | diff --git a/.github/workflows/docker-image-rpi4.yml b/.github/workflows/docker-image-rpi4.yml index 869787a4aa..c450723835 100644 --- a/.github/workflows/docker-image-rpi4.yml +++ b/.github/workflows/docker-image-rpi4.yml @@ -67,7 +67,7 @@ jobs: platforms: linux/amd64,linux/arm64 push: true build-args: | - features=embedding,parquet,openidconnect,deno_core,license,http_trigger,zip,oauth2,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + features=embedding,parquet,openidconnect,deno_core,license,http_trigger,zip,oauth2,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:dev ${{ steps.meta-public.outputs.tags }} diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 65512e1d84..158513d96f 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -90,7 +90,7 @@ jobs: platforms: linux/amd64,linux/arm64 push: true build-args: | - features=embedding,parquet,openidconnect,jemalloc,deno_core,license,http_trigger,zip,oauth2,dind,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + features=embedding,parquet,openidconnect,jemalloc,deno_core,license,http_trigger,zip,oauth2,dind,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} ${{ steps.meta-public.outputs.tags }} @@ -152,7 +152,7 @@ jobs: platforms: linux/amd64,linux/arm64 push: true build-args: | - features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,otel,dind,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,otel,dind,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} ${{ steps.meta-ee-public.outputs.tags }} @@ -214,7 +214,7 @@ jobs: platforms: linux/amd64 push: true build-args: | - features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,otel,dind,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,otel,dind,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust PYTHON_IMAGE=python:3.12.2-slim-bookworm tags: | ${{ steps.meta-ee-public-py312.outputs.tags }} diff --git a/.github/workflows/publish_windows_worker.yml b/.github/workflows/publish_windows_worker.yml index e6854020be..b97d3b5560 100644 --- a/.github/workflows/publish_windows_worker.yml +++ b/.github/workflows/publish_windows_worker.yml @@ -47,7 +47,7 @@ jobs: $env:OPENSSL_DIR="${Env:VCPKG_INSTALLATION_ROOT}\installed\x64-windows-static" mkdir frontend/build && cd backend New-Item -Path . -Name "windmill-api/openapi-deref.yaml" -ItemType "File" -Force - cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,websocket,python,smtp,csharp,static_frontend,rust + cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,websocket,python,smtp,csharp,static_frontend,rust - name: Rename binary with corresponding architecture run: | diff --git a/backend/windmill-api/src/postgres_triggers/handler.rs b/backend/windmill-api/src/postgres_triggers/handler.rs index fc6adbb6e2..b4fae6fa2d 100644 --- a/backend/windmill-api/src/postgres_triggers/handler.rs +++ b/backend/windmill-api/src/postgres_triggers/handler.rs @@ -251,6 +251,12 @@ pub async fn create_postgres_trigger( Path(w_id): Path, Json(new_postgres_trigger): Json, ) -> error::Result<(StatusCode, String)> { + if *CLOUD_HOSTED { + return Err(error::Error::BadRequest( + "Postgres triggers are not supported on multi-tenant cloud, use dedicated cloud or self-host".to_string(), + )); + } + let NewPostgresTrigger { postgres_resource_path, path, @@ -262,12 +268,6 @@ pub async fn create_postgres_trigger( publication, } = new_postgres_trigger; - if *CLOUD_HOSTED { - return Err(error::Error::BadRequest( - "Postgres triggers are not supported on multi-tenant cloud, use dedicated cloud or self-host".to_string(), - )); - } - if publication_name.is_none() && publication.is_none() { return Err(error::Error::BadRequest( "Publication data is missing".to_string(), From f29c70279f14c2cdbf6e330ae266060f81f32bb6 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 25 Jan 2025 22:18:53 +0100 Subject: [PATCH 11/85] fix: update tests to rust 1.83.0 --- .github/workflows/backend-check.yml | 25 ++++++++++--------------- .github/workflows/backend-test.yml | 2 +- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/.github/workflows/backend-check.yml b/.github/workflows/backend-check.yml index 40f781937e..58a1926d6c 100644 --- a/.github/workflows/backend-check.yml +++ b/.github/workflows/backend-check.yml @@ -2,8 +2,8 @@ name: Backend check on: push: paths: - - "backend/**" - - ".github/workflows/backend-check.yml" + - "backend/**" + - ".github/workflows/backend-check.yml" jobs: check_oss: @@ -16,7 +16,7 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 with: cache-workspaces: backend - toolchain: 1.82.0 + toolchain: 1.83.0 - uses: Swatinem/rust-cache@v2 with: workspaces: backend @@ -32,16 +32,15 @@ jobs: with: fetch-depth: 0 - - name: install xmlsec1 run: | - sudo apt-get update - sudo apt-get install -y libxml2-dev libxmlsec1-dev + sudo apt-get update + sudo apt-get install -y libxml2-dev libxmlsec1-dev - uses: actions-rust-lang/setup-rust-toolchain@v1 with: cache-workspaces: backend - toolchain: 1.82.0 + toolchain: 1.83.0 - uses: Swatinem/rust-cache@v2 with: workspaces: backend @@ -71,16 +70,14 @@ jobs: token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }} fetch-depth: 0 - - name: Substitute EE code (EE logic is behind feature flag) run: | ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private - - uses: actions-rust-lang/setup-rust-toolchain@v1 with: cache-workspaces: backend - toolchain: 1.82.0 + toolchain: 1.83.0 - uses: Swatinem/rust-cache@v2 with: workspaces: backend @@ -110,8 +107,8 @@ jobs: - name: install xmlsec1 run: | - sudo apt-get update - sudo apt-get install -y libxml2-dev libxmlsec1-dev + sudo apt-get update + sudo apt-get install -y libxml2-dev libxmlsec1-dev - name: Substitute EE code (EE logic is behind feature flag) run: | @@ -120,7 +117,7 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 with: cache-workspaces: backend - toolchain: 1.82.0 + toolchain: 1.83.0 - uses: Swatinem/rust-cache@v2 with: workspaces: backend @@ -130,5 +127,3 @@ jobs: run: | mkdir -p fake_frontend_build FRONTEND_BUILD_DIR=$(pwd)/fake_frontend_build SQLX_OFFLINE=true cargo check --all-features - - \ No newline at end of file diff --git a/.github/workflows/backend-test.yml b/.github/workflows/backend-test.yml index 4cbda91248..04668e96e0 100644 --- a/.github/workflows/backend-test.yml +++ b/.github/workflows/backend-test.yml @@ -54,7 +54,7 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 with: cache-workspaces: backend - toolchain: 1.82.0 + toolchain: 1.83.0 - uses: Swatinem/rust-cache@v2 with: workspaces: backend From 789c2ec4da0de5689b991d2703ce5a1dc69ed1a1 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 25 Jan 2025 22:31:39 +0100 Subject: [PATCH 12/85] chore(main): release 1.449.3 (#5138) * chore(main): release 1.449.3 * Apply automatic changes --------- Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com> --- CHANGELOG.md | 8 +++ backend/Cargo.lock | 58 +++++++++---------- backend/Cargo.toml | 4 +- backend/windmill-api/openapi.yaml | 2 +- benchmarks/lib.ts | 2 +- cli/main.ts | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- lsp/Pipfile | 4 +- openflow.openapi.yaml | 2 +- .../WindmillClient/WindmillClient.psd1 | 2 +- python-client/wmill/pyproject.toml | 2 +- python-client/wmill_pg/pyproject.toml | 2 +- typescript-client/jsr.json | 2 +- typescript-client/package.json | 2 +- version.txt | 2 +- 16 files changed, 54 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29408670eb..5ef9cde443 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [1.449.3](https://github.com/windmill-labs/windmill/compare/v1.449.2...v1.449.3) (2025-01-25) + + +### Bug Fixes + +* include postgres triggers in build [#5137](https://github.com/windmill-labs/windmill/issues/5137) ([27a25d4](https://github.com/windmill-labs/windmill/commit/27a25d4af9ca0f0e0ed1d06a462fdd7cf966ce2b)) +* update tests to rust 1.83.0 ([f29c702](https://github.com/windmill-labs/windmill/commit/f29c70279f14c2cdbf6e330ae266060f81f32bb6)) + ## [1.449.2](https://github.com/windmill-labs/windmill/compare/v1.449.1...v1.449.2) (2025-01-25) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index c95dfb3726..f4006a4eb5 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -5388,9 +5388,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ "libc", "log", @@ -5753,9 +5753,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "f5e534d133a060a3c19daec1eb3e98ec6f4685978834f2dbadfe2ec215bab64e" dependencies = [ "bitflags 2.8.0", "cfg-if", @@ -10785,7 +10785,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windmill" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "axum", @@ -10827,7 +10827,7 @@ dependencies = [ [[package]] name = "windmill-api" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "argon2", @@ -10919,7 +10919,7 @@ dependencies = [ [[package]] name = "windmill-api-client" -version = "1.449.2" +version = "1.449.3" dependencies = [ "base64 0.22.1", "chrono", @@ -10937,7 +10937,7 @@ dependencies = [ [[package]] name = "windmill-audit" -version = "1.449.2" +version = "1.449.3" dependencies = [ "chrono", "serde", @@ -10950,7 +10950,7 @@ dependencies = [ [[package]] name = "windmill-autoscaling" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "serde", @@ -10964,7 +10964,7 @@ dependencies = [ [[package]] name = "windmill-common" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "async-stream", @@ -11023,7 +11023,7 @@ dependencies = [ [[package]] name = "windmill-git-sync" -version = "1.449.2" +version = "1.449.3" dependencies = [ "regex", "serde", @@ -11037,7 +11037,7 @@ dependencies = [ [[package]] name = "windmill-indexer" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "bytes", @@ -11060,7 +11060,7 @@ dependencies = [ [[package]] name = "windmill-macros" -version = "1.449.2" +version = "1.449.3" dependencies = [ "itertools 0.14.0", "lazy_static", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "windmill-parser" -version = "1.449.2" +version = "1.449.3" dependencies = [ "convert_case 0.6.0", "serde", @@ -11081,7 +11081,7 @@ dependencies = [ [[package]] name = "windmill-parser-bash" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "lazy_static", @@ -11093,7 +11093,7 @@ dependencies = [ [[package]] name = "windmill-parser-csharp" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "serde_json", @@ -11105,7 +11105,7 @@ dependencies = [ [[package]] name = "windmill-parser-go" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "gosyn", @@ -11117,7 +11117,7 @@ dependencies = [ [[package]] name = "windmill-parser-graphql" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "lazy_static", @@ -11129,7 +11129,7 @@ dependencies = [ [[package]] name = "windmill-parser-php" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11140,7 +11140,7 @@ dependencies = [ [[package]] name = "windmill-parser-py" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11151,7 +11151,7 @@ dependencies = [ [[package]] name = "windmill-parser-py-imports" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "async-recursion", @@ -11169,7 +11169,7 @@ dependencies = [ [[package]] name = "windmill-parser-rust" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "convert_case 0.6.0", @@ -11186,7 +11186,7 @@ dependencies = [ [[package]] name = "windmill-parser-sql" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "lazy_static", @@ -11198,7 +11198,7 @@ dependencies = [ [[package]] name = "windmill-parser-ts" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "lazy_static", @@ -11216,7 +11216,7 @@ dependencies = [ [[package]] name = "windmill-parser-wasm" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "getrandom 0.2.15", @@ -11238,7 +11238,7 @@ dependencies = [ [[package]] name = "windmill-parser-yaml" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "serde_json", @@ -11248,7 +11248,7 @@ dependencies = [ [[package]] name = "windmill-queue" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "async-recursion", @@ -11281,7 +11281,7 @@ dependencies = [ [[package]] name = "windmill-sql-datatype-parser-wasm" -version = "1.449.2" +version = "1.449.3" dependencies = [ "wasm-bindgen", "wasm-bindgen-test", @@ -11291,7 +11291,7 @@ dependencies = [ [[package]] name = "windmill-worker" -version = "1.449.2" +version = "1.449.3" dependencies = [ "anyhow", "async-recursion", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 7ea9ee04dd..4a1c282fd9 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "windmill" -version = "1.449.2" +version = "1.449.3" authors.workspace = true edition.workspace = true @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "1.449.2" +version = "1.449.3" authors = ["Ruben Fiszel "] edition = "2021" diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 7cbab76c03..a8474ac5ea 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.2 + version: 1.449.3 title: Windmill API contact: diff --git a/benchmarks/lib.ts b/benchmarks/lib.ts index a310f7c900..602a8d4037 100644 --- a/benchmarks/lib.ts +++ b/benchmarks/lib.ts @@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts"; import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts"; import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts"; -export const VERSION = "v1.449.2"; +export const VERSION = "v1.449.3"; export async function login(email: string, password: string): Promise { return await windmill.UserService.login({ diff --git a/cli/main.ts b/cli/main.ts index 9819695722..9a855689f6 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -60,7 +60,7 @@ export { // } // }); -export const VERSION = "1.449.2"; +export const VERSION = "1.449.3"; const command = new Command() .name("wmill") diff --git a/frontend/package-lock.json b/frontend/package-lock.json index cbbc382f25..147820ae38 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "windmill-components", - "version": "1.449.2", + "version": "1.449.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "windmill-components", - "version": "1.449.2", + "version": "1.449.3", "license": "AGPL-3.0", "dependencies": { "@anthropic-ai/sdk": "^0.32.1", diff --git a/frontend/package.json b/frontend/package.json index fdee74a465..4da15a6827 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "windmill-components", - "version": "1.449.2", + "version": "1.449.3", "scripts": { "dev": "vite dev", "build": "vite build", diff --git a/lsp/Pipfile b/lsp/Pipfile index ae048a7d4e..f1db4ecfcf 100644 --- a/lsp/Pipfile +++ b/lsp/Pipfile @@ -4,8 +4,8 @@ verify_ssl = true name = "pypi" [packages] -wmill = ">=1.449.2" -wmill_pg = ">=1.449.2" +wmill = ">=1.449.3" +wmill_pg = ">=1.449.3" sendgrid = "*" mysql-connector-python = "*" pymongo = "*" diff --git a/openflow.openapi.yaml b/openflow.openapi.yaml index 4245a4b4b7..f1f873fe03 100644 --- a/openflow.openapi.yaml +++ b/openflow.openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.2 + version: 1.449.3 title: OpenFlow Spec contact: name: Ruben Fiszel diff --git a/powershell-client/WindmillClient/WindmillClient.psd1 b/powershell-client/WindmillClient/WindmillClient.psd1 index a2b25abbc1..ad20b6aa12 100644 --- a/powershell-client/WindmillClient/WindmillClient.psd1 +++ b/powershell-client/WindmillClient/WindmillClient.psd1 @@ -12,7 +12,7 @@ RootModule = 'WindmillClient.psm1' # Version number of this module. - ModuleVersion = '1.449.2' + ModuleVersion = '1.449.3' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/python-client/wmill/pyproject.toml b/python-client/wmill/pyproject.toml index a69ededdd0..9dbbfb01c0 100644 --- a/python-client/wmill/pyproject.toml +++ b/python-client/wmill/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill" -version = "1.449.2" +version = "1.449.3" description = "A client library for accessing Windmill server wrapping the Windmill client API" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/python-client/wmill_pg/pyproject.toml b/python-client/wmill_pg/pyproject.toml index d462488bc2..15b2d3e77d 100644 --- a/python-client/wmill_pg/pyproject.toml +++ b/python-client/wmill_pg/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill-pg" -version = "1.449.2" +version = "1.449.3" description = "An extension client for the wmill client library focused on pg" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/typescript-client/jsr.json b/typescript-client/jsr.json index 93d960d64f..7056e2d9a5 100644 --- a/typescript-client/jsr.json +++ b/typescript-client/jsr.json @@ -1,6 +1,6 @@ { "name": "@windmill/windmill", - "version": "1.449.2", + "version": "1.449.3", "exports": "./src/index.ts", "publish": { "exclude": ["!src", "./s3Types.ts", "./client.ts"] diff --git a/typescript-client/package.json b/typescript-client/package.json index e04939b801..d4ce6969bf 100644 --- a/typescript-client/package.json +++ b/typescript-client/package.json @@ -1,7 +1,7 @@ { "name": "windmill-client", "description": "Windmill SDK client for browsers and Node.js", - "version": "1.449.2", + "version": "1.449.3", "author": "Ruben Fiszel", "license": "Apache 2.0", "devDependencies": { diff --git a/version.txt b/version.txt index 7e9a4990f8..8266487f55 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.449.2 +1.449.3 From b47e9c14f277339ae51fd3a40e00e8ba4e8a1390 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 26 Jan 2025 11:04:35 +0100 Subject: [PATCH 13/85] feat(cli): improve codebase support + remove --stateful + warn when pushing stale metadata (#5139) --- cli/metadata.ts | 88 ++++----- cli/script.ts | 95 +++++---- cli/sync.ts | 348 +++++++++++++++++++++------------ cli/types.ts | 7 +- frontend/src/lib/hubPaths.json | 3 +- 5 files changed, 331 insertions(+), 210 deletions(-) diff --git a/cli/metadata.ts b/cli/metadata.ts index 32cd556f76..e78b0bf539 100644 --- a/cli/metadata.ts +++ b/cli/metadata.ts @@ -49,7 +49,7 @@ import { FlowFile, replaceInlineScripts } from "./flow.ts"; import { getIsWin } from "./main.ts"; import { FlowValue } from "./gen/types.gen.ts"; -export async function generateAllMetadata() {} +export async function generateAllMetadata() { } function findClosestRawReqs( lang: "bun" | "python3" | "php" | undefined, @@ -104,7 +104,8 @@ export async function generateFlowLockInternal( folder: string, dryRun: boolean, workspace: Workspace, - justUpdateMetadataLock?: boolean + justUpdateMetadataLock?: boolean, + noStaleMessage?: boolean ): Promise { if (folder.endsWith(SEP)) { folder = folder.substring(0, folder.length - 1); @@ -112,7 +113,7 @@ export async function generateFlowLockInternal( const remote_path = folder .replaceAll(SEP, "/") .substring(0, folder.length - ".flow".length); - if (!justUpdateMetadataLock) { + if (!justUpdateMetadataLock && !noStaleMessage) { log.info(`Generating lock for flow ${folder} at ${remote_path}`); } @@ -120,9 +121,11 @@ export async function generateFlowLockInternal( const conf = await readLockfile(); if (await checkifMetadataUptodate(folder, hashes[TOP_HASH], conf, TOP_HASH)) { - log.info( - colors.green(`Flow ${remote_path} metadata is up-to-date, skipping`) - ); + if (!noStaleMessage) { + log.info( + colors.green(`Flow ${remote_path} metadata is up-to-date, skipping`) + ); + } return; } else if (dryRun) { return remote_path; @@ -222,12 +225,7 @@ export async function generateScriptMetadataInternal( // read script content const scriptContent = await Deno.readTextFile(scriptPath); - let metadataContent = await Deno.readTextFile(metadataWithType.path); - const c = findCodebase(scriptPath, codebases); - - if (c) { - metadataContent += c.digest ?? ""; - } + const metadataContent = await Deno.readTextFile(metadataWithType.path); let hash = await generateScriptHash(rawReqs, scriptContent, metadataContent); @@ -261,7 +259,9 @@ export async function generateScriptMetadataInternal( } if (!opts.schemaOnly && !justUpdateMetadataLock) { - if (!c) { + const hasCodebase = findCodebase(scriptPath, codebases) != undefined; + + if (!hasCodebase) { await updateScriptLock( workspace, scriptContent, @@ -270,16 +270,13 @@ export async function generateScriptMetadataInternal( metadataParsedContent, rawReqs ); - metadataParsedContent.codebase = undefined; } else { - metadataParsedContent.codebase = c.digest; - metadataParsedContent.lock = ""; + metadataParsedContent.lock = ''; } } else { metadataParsedContent.lock = "!inline " + remotePath.replaceAll(SEP, "/") + ".script.lock"; } - let metaPath = remotePath + ".script.yaml"; let newMetadataContent = yamlStringify(metadataParsedContent, yamlOptions); if (metadataWithType.isJson) { @@ -287,10 +284,8 @@ export async function generateScriptMetadataInternal( newMetadataContent = JSON.stringify(metadataParsedContent); } - let metadataContentUsedForHash = newMetadataContent; - if (c) { - metadataContentUsedForHash += c.digest ?? ""; - } + const metadataContentUsedForHash = newMetadataContent; + hash = await generateScriptHash( rawReqs, scriptContent, @@ -318,9 +313,9 @@ export async function updateScriptSchema( path ); metadataContent.schema = result.schema; - if (result.has_preprocessor != null) + if (result.has_preprocessor == true) metadataContent.has_preprocessor = result.has_preprocessor; - if (result.no_main_func != null) + if (result.no_main_func === true) metadataContent.no_main_func = result.no_main_func; } @@ -390,7 +385,7 @@ async function updateScriptLock( if (await Deno.stat(lockPath)) { await Deno.remove(lockPath); } - } catch {} + } catch { } metadataContent.lock = ""; } } catch (e) { @@ -431,7 +426,7 @@ export async function updateFlow( } catch (e) { try { responseText = await rawResponse.text(); - } catch {} + } catch { } throw new Error( `Failed to generate lockfile. Status was: ${rawResponse.statusText}, ${responseText}, ${e}` ); @@ -528,8 +523,11 @@ export function inferSchema( }; } + if (!currentSchema) { + currentSchema = {} + } currentSchema.required = []; - const oldProperties = JSON.parse(JSON.stringify(currentSchema.properties)); + const oldProperties = JSON.parse(JSON.stringify(currentSchema?.properties ?? {})); currentSchema.properties = {}; for (const arg of inferedSchema.args) { @@ -576,23 +574,23 @@ export function argSigToJsonSchemaType( | string | { resource: string | null } | { - list: - | (string | { object: { key: string; typ: any }[] }) - | { str: any } - | { object: { key: string; typ: any }[] } - | null; - } + list: + | (string | { object: { key: string; typ: any }[] }) + | { str: any } + | { object: { key: string; typ: any }[] } + | null; + } | { dynselect: string } | { str: string[] | null } | { object: { key: string; typ: any }[] } | { - oneof: [ - { - label: string; - properties: { key: string; typ: any }[]; - } - ]; - }, + oneof: [ + { + label: string; + properties: { key: string; typ: any }[]; + } + ]; + }, oldS: SchemaProperty ): void { const newS: SchemaProperty = { type: "" }; @@ -795,10 +793,10 @@ export async function parseMetadataFile( scriptPath: string, generateMetadataIfMissing: | (GlobalOptions & { - path: string; - workspaceRemote: Workspace; - schemaOnly?: boolean; - }) + path: string; + workspaceRemote: Workspace; + schemaOnly?: boolean; + }) | undefined, globalDeps: GlobalDeps, codebases: SyncCodebase[] @@ -860,7 +858,9 @@ export async function parseMetadataFile( scriptInitialMetadata = (await yamlParseFile( metadataFilePath )) as ScriptMetadata; - replaceLock(scriptInitialMetadata); + if (!generateMetadataIfMissing.schemaOnly) { + replaceLock(scriptInitialMetadata); + } } catch (e) { log.info( colors.yellow( diff --git a/cli/script.ts b/cli/script.ts index c341489534..e6b08e15da 100644 --- a/cli/script.ts +++ b/cli/script.ts @@ -1,5 +1,5 @@ // deno-lint-ignore-file no-explicit-any -import { GlobalOptions, showDiff } from "./types.ts"; +import { GlobalOptions } from "./types.ts"; import { requireLogin, resolveWorkspace, validatePath } from "./context.ts"; import { colors, @@ -24,7 +24,6 @@ import { Workspace } from "./workspace.ts"; import { generateScriptMetadataInternal, parseMetadataFile, - updateScriptSchema, } from "./metadata.ts"; import { ScriptLanguage, @@ -34,6 +33,7 @@ import { elementsToMap, findCodebase, readDirRecursiveWithIgnore, + Skips, yamlOptions, } from "./sync.ts"; import { ignoreF } from "./sync.ts"; @@ -119,7 +119,7 @@ export async function findResourceFile(path: string) { if (validCandidates.length > 1) { throw new Error( "Found two resource files for the same resource" + - validCandidates.join(", ") + validCandidates.join(", ") ); } if (validCandidates.length < 1) { @@ -162,7 +162,7 @@ export async function handleFile( workspace: Workspace, alreadySynced: string[], message: string | undefined, - opts: (GlobalOptions & { defaultTs?: "bun" | "deno" }) | undefined, + opts: (GlobalOptions & { defaultTs?: "bun" | "deno" } & Skips) | undefined, globalDeps: GlobalDeps, codebases: SyncCodebase[] ): Promise { @@ -238,21 +238,22 @@ export async function handleFile( } log.info(`Finished building the bundle for ${path}`); } - const typed = ( - await parseMetadataFile( - remotePath, - opts - ? { + let typed = + opts?.skipScriptsMetadata ? undefined : + (await parseMetadataFile( + remotePath, + opts + ? { ...opts, path, workspaceRemote: workspace, schemaOnly: codebase ? true : undefined, } - : undefined, - globalDeps, - codebases - ) - )?.payload; + : undefined, + globalDeps, + codebases + ) + )?.payload; const workspaceId = workspace.workspaceId; @@ -268,20 +269,29 @@ export async function handleFile( } const content = await Deno.readTextFile(path); - if (codebase) { - const typedBefore = JSON.parse(JSON.stringify(typed.schema)); - await updateScriptSchema(content, language, typed, path); - if (typedBefore != typed.schema) { - log.info(`Updated metadata for bundle ${path}`); - showDiff( - yamlStringify(typedBefore, yamlOptions), - yamlStringify(typed.schema, yamlOptions) - ); - await Deno.writeTextFile( - remotePath + ".script.yaml", - yamlStringify(typed as Record, yamlOptions) - ); - } + if (opts?.skipScriptsMetadata) { + // if (codebase) { + // const typedBefore = JSON.parse(JSON.stringify(typed.schema)); + // await updateScriptSchema(content, language, typed, path); + // if (typedBefore != typed.schema) { + // log.info(`Updated metadata for bundle ${path}`); + // showDiff( + // yamlStringify(typedBefore, yamlOptions), + // yamlStringify(typed.schema, yamlOptions) + // ); + // await Deno.writeTextFile( + // remotePath + ".script.yaml", + // yamlStringify(typed as Record, yamlOptions) + // ); + // } + // } + // else { + typed = structuredClone(remote); + // } + } + + if (typed && codebase) { + typed.codebase = codebase.digest; } const requestBodyCommon: NewScript = { @@ -312,6 +322,8 @@ export async function handleFile( on_behalf_of_email: typed?.on_behalf_of_email, }; + // log.info(JSON.stringify(requestBodyCommon, null, 2)) + // log.info(JSON.stringify(opts, null, 2)) if (remote) { if (content === remote.content) { if ( @@ -327,19 +339,19 @@ export async function handleFile( deepEqual(typed.schema, remote.schema) && typed.tag == remote.tag && (typed.ws_error_handler_muted ?? false) == - remote.ws_error_handler_muted && + remote.ws_error_handler_muted && typed.dedicated_worker == remote.dedicated_worker && typed.cache_ttl == remote.cache_ttl && typed.concurrency_time_window_s == - remote.concurrency_time_window_s && + remote.concurrency_time_window_s && typed.concurrent_limit == remote.concurrent_limit && Boolean(typed.restart_unless_cancelled) == - Boolean(remote.restart_unless_cancelled) && + Boolean(remote.restart_unless_cancelled) && Boolean(typed.visible_to_runner_only) == - Boolean(remote.visible_to_runner_only) && + Boolean(remote.visible_to_runner_only) && Boolean(typed.no_main_func) == Boolean(remote.no_main_func) && Boolean(typed.has_preprocessor) == - Boolean(remote.has_preprocessor) && + Boolean(remote.has_preprocessor) && typed.priority == Boolean(remote.priority) && typed.timeout == remote.timeout && //@ts-ignore @@ -412,10 +424,9 @@ async function createScript( workspace: workspaceId, requestBody: body, }); - } catch (e) { + } catch (e: any) { throw Error( - `Script creation for ${body.path} with parent ${ - body.parent_hash + `Script creation for ${body.path} with parent ${body.parent_hash } was not successful: ${e.body ?? e.message}` ); } @@ -441,8 +452,7 @@ async function createScript( }); if (req.status != 201) { throw Error( - `Script snapshot creation was not successful: ${req.status} - ${ - req.statusText + `Script snapshot creation was not successful: ${req.status} - ${req.statusText } - ${await req.text()}` ); } @@ -453,8 +463,8 @@ export async function findContentFile(filePath: string) { const candidates = filePath.endsWith("script.json") ? exts.map((x) => filePath.replace(".script.json", x)) : filePath.endsWith("script.lock") - ? exts.map((x) => filePath.replace(".script.lock", x)) - : exts.map((x) => filePath.replace(".script.yaml", x)); + ? exts.map((x) => filePath.replace(".script.lock", x)) + : exts.map((x) => filePath.replace(".script.yaml", x)); const validCandidates = ( await Promise.all( @@ -473,7 +483,7 @@ export async function findContentFile(filePath: string) { if (validCandidates.length > 1) { throw new Error( "No content path given and more than one candidate found: " + - validCandidates.join(", ") + validCandidates.join(", ") ); } if (validCandidates.length < 1) { @@ -858,6 +868,7 @@ async function generateMetadata( } & SyncOptions, scriptPath: string | undefined ) { + log.info("This command only works for workspace scripts, for flows inline scripts use `wmill flow generate-locks`"); if (scriptPath == "") { scriptPath = undefined; } @@ -976,7 +987,7 @@ const command = new Command() .action(bootstrap as any) .command( "generate-metadata", - "re-generate the metadata file updating the lock and the script schema" + "re-generate the metadata file updating the lock and the script schema (for flows, use `wmill flow generate-locks`)" ) .arguments("[script:file]") .option("--yes", "Skip confirmation prompt") diff --git a/cli/sync.ts b/cli/sync.ts index 408c01884e..e8d6bb4d1a 100644 --- a/cli/sync.ts +++ b/cli/sync.ts @@ -101,8 +101,9 @@ async function addCodebaseDigestIfRelevant( return content; } let isTs = true; + const replacedPath = path.replace(".script.yaml", ".ts"); try { - await Deno.stat(path.replace(".script.yaml", ".ts")); + await Deno.stat(replacedPath); } catch { isTs = false; } @@ -110,12 +111,12 @@ async function addCodebaseDigestIfRelevant( return content; } if (isTs) { - const c = findCodebase(path, codebases); + const c = findCodebase(replacedPath, codebases); if (c) { const parsed: any = yamlParseContent(path, content); if (parsed && typeof parsed == "object") { parsed["codebase"] = c.digest; - parsed["lock"] = undefined; + parsed["lock"] = ''; return yamlStringify(parsed, yamlOptions); } else { throw Error( @@ -158,9 +159,8 @@ export async function FSFSElement( // }, async getContentText(): Promise { const content = await Deno.readTextFile(localP); - - const r = await addCodebaseDigestIfRelevant(localP, content, codebases); - // console.log(r); + const itemPath = localP.substring(p.length + 1) + const r = await addCodebaseDigestIfRelevant(itemPath, content, codebases); return r; }, }; @@ -352,12 +352,12 @@ function ZipFSElement( ) ? "flow" : p.endsWith("app.json") - ? "app" - : p.endsWith("script.json") - ? "script" - : p.endsWith("resource.json") - ? "resource" - : "other"; + ? "app" + : p.endsWith("script.json") + ? "script" + : p.endsWith("resource.json") + ? "resource" + : "other"; const isJson = p.endsWith(".json"); @@ -387,7 +387,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, s.path), - async *getChildren() {}, + async *getChildren() { }, // deno-lint-ignore require-await async getContentText() { return s.content; @@ -398,7 +398,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, "flow.yaml"), - async *getChildren() {}, + async *getChildren() { }, // deno-lint-ignore require-await async getContentText() { return yamlStringify(flow, yamlOptions); @@ -414,7 +414,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, s.path), - async *getChildren() {}, + async *getChildren() { }, // deno-lint-ignore require-await async getContentText() { return s.content; @@ -425,7 +425,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, "app.yaml"), - async *getChildren() {}, + async *getChildren() { }, // deno-lint-ignore require-await async getContentText() { return yamlStringify(app, yamlOptions); @@ -490,7 +490,7 @@ function ZipFSElement( r.push({ isDirectory: false, path: removeSuffix(finalPath, ".json") + ".lock", - async *getChildren() {}, + async *getChildren() { }, // deno-lint-ignore require-await async getContentText() { return lock; @@ -513,7 +513,7 @@ function ZipFSElement( removeSuffix(finalPath, ".resource.json") + ".resource.file." + formatExtension, - async *getChildren() {}, + async *getChildren() { }, // deno-lint-ignore require-await async getContentText() { return fileContent; @@ -574,19 +574,19 @@ export async function* readDirRecursiveWithIgnore( // getContentBytes(): Promise; getContentText(): Promise; }[] = [ - { - path: root.path, - ignored: ignore(root.path, root.isDirectory), - isDirectory: root.isDirectory, - c: root.getChildren, - // getContentBytes(): Promise { - // throw undefined; - // }, - getContentText(): Promise { - throw undefined; + { + path: root.path, + ignored: ignore(root.path, root.isDirectory), + isDirectory: root.isDirectory, + c: root.getChildren, + // getContentBytes(): Promise { + // throw undefined; + // }, + getContentText(): Promise { + throw undefined; + }, }, - }, - ]; + ]; while (stack.length > 0) { const e = stack.pop()!; @@ -606,7 +606,7 @@ export async function* readDirRecursiveWithIgnore( type Added = { name: "added"; path: string; content: string }; type Deleted = { name: "deleted"; path: string }; -type Edit = { name: "edited"; path: string; before: string; after: string }; +type Edit = { name: "edited"; path: string; before: string; after: string; codebase?: string }; type Change = Added | Deleted | Edit; @@ -649,7 +649,7 @@ export async function elementsToMap( "js", "lock", "rs", - "cs", + "cs", "yml", ].includes(path.split(".").pop() ?? "") && !isFileResource(path) @@ -677,10 +677,11 @@ export async function elementsToMap( return map; } -interface Skips { +export interface Skips { skipVariables?: boolean | undefined; skipResources?: boolean | undefined; skipSecrets?: boolean | undefined; + skipScriptsMetadata?: boolean | undefined; includeSchedules?: boolean | undefined; includeUsers?: boolean | undefined; includeGroups?: boolean | undefined; @@ -694,13 +695,14 @@ async function compareDynFSElement( ignore: (path: string, isDirectory: boolean) => boolean, json: boolean, skips: Skips, - ignoreMetadataDeletion: boolean + ignoreMetadataDeletion: boolean, + codebases: SyncCodebase[] ): Promise { const [m1, m2] = els2 ? await Promise.all([ - elementsToMap(els1, ignore, json, skips), - elementsToMap(els2, ignore, json, skips), - ]) + elementsToMap(els1, ignore, json, skips), + elementsToMap(els2, ignore, json, skips), + ]) : [await elementsToMap(els1, ignore, json, skips), {}]; const changes: Change[] = []; @@ -734,25 +736,81 @@ async function compareDynFSElement( return yamlParseContent(k, v); } } - for (const [k, v] of Object.entries(m1)) { + const codebaseChanges: Record = {}; + for (let [k, v] of Object.entries(m1)) { + const isScriptMetadata = k.endsWith(".script.yaml") || k.endsWith(".script.json"); + const skipMetadata = skips.skipScriptsMetadata && isScriptMetadata; + if (m2[k] === undefined) { + if (skipMetadata) { + continue; + } changes.push({ name: "added", path: k, content: v }); - } else if ( - m2[k] != v && - (!k.endsWith(".json") || !deepEqual(JSON.parse(v), JSON.parse(m2[k]))) && - (!k.endsWith(".yaml") || !deepEqual(parseYaml(k, v), parseYaml(k, m2[k]))) - ) { - changes.push({ name: "edited", path: k, after: v, before: m2[k] }); + } else { + if (m2[k] == v) { + continue; + } + else if (k.endsWith(".json")) { + if (deepEqual(JSON.parse(v), JSON.parse(m2[k]))) { + continue; + } + } else if (k.endsWith(".yaml")) { + const before = parseYaml(k, m2[k]); + const after = parseYaml(k, v); + if (deepEqual(before, after)) { + continue; + } + if (before.codebase != undefined) { + delete before.codebase; + m2[k] = yamlStringify(before, yamlOptions); + } + if (after.codebase != undefined) { + if (before.codebase != after.codebase) { + codebaseChanges[k] = after.codebase; + } + delete after.codebase; + v = yamlStringify(after, yamlOptions); + } + if (skipMetadata) { + continue; + } + } + changes.push({ name: "edited", path: k, after: v, before: m2[k], codebase: codebaseChanges[k] }); } } + const remoteCodebase: Record = {}; for (const [k] of Object.entries(m2)) { - if ( - m1[k] === undefined && - (!ignoreMetadataDeletion || - (!k?.endsWith(".script.yaml") && !k?.endsWith(".script.json"))) - ) { - changes.push({ name: "deleted", path: k }); + if (m1[k] === undefined) { + if (!ignoreMetadataDeletion || (!k?.endsWith(".script.yaml") && !k?.endsWith(".script.json"))) { + changes.push({ name: "deleted", path: k }); + } else if (k?.endsWith(".script.yaml")) { + let o = parseYaml(k, m2[k]); + if (o.codebase != undefined) { + remoteCodebase[k] = o.codebase; + } + } + } + } + + for (const [k, v] of Object.entries(remoteCodebase)) { + const tsFile = k.replace(".script.yaml", ".ts"); + if (changes.find(c => c.path == tsFile && (c.name == "edited" || c.name == "deleted"))) { + continue; + } + let c = findCodebase(tsFile, codebases); + if (c?.digest != v) { + changes.push({ name: "edited", path: tsFile, codebase: v, before: m1[tsFile], after: m2[tsFile] }); + } + } + + for (const change of changes) { + const codebase = codebaseChanges[change.path]; + if (!codebase) continue; + + const tsFile = change.path.replace(".script.yaml", ".ts"); + if (change.name == "edited" && change.path == tsFile) { + change.codebase = codebase; } } @@ -887,6 +945,58 @@ export async function ignoreF(wmillconf: { }; } +interface ChangeTracker { + scripts: string[]; + flows: string[]; + apps: string[]; +} + +// deno-lint-ignore no-inner-declarations +async function addToChangedIfNotExists(p: string, tracker: ChangeTracker) { + const isScript = exts.some((e) => p.endsWith(e)); + if (isScript) { + if (p.includes(".flow" + SEP)) { + const folder = + p.substring(0, p.indexOf(".flow" + SEP)) + ".flow" + SEP; + if (!tracker.flows.includes(folder)) { + tracker.flows.push(folder); + } + } else if (p.includes(".app" + SEP)) { + const folder = p.substring(0, p.indexOf(".app" + SEP)) + ".app" + SEP; + if (!tracker.apps.includes(folder)) { + tracker.apps.push(folder); + } + } else { + if (!tracker.scripts.includes(p)) { + tracker.scripts.push(p); + } + } + } else if (p.endsWith(".script.yaml") || p.endsWith(".script.json")) { + try { + const contentPath = await findContentFile(p); + if (!contentPath) return; + if (tracker.scripts.includes(contentPath)) return; + tracker.scripts.push(contentPath); + } catch { + // ignore + } + } +} + +async function buildTracker(changes: Change[]) { + const tracker: ChangeTracker = { + scripts: [], + flows: [], + apps: [], + }; + for (const change of changes) { + if (change.name == "added" || change.name == "edited") { + await addToChangedIfNotExists(change.path, tracker); + } + } + return tracker; +} + export async function pull(opts: GlobalOptions & SyncOptions) { opts = await mergeConfigWithConfigFile(opts); @@ -940,7 +1050,8 @@ export async function pull(opts: GlobalOptions & SyncOptions) { await ignoreF(opts), opts.json ?? false, opts, - false + false, + codebases ); log.info( @@ -959,41 +1070,8 @@ export async function pull(opts: GlobalOptions & SyncOptions) { } const conflicts = []; - const changedScripts: string[] = []; - const changedFlows: string[] = []; - const changedApps: string[] = []; - // deno-lint-ignore no-inner-declarations - async function addToChangedIfNotExists(p: string) { - const isScript = exts.some((e) => p.endsWith(e)); - if (isScript) { - if (p.includes(".flow" + SEP)) { - const folder = - p.substring(0, p.indexOf(".flow" + SEP)) + ".flow" + SEP; - if (!changedFlows.includes(folder)) { - changedFlows.push(folder); - } - } else if (p.includes(".app" + SEP)) { - const folder = p.substring(0, p.indexOf(".app" + SEP)) + ".app" + SEP; - if (!changedApps.includes(folder)) { - changedApps.push(folder); - } - } else { - if (!changedScripts.includes(p)) { - changedScripts.push(p); - } - } - } else if (p.endsWith(".script.yaml") || p.endsWith(".script.json")) { - try { - const contentPath = await findContentFile(p); - if (!contentPath) return; - if (changedScripts.includes(contentPath)) return; - changedScripts.push(contentPath); - } catch { - // ignore - } - } - } + log.info(colors.gray(`Applying changes to files ...`)); for await (const change of changes) { @@ -1054,7 +1132,6 @@ export async function pull(opts: GlobalOptions & SyncOptions) { await ensureDir(path.dirname(stateTarget)); await Deno.copyFile(target, stateTarget); } - await addToChangedIfNotExists(change.path); } else if (change.name === "added") { await ensureDir(path.dirname(target)); if (opts.stateful) { @@ -1066,7 +1143,6 @@ export async function pull(opts: GlobalOptions & SyncOptions) { if (opts.stateful) { await Deno.copyFile(target, stateTarget); } - await addToChangedIfNotExists(change.path); } else if (change.name === "deleted") { try { log.info( @@ -1103,7 +1179,9 @@ export async function pull(opts: GlobalOptions & SyncOptions) { const globalDeps = await findGlobalDeps(); - for (const change of changedScripts) { + const tracker: ChangeTracker = await buildTracker(changes); + + for (const change of tracker.scripts) { await generateScriptMetadataInternal( change, workspace, @@ -1115,13 +1193,13 @@ export async function pull(opts: GlobalOptions & SyncOptions) { true ); } - for (const change of changedFlows) { + for (const change of tracker.flows) { log.info(`Updating lock for flow ${change}`); await generateFlowLockInternal(change, false, workspace, true); } - if (changedApps.length > 0) { + if (tracker.apps.length > 0) { log.info( - `Apps ${changedApps.join( + `Apps ${tracker.apps.join( ", " )} scripts were changed but ignoring for now` ); @@ -1146,9 +1224,11 @@ function prettyChanges(changes: Change[]) { ); } else if (change.name === "edited") { log.info( - colors.yellow(`~ ${getTypeStrFromPath(change.path)} ` + change.path) + colors.yellow(`~ ${getTypeStrFromPath(change.path)} ` + change.path + (change.codebase ? ` (codebase changed)` : "")) ); - showDiff(change.before, change.after); + if (change.before != change.after) { + showDiff(change.before, change.after); + } } } } @@ -1238,9 +1318,58 @@ export async function push(opts: GlobalOptions & SyncOptions) { await ignoreF(opts), opts.json ?? false, opts, - true + true, + codebases ); + + const globalDeps = await findGlobalDeps(); + + const tracker: ChangeTracker = await buildTracker(changes); + + const staleScripts: string[] = []; + const staleFlows: string[] = []; + for (const change of tracker.scripts) { + const stale = await generateScriptMetadataInternal( + change, + workspace, + opts, + true, + true, + globalDeps, + codebases, + false + ); + if (stale) { + staleScripts.push(stale); + } + } + + if (staleScripts.length > 0) { + log.info("") + log.warn("Stale scripts metadata found, you may want to update them using 'wmill script generate-metadata' before pushing:"); + for (const stale of staleScripts) { + log.warn(stale); + } + + log.info("") + } + + for (const change of tracker.flows) { + const stale = await generateFlowLockInternal(change, true, workspace, false, true); + if (stale) { + staleFlows.push(stale); + } + } + + if (staleFlows.length > 0) { + log.warn("Stale flows locks found, you may want to update them using 'wmill flow generate-locks' before pushing:"); + for (const stale of staleFlows) { + log.warn(stale); + } + log.info("") + } + const version = await fetchVersion(workspace.remote); log.info(colors.gray("Remote version: " + version)); @@ -1264,7 +1393,9 @@ export async function push(opts: GlobalOptions & SyncOptions) { log.info(colors.gray(`Applying changes to files ...`)); const alreadySynced: string[] = []; - const globalDeps = await findGlobalDeps(); + + + for await (const change of changes) { const stateTarget = path.join(Deno.cwd(), ".wmill", change.path); @@ -1512,24 +1643,13 @@ const command = new Command() ) .command("pull") .description("Pull any remote changes and apply them locally.") - .option( - "--fail-conflicts", - "Error on conflicts (both remote and local have changes on the same item)" - ) - .option( - "--raw", - "Push without using state, just overwrite. (Default, has no effect)" - ) .option("--yes", "Pull without needing confirmation") - .option( - "--stateful", - "Pull using state tracking (create .wmill folder and needed for --fail-conflicts)" - ) .option("--plain-secrets", "Pull secrets as plain text") .option("--json", "Use JSON instead of YAML") .option("--skip-variables", "Skip syncing variables (including secrets)") .option("--skip-secrets", "Skip syncing only secrets variables") .option("--skip-resources", "Skip syncing resources") + // .option("--skip-scripts-metadata", "Skip syncing scripts metadata, focus solely on logic") .option("--include-schedules", "Include syncing schedules") .option("--include-users", "Include syncing users") .option("--include-groups", "Include syncing groups") @@ -1551,25 +1671,13 @@ const command = new Command() .action(pull as any) .command("push") .description("Push any local changes and apply them remotely.") - .option( - "--fail-conflicts", - "Error on conflicts (both remote and local have changes on the same item)" - ) - .option( - "--raw", - "Push without using state, just overwrite. (Default, has no effect)" - ) - .option( - "--stateful", - "Pull using state tracking (use .wmill folder and needed for --fail-conflicts)w" - ) - .option("--skip-pull", "(stateful only) Push without pulling first") .option("--yes", "Push without needing confirmation") .option("--plain-secrets", "Push secrets as plain text") .option("--json", "Use JSON instead of YAML") .option("--skip-variables", "Skip syncing variables (including secrets)") .option("--skip-secrets", "Skip syncing only secrets variables") .option("--skip-resources", "Skip syncing resources") + // .option("--skip-scripts-metadata", "Skip syncing scripts metadata, focus solely on logic") .option("--include-schedules", "Include syncing schedules") .option("--include-users", "Include syncing users") .option("--include-groups", "Include syncing groups") diff --git a/cli/types.ts b/cli/types.ts index 0d717c296e..0ba5a1c476 100644 --- a/cli/types.ts +++ b/cli/types.ts @@ -79,7 +79,8 @@ export function showDiff(local: string, remote: string) { log.info("Diff too large to display"); return; } - for (const part of Diff.diffLines(local, remote)) { + + for (const part of Diff.diffLines(local ?? '', remote ?? '')) { if (part.removed) { // print red if removed without newline finalString += `\x1b[31m${part.value}\x1b[0m`; @@ -157,8 +158,8 @@ export function parseFromPath(p: string, content: string): any { return p.endsWith(".yaml") ? yamlParseContent(p, content) : p.endsWith(".json") - ? JSON.parse(content) - : content; + ? JSON.parse(content) + : content; } export function parseFromFile(p: string): any { if (p.endsWith(".json")) { diff --git a/frontend/src/lib/hubPaths.json b/frontend/src/lib/hubPaths.json index 2adebb2b99..a9c887fe19 100644 --- a/frontend/src/lib/hubPaths.json +++ b/frontend/src/lib/hubPaths.json @@ -2,7 +2,8 @@ "gitSync_0": "hub/9087/sync-script-to-git-repo-windmill", "gitSync_1": "hub/9987/sync-script-to-git-repo-windmill", "gitSync_2": "hub/11498/sync-script-to-git-repo-windmill", - "gitSync": "hub/11533/sync-script-to-git-repo-windmill", + "gitSync_3": "hub/11533/sync-script-to-git-repo-windmill", + "gitSync": "hub/11580/sync-script-to-git-repo-windmill", "gitSyncTest_0": "hub/9073/git-repo-test-read-write-windmill", "gitSyncTest": "hub/11499/git-repo-test-read-write-windmill", "slackErrorHandler": "hub/9206/workspace-or-schedule-error-handler-slack", From 7567b2199b626c59be7e78b4015587a905590bb7 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 26 Jan 2025 11:26:03 +0100 Subject: [PATCH 14/85] chore(main): release 1.450.0 (#5140) * chore(main): release 1.450.0 * Apply automatic changes --------- Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com> --- CHANGELOG.md | 7 +++ backend/Cargo.lock | 50 +++++++++---------- backend/Cargo.toml | 4 +- backend/windmill-api/openapi.yaml | 2 +- benchmarks/lib.ts | 2 +- cli/main.ts | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- lsp/Pipfile | 4 +- openflow.openapi.yaml | 2 +- .../WindmillClient/WindmillClient.psd1 | 2 +- python-client/wmill/pyproject.toml | 2 +- python-client/wmill_pg/pyproject.toml | 2 +- typescript-client/jsr.json | 2 +- typescript-client/package.json | 2 +- version.txt | 2 +- 16 files changed, 49 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ef9cde443..ab0e470a50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.450.0](https://github.com/windmill-labs/windmill/compare/v1.449.3...v1.450.0) (2025-01-26) + + +### Features + +* **cli:** improve codebase support + remove --stateful + warn when pushing stale metadata ([#5139](https://github.com/windmill-labs/windmill/issues/5139)) ([b47e9c1](https://github.com/windmill-labs/windmill/commit/b47e9c14f277339ae51fd3a40e00e8ba4e8a1390)) + ## [1.449.3](https://github.com/windmill-labs/windmill/compare/v1.449.2...v1.449.3) (2025-01-25) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index f4006a4eb5..8d1edc846d 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -10785,7 +10785,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windmill" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "axum", @@ -10827,7 +10827,7 @@ dependencies = [ [[package]] name = "windmill-api" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "argon2", @@ -10919,7 +10919,7 @@ dependencies = [ [[package]] name = "windmill-api-client" -version = "1.449.3" +version = "1.450.0" dependencies = [ "base64 0.22.1", "chrono", @@ -10937,7 +10937,7 @@ dependencies = [ [[package]] name = "windmill-audit" -version = "1.449.3" +version = "1.450.0" dependencies = [ "chrono", "serde", @@ -10950,7 +10950,7 @@ dependencies = [ [[package]] name = "windmill-autoscaling" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "serde", @@ -10964,7 +10964,7 @@ dependencies = [ [[package]] name = "windmill-common" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "async-stream", @@ -11023,7 +11023,7 @@ dependencies = [ [[package]] name = "windmill-git-sync" -version = "1.449.3" +version = "1.450.0" dependencies = [ "regex", "serde", @@ -11037,7 +11037,7 @@ dependencies = [ [[package]] name = "windmill-indexer" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "bytes", @@ -11060,7 +11060,7 @@ dependencies = [ [[package]] name = "windmill-macros" -version = "1.449.3" +version = "1.450.0" dependencies = [ "itertools 0.14.0", "lazy_static", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "windmill-parser" -version = "1.449.3" +version = "1.450.0" dependencies = [ "convert_case 0.6.0", "serde", @@ -11081,7 +11081,7 @@ dependencies = [ [[package]] name = "windmill-parser-bash" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "lazy_static", @@ -11093,7 +11093,7 @@ dependencies = [ [[package]] name = "windmill-parser-csharp" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "serde_json", @@ -11105,7 +11105,7 @@ dependencies = [ [[package]] name = "windmill-parser-go" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "gosyn", @@ -11117,7 +11117,7 @@ dependencies = [ [[package]] name = "windmill-parser-graphql" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "lazy_static", @@ -11129,7 +11129,7 @@ dependencies = [ [[package]] name = "windmill-parser-php" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11140,7 +11140,7 @@ dependencies = [ [[package]] name = "windmill-parser-py" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "itertools 0.14.0", @@ -11151,7 +11151,7 @@ dependencies = [ [[package]] name = "windmill-parser-py-imports" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "async-recursion", @@ -11169,7 +11169,7 @@ dependencies = [ [[package]] name = "windmill-parser-rust" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "convert_case 0.6.0", @@ -11186,7 +11186,7 @@ dependencies = [ [[package]] name = "windmill-parser-sql" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "lazy_static", @@ -11198,7 +11198,7 @@ dependencies = [ [[package]] name = "windmill-parser-ts" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "lazy_static", @@ -11216,7 +11216,7 @@ dependencies = [ [[package]] name = "windmill-parser-wasm" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "getrandom 0.2.15", @@ -11238,7 +11238,7 @@ dependencies = [ [[package]] name = "windmill-parser-yaml" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "serde_json", @@ -11248,7 +11248,7 @@ dependencies = [ [[package]] name = "windmill-queue" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "async-recursion", @@ -11281,7 +11281,7 @@ dependencies = [ [[package]] name = "windmill-sql-datatype-parser-wasm" -version = "1.449.3" +version = "1.450.0" dependencies = [ "wasm-bindgen", "wasm-bindgen-test", @@ -11291,7 +11291,7 @@ dependencies = [ [[package]] name = "windmill-worker" -version = "1.449.3" +version = "1.450.0" dependencies = [ "anyhow", "async-recursion", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 4a1c282fd9..ec89a5b5c9 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "windmill" -version = "1.449.3" +version = "1.450.0" authors.workspace = true edition.workspace = true @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "1.449.3" +version = "1.450.0" authors = ["Ruben Fiszel "] edition = "2021" diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index a8474ac5ea..fa423b4f6a 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.3 + version: 1.450.0 title: Windmill API contact: diff --git a/benchmarks/lib.ts b/benchmarks/lib.ts index 602a8d4037..13a055abe2 100644 --- a/benchmarks/lib.ts +++ b/benchmarks/lib.ts @@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts"; import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts"; import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts"; -export const VERSION = "v1.449.3"; +export const VERSION = "v1.450.0"; export async function login(email: string, password: string): Promise { return await windmill.UserService.login({ diff --git a/cli/main.ts b/cli/main.ts index 9a855689f6..53c12bee3f 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -60,7 +60,7 @@ export { // } // }); -export const VERSION = "1.449.3"; +export const VERSION = "1.450.0"; const command = new Command() .name("wmill") diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 147820ae38..0f3adddd3f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "windmill-components", - "version": "1.449.3", + "version": "1.450.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "windmill-components", - "version": "1.449.3", + "version": "1.450.0", "license": "AGPL-3.0", "dependencies": { "@anthropic-ai/sdk": "^0.32.1", diff --git a/frontend/package.json b/frontend/package.json index 4da15a6827..2399f10903 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "windmill-components", - "version": "1.449.3", + "version": "1.450.0", "scripts": { "dev": "vite dev", "build": "vite build", diff --git a/lsp/Pipfile b/lsp/Pipfile index f1db4ecfcf..72af0ff029 100644 --- a/lsp/Pipfile +++ b/lsp/Pipfile @@ -4,8 +4,8 @@ verify_ssl = true name = "pypi" [packages] -wmill = ">=1.449.3" -wmill_pg = ">=1.449.3" +wmill = ">=1.450.0" +wmill_pg = ">=1.450.0" sendgrid = "*" mysql-connector-python = "*" pymongo = "*" diff --git a/openflow.openapi.yaml b/openflow.openapi.yaml index f1f873fe03..41e0eec367 100644 --- a/openflow.openapi.yaml +++ b/openflow.openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.449.3 + version: 1.450.0 title: OpenFlow Spec contact: name: Ruben Fiszel diff --git a/powershell-client/WindmillClient/WindmillClient.psd1 b/powershell-client/WindmillClient/WindmillClient.psd1 index ad20b6aa12..df9a9b794f 100644 --- a/powershell-client/WindmillClient/WindmillClient.psd1 +++ b/powershell-client/WindmillClient/WindmillClient.psd1 @@ -12,7 +12,7 @@ RootModule = 'WindmillClient.psm1' # Version number of this module. - ModuleVersion = '1.449.3' + ModuleVersion = '1.450.0' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/python-client/wmill/pyproject.toml b/python-client/wmill/pyproject.toml index 9dbbfb01c0..97fd8bbadc 100644 --- a/python-client/wmill/pyproject.toml +++ b/python-client/wmill/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill" -version = "1.449.3" +version = "1.450.0" description = "A client library for accessing Windmill server wrapping the Windmill client API" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/python-client/wmill_pg/pyproject.toml b/python-client/wmill_pg/pyproject.toml index 15b2d3e77d..fc9f2cc8d5 100644 --- a/python-client/wmill_pg/pyproject.toml +++ b/python-client/wmill_pg/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill-pg" -version = "1.449.3" +version = "1.450.0" description = "An extension client for the wmill client library focused on pg" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/typescript-client/jsr.json b/typescript-client/jsr.json index 7056e2d9a5..1b1f07458a 100644 --- a/typescript-client/jsr.json +++ b/typescript-client/jsr.json @@ -1,6 +1,6 @@ { "name": "@windmill/windmill", - "version": "1.449.3", + "version": "1.450.0", "exports": "./src/index.ts", "publish": { "exclude": ["!src", "./s3Types.ts", "./client.ts"] diff --git a/typescript-client/package.json b/typescript-client/package.json index d4ce6969bf..683c736871 100644 --- a/typescript-client/package.json +++ b/typescript-client/package.json @@ -1,7 +1,7 @@ { "name": "windmill-client", "description": "Windmill SDK client for browsers and Node.js", - "version": "1.449.3", + "version": "1.450.0", "author": "Ruben Fiszel", "license": "Apache 2.0", "devDependencies": { diff --git a/version.txt b/version.txt index 8266487f55..333bc64508 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.449.3 +1.450.0 From 119d7ba77f2af23266587e898c43252b9184fe9a Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 26 Jan 2025 16:05:26 +0100 Subject: [PATCH 15/85] remove deno-client --- .github/workflows/deno_on_release.yml | 48 - deno-client/.gitignore | 2 - deno-client/.vscode/settings.json | 5 - deno-client/README.md | 7 - deno-client/build.sh | 12 - deno-client/mod.ts | 319 ------ deno-client/package-lock.json | 1512 ------------------------- deno-client/package.json | 12 - deno-client/tsconfig.json | 15 - 9 files changed, 1932 deletions(-) delete mode 100644 .github/workflows/deno_on_release.yml delete mode 100644 deno-client/.gitignore delete mode 100644 deno-client/.vscode/settings.json delete mode 100644 deno-client/README.md delete mode 100755 deno-client/build.sh delete mode 100644 deno-client/mod.ts delete mode 100644 deno-client/package-lock.json delete mode 100644 deno-client/package.json delete mode 100644 deno-client/tsconfig.json diff --git a/.github/workflows/deno_on_release.yml b/.github/workflows/deno_on_release.yml deleted file mode 100644 index 61f3c3d7e6..0000000000 --- a/.github/workflows/deno_on_release.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Publish deno-client -on: - push: - tags: - - "v*" -env: - repo: windmill-deno-client - -jobs: - build_deno_and_push_to_repo: - runs-on: ubicloud - steps: - - uses: actions/checkout@v4 - - name: generate_deno - run: | - cd deno-client - rm .gitignore - ./build.sh - - name: Pushes to another repository - id: push_directory - uses: cpina/github-action-push-to-another-repository@devel - env: - API_TOKEN_GITHUB: ${{ secrets.DENO_PAT }} - with: - source-directory: deno-client/ - destination-github-username: ${{ github.repository_owner }} - destination-repository-name: ${{ env.repo }} - user-email: ruben@windmill.dev - commit-message: See ORIGIN_COMMIT from $GITHUB_REF - target-branch: main - - tag_repo: - needs: [build_deno_and_push_to_repo] - runs-on: ubicloud - steps: - - uses: actions/checkout@v4 - with: - repository: ${{ github.repository_owner }}/${{ env.repo }} - token: ${{ secrets.DENO_PAT }} - path: ./client - - - name: Push client - run: | - cd ./client - git config --global user.email "ruben@windmill.dev" - git config --global user.name "rubenfiszel[bot]" - git tag -a ${{ github.ref_name }} -m "${{ github.ref_name }}" - git push --tags diff --git a/deno-client/.gitignore b/deno-client/.gitignore deleted file mode 100644 index ea0b8f9eaa..0000000000 --- a/deno-client/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -windmill-api/ -node_modules diff --git a/deno-client/.vscode/settings.json b/deno-client/.vscode/settings.json deleted file mode 100644 index 52ca21d5c4..0000000000 --- a/deno-client/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "deno.enable": true, - "deno.lint": true, - "deno.unstable": true -} diff --git a/deno-client/README.md b/deno-client/README.md deleted file mode 100644 index fc137bc4c0..0000000000 --- a/deno-client/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# windmill-deno-client - -Deno client for Windmill - -## Howto build locally - -run `./build.sh` diff --git a/deno-client/build.sh b/deno-client/build.sh deleted file mode 100755 index 37bac778b6..0000000000 --- a/deno-client/build.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -e - -npm ci --ignore-scripts -npx --yes openapi-typescript-codegen --input ../backend/windmill-api/openapi.yaml \ - --output ./src --useOptions \ - && sed -i '213 i \\ request.referrerPolicy = \"no-referrer\"\n' src/core/request.ts - npx --yes denoify -rm -rf windmill-api -mv deno_dist windmill-api -sed -i 's/buffer DENOIFY: UNKNOWN NODE BUILTIN/node:buffer/' ./windmill-api/core/request.ts -rm -rf src/ diff --git a/deno-client/mod.ts b/deno-client/mod.ts deleted file mode 100644 index d29cc8881c..0000000000 --- a/deno-client/mod.ts +++ /dev/null @@ -1,319 +0,0 @@ -import { - JobService, - ResourceService, - VariableService, -} from "./windmill-api/index.ts"; -import { OpenAPI } from "./windmill-api/index.ts"; - -export { - AdminService, - AuditService, - FlowService, - GranularAclService, - GroupService, - JobService, - ResourceService, - VariableService, - ScriptService, - ScheduleService, - SettingsService, - UserService, - WorkspaceService, -} from "./windmill-api/index.ts"; - -export type Sql = string; -export type Email = string; -export type Base64 = string; -export type Resource = any; - -export const SHARED_FOLDER = "/shared"; - -export function setClient(token: string, baseUrl: string) { - OpenAPI.WITH_CREDENTIALS = true; - OpenAPI.TOKEN = token; - OpenAPI.BASE = baseUrl + "/api"; -} - -setClient( - Deno.env.get("WM_TOKEN") ?? "no_token", - Deno.env.get("BASE_INTERNAL_URL") ?? - Deno.env.get("BASE_URL") ?? - "http://localhost:8000" -); - -/** - * Create a client configuration from env variables - * @returns client configuration - */ -export function getWorkspace(): string { - return Deno.env.get("WM_WORKSPACE") ?? "no_workspace"; -} - -/** - * Get a resource value by path - * @param path path of the resource, default to internal state path - * @param undefinedIfEmpty if the resource does not exist, return undefined instead of throwing an error - * @returns resource value - */ -export async function getResource( - path?: string, - undefinedIfEmpty?: boolean -): Promise { - const workspace = getWorkspace(); - path = path ?? getStatePath(); - try { - return await ResourceService.getResourceValueInterpolated({ - workspace, - path, - }); - } catch (e: any) { - if (undefinedIfEmpty && e.status === 404) { - return undefined; - } else { - throw Error(`Resource not found at ${path} or not visible to you`); - } - } -} - -/** - * Resolve a resource value in case the default value was picked because the input payload was undefined - * @param obj resource value or path of the resource under the format `$res:path` - * @returns resource value - */ -export async function resolveDefaultResource(obj: any): Promise { - if (typeof obj === "string" && obj.startsWith("$res:")) { - return await getResource(obj.substring(5), true); - } else { - return obj; - } -} - -export function getStatePath(): string { - const state_path = Deno.env.get("WM_STATE_PATH_NEW") ?? Deno.env.get("WM_STATE_PATH"); - if (state_path === undefined) { - throw Error("State path not set"); - } - return state_path; -} - -/** - * Set a resource value by path - * @param value new value of the resource to set - * @param path path of the resource to set, default to state path - * @param initializeToTypeIfNotExist if the resource does not exist, initialize it with this type - */ -export async function setResource( - value: any, - path?: string, - initializeToTypeIfNotExist?: string -): Promise { - path = path ?? getStatePath(); - const workspace = getWorkspace(); - if (await ResourceService.existsResource({ workspace, path })) { - await ResourceService.updateResourceValue({ - workspace, - path, - requestBody: { value }, - }); - } else if (initializeToTypeIfNotExist) { - await ResourceService.createResource({ - workspace, - requestBody: { path, value, resource_type: initializeToTypeIfNotExist }, - }); - } else { - throw Error( - `Resource at path ${path} does not exist and no type was provided to initialize it` - ); - } -} - -/** - * Set the state - * @param state state to set - * @deprecated use setState instead - */ -export async function setInternalState(state: any): Promise { - await setResource(state, undefined, "state"); -} - -/** - * Set the state - * @param state state to set - */ -export async function setState(state: any): Promise { - await setResource(state, undefined, "state"); -} - -/** - * Set the shared state - * @param state state to set - */ -export async function setSharedState( - state: any, - path = "state.json" -): Promise { - await Deno.writeTextFile(SHARED_FOLDER + "/" + path, JSON.stringify(state)); -} - -/** - * Get the shared state - * @param state state to set - */ -export async function getSharedState(path = "state.json"): Promise { - return JSON.parse(await Deno.readTextFile(SHARED_FOLDER + "/" + path)); -} - -/** - * Get the internal state - * @deprecated use getState instead - */ -export async function getInternalState(): Promise { - return await getResource(getStatePath(), true); -} - -/** - * Get the state shared across executions - */ -export async function getState(): Promise { - return await getResource(getStatePath(), true); -} - -/** - * Get a variable by path - * @param path path of the variable - * @returns variable value - */ -export async function getVariable(path: string): Promise { - const workspace = getWorkspace(); - try { - return await VariableService.getVariableValue({ workspace, path }); - } catch (e: any) { - throw Error(`Variable not found at ${path} or not visible to you`); - } -} - -/** - * Set a variable by path, create if not exist - * @param path path of the variable - * @param value value of the variable - * @param isSecretIfNotExist if the variable does not exist, create it as secret or not (default: false) - * @param descriptionIfNotExist if the variable does not exist, create it with this description (default: "") - */ -export async function setVariable( - path: string, - value: string, - isSecretIfNotExist?: boolean, - descriptionIfNotExist?: string -): Promise { - const workspace = getWorkspace(); - if (await VariableService.existsVariable({ workspace, path })) { - await VariableService.updateVariable({ - workspace, - path, - requestBody: { value }, - }); - } else { - await VariableService.createVariable({ - workspace, - requestBody: { - path, - value, - is_secret: isSecretIfNotExist ?? false, - description: descriptionIfNotExist ?? "", - }, - }); - } -} - -export async function databaseUrlFromResource(path: string): Promise { - const resource = await getResource(path); - return `postgresql://${resource.user}:${resource.password}@${resource.host}:${resource.port}/${resource.dbname}?sslmode=${resource.sslmode}`; -} - -/** - * Get URLs needed for resuming a flow after this step - * @param approver approver name - * @returns approval page UI URL, resume and cancel API URLs for resumeing the flow - */ -export async function getResumeUrls(approver?: string): Promise<{ - approvalPage: string; - resume: string; - cancel: string; -}> { - const nonce = Math.floor(Math.random() * 4294967295); - const workspace = getWorkspace(); - return await JobService.getResumeUrls({ - workspace, - resumeId: nonce, - approver, - id: Deno.env.get("WM_JOB_ID") ?? "NO_JOB_ID", - }); -} - -/** - * @deprecated use getResumeUrls instead - */ -export function getResumeEndpoints(approver?: string): Promise<{ - approvalPage: string; - resume: string; - cancel: string; -}> { - return getResumeUrls(approver); -} - -export function base64ToUint8Array(data: string): Uint8Array { - return Uint8Array.from(atob(data), (c) => c.charCodeAt(0)); -} - -export function uint8ArrayToBase64(arrayBuffer: Uint8Array): string { - let base64 = ""; - const encodings = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - const bytes = new Uint8Array(arrayBuffer); - const byteLength = bytes.byteLength; - const byteRemainder = byteLength % 3; - const mainLength = byteLength - byteRemainder; - - let a, b, c, d; - let chunk; - - // Main loop deals with bytes in chunks of 3 - for (let i = 0; i < mainLength; i = i + 3) { - // Combine the three bytes into a single integer - chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; - - // Use bitmasks to extract 6-bit segments from the triplet - a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 - b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 - c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 - d = chunk & 63; // 63 = 2^6 - 1 - - // Convert the raw binary segments to the appropriate ASCII encoding - base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; - } - - // Deal with the remaining bytes and padding - if (byteRemainder == 1) { - chunk = bytes[mainLength]; - - a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 - - // Set the 4 least significant bits to zero - b = (chunk & 3) << 4; // 3 = 2^2 - 1 - - base64 += encodings[a] + encodings[b] + "=="; - } else if (byteRemainder == 2) { - chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; - - a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 - b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 - - // Set the 2 least significant bits to zero - c = (chunk & 15) << 2; // 15 = 2^4 - 1 - - base64 += encodings[a] + encodings[b] + encodings[c] + "="; - } - - return base64; -} diff --git a/deno-client/package-lock.json b/deno-client/package-lock.json deleted file mode 100644 index fba5fea4d7..0000000000 --- a/deno-client/package-lock.json +++ /dev/null @@ -1,1512 +0,0 @@ -{ - "name": "deno-client", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "dependencies": { - "denoify": "^1.3.1", - "openapi-typescript-codegen": "^0.23.0" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "dependencies": { - "@octokit/types": "^6.40.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", - "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - } - }, - "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/@types/comment-json": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/comment-json/-/comment-json-1.1.1.tgz", - "integrity": "sha512-U70oEqvnkeSSp8BIJwJclERtT13rd9ejK7XkIzMCQQePZe3VW1b7iQggXyW4ZvfGtGeXD0pZw24q5iWNe++HqQ==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==" - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/comment-json": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-3.0.3.tgz", - "integrity": "sha512-P7XwYkC3qjIK45EAa9c5Y3lR7SMXhJqwFdWg3niAIAcbk3zlpKDdajV8Hyz/Y3sGNn3l+YNMl8A2N/OubSArHg==", - "dependencies": { - "core-util-is": "^1.0.2", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cosmiconfig/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/denoify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/denoify/-/denoify-1.3.1.tgz", - "integrity": "sha512-5wV8Akq7c14CUQggl6w4ar88W6ZBhGhCRhFGktYM0qUFFO6FkCp/kDc9LQgLEaV9TX4l6UQU7ueMAGgcUB4lvA==", - "dependencies": { - "@octokit/rest": "^18.0.0", - "@types/comment-json": "^1.1.1", - "commander": "^4.1.1", - "comment-json": "^3.0.2", - "cosmiconfig": "^7.0.1", - "evt": "^2.4.6", - "get-github-default-branch-name": "^0.0.4", - "gitignore-parser": "0.0.2", - "glob": "^7.1.6", - "minimal-polyfills": "^2.2.2", - "node-fetch": "^2.6.7", - "path-depth": "^1.0.0", - "scripting-tools": "^0.19.14", - "tsafe": "^1.1.3", - "url-join": "^4.0.1", - "yaml": "^2.1.1" - }, - "bin": { - "denoify": "bin/denoify.js", - "enable_short_npm_import_path": "bin/enable_short_npm_import_path.js", - "remove_deno_dist_from_gitignore": "bin/remove_deno_dist_from_gitignore.js" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/evt": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/evt/-/evt-2.4.6.tgz", - "integrity": "sha512-4kSu9YVklCeddEAu/UCzIISrxc5SAD82hX7gXjBox4yyrPNblYrmJr4GgTOOQpNXTGYci+UIpFUYikgZa9fyTQ==", - "dependencies": { - "minimal-polyfills": "^2.2.2", - "run-exclusive": "^2.2.16", - "tsafe": "^1.1.3" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/get-github-default-branch-name": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/get-github-default-branch-name/-/get-github-default-branch-name-0.0.4.tgz", - "integrity": "sha512-ltOGC9Jk0k8boe48Gk7SkJErwxt7MhwXtbNrBUyNCZcwcXSmGRdkKb2u0YO250PGvPsUtdqRjg7lVuIk1VtpCg==", - "dependencies": { - "@octokit/rest": "^18.0.0", - "scripting-tools": "^0.19.12" - } - }, - "node_modules/gitignore-parser": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/gitignore-parser/-/gitignore-parser-0.0.2.tgz", - "integrity": "sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/minimal-polyfills": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/minimal-polyfills/-/minimal-polyfills-2.2.2.tgz", - "integrity": "sha512-eEOUq/LH/DbLWihrxUP050Wi7H/N/I2dQT98Ep6SqOpmIbk4sXOI4wqalve66QoZa+6oljbZWU6I6T4dehQGmw==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openapi-typescript-codegen": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.23.0.tgz", - "integrity": "sha512-gOJXy5g3H3HlLpVNN+USrNK2i2KYBmDczk9Xk34u6JorwrGiDJZUj+al4S+i9TXdfUQ/ZaLxE59Xf3wqkxGfqA==", - "dependencies": { - "camelcase": "^6.3.0", - "commander": "^9.3.0", - "fs-extra": "^10.1.0", - "handlebars": "^4.7.7", - "json-schema-ref-parser": "^9.0.9" - }, - "bin": { - "openapi": "bin/index.js" - } - }, - "node_modules/openapi-typescript-codegen/node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-depth": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-depth/-/path-depth-1.0.0.tgz", - "integrity": "sha512-dEiwdXAQyLvOi6ktLqhFhjVelJiVsdp2xBX3BaUtYCCkMRZTwUiq7cha+A0myvAVXRHbXfjhfTf4mNoAWzm2iA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/run-exclusive": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/run-exclusive/-/run-exclusive-2.2.17.tgz", - "integrity": "sha512-RM/mJJuX0VVfkiCa/yWJLs8Tb2OTweRaKEbWtVj77jXz94ztheIFnfLtK91u7XY5iy4/tyVIXEdv+kQmC1E51w==", - "dependencies": { - "minimal-polyfills": "^2.2.1" - } - }, - "node_modules/scripting-tools": { - "version": "0.19.14", - "resolved": "https://registry.npmjs.org/scripting-tools/-/scripting-tools-0.19.14.tgz", - "integrity": "sha512-KGRES70dEmcaCdpx3R88bLWmfA4mQ/EGikCQy0FGTZwx3y9F5yYkzEhwp02+ZTgpvF25JcNOhDBbOqL6z92kwg==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tsafe": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tsafe/-/tsafe-1.1.3.tgz", - "integrity": "sha512-QQQoed5Acb7Qe/sjMwE/qg57mxD5MXqY5HcGN4i3QyhJiplpo79ABEZiOBvL1cRTOYIzeryWvWQ3xsotTA49MQ==" - }, - "node_modules/uglify-js": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", - "integrity": "sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yaml": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", - "engines": { - "node": ">= 14" - } - } - }, - "dependencies": { - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "requires": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "requires": { - "@octokit/types": "^6.40.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "requires": {} - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "requires": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", - "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - } - }, - "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "requires": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "@types/comment-json": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/comment-json/-/comment-json-1.1.1.tgz", - "integrity": "sha512-U70oEqvnkeSSp8BIJwJclERtT13rd9ejK7XkIzMCQQePZe3VW1b7iQggXyW4ZvfGtGeXD0pZw24q5iWNe++HqQ==" - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==" - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "comment-json": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-3.0.3.tgz", - "integrity": "sha512-P7XwYkC3qjIK45EAa9c5Y3lR7SMXhJqwFdWg3niAIAcbk3zlpKDdajV8Hyz/Y3sGNn3l+YNMl8A2N/OubSArHg==", - "requires": { - "core-util-is": "^1.0.2", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "dependencies": { - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - } - } - }, - "denoify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/denoify/-/denoify-1.3.1.tgz", - "integrity": "sha512-5wV8Akq7c14CUQggl6w4ar88W6ZBhGhCRhFGktYM0qUFFO6FkCp/kDc9LQgLEaV9TX4l6UQU7ueMAGgcUB4lvA==", - "requires": { - "@octokit/rest": "^18.0.0", - "@types/comment-json": "^1.1.1", - "commander": "^4.1.1", - "comment-json": "^3.0.2", - "cosmiconfig": "^7.0.1", - "evt": "2.4.6", - "get-github-default-branch-name": "^0.0.4", - "gitignore-parser": "0.0.2", - "glob": "^7.1.6", - "minimal-polyfills": "^2.2.2", - "node-fetch": "^2.6.7", - "path-depth": "^1.0.0", - "scripting-tools": "^0.19.14", - "tsafe": "^1.1.3", - "url-join": "^4.0.1", - "yaml": "^2.1.1" - } - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "evt": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/evt/-/evt-2.4.6.tgz", - "integrity": "sha512-4kSu9YVklCeddEAu/UCzIISrxc5SAD82hX7gXjBox4yyrPNblYrmJr4GgTOOQpNXTGYci+UIpFUYikgZa9fyTQ==", - "requires": { - "minimal-polyfills": "^2.2.2", - "run-exclusive": "^2.2.16", - "tsafe": "^1.1.3" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "get-github-default-branch-name": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/get-github-default-branch-name/-/get-github-default-branch-name-0.0.4.tgz", - "integrity": "sha512-ltOGC9Jk0k8boe48Gk7SkJErwxt7MhwXtbNrBUyNCZcwcXSmGRdkKb2u0YO250PGvPsUtdqRjg7lVuIk1VtpCg==", - "requires": { - "@octokit/rest": "^18.0.0", - "scripting-tools": "^0.19.12" - } - }, - "gitignore-parser": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/gitignore-parser/-/gitignore-parser-0.0.2.tgz", - "integrity": "sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "requires": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "minimal-polyfills": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/minimal-polyfills/-/minimal-polyfills-2.2.2.tgz", - "integrity": "sha512-eEOUq/LH/DbLWihrxUP050Wi7H/N/I2dQT98Ep6SqOpmIbk4sXOI4wqalve66QoZa+6oljbZWU6I6T4dehQGmw==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "openapi-typescript-codegen": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.23.0.tgz", - "integrity": "sha512-gOJXy5g3H3HlLpVNN+USrNK2i2KYBmDczk9Xk34u6JorwrGiDJZUj+al4S+i9TXdfUQ/ZaLxE59Xf3wqkxGfqA==", - "requires": { - "camelcase": "^6.3.0", - "commander": "^9.3.0", - "fs-extra": "^10.1.0", - "handlebars": "^4.7.7", - "json-schema-ref-parser": "^9.0.9" - }, - "dependencies": { - "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-depth": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-depth/-/path-depth-1.0.0.tgz", - "integrity": "sha512-dEiwdXAQyLvOi6ktLqhFhjVelJiVsdp2xBX3BaUtYCCkMRZTwUiq7cha+A0myvAVXRHbXfjhfTf4mNoAWzm2iA==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "run-exclusive": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/run-exclusive/-/run-exclusive-2.2.17.tgz", - "integrity": "sha512-RM/mJJuX0VVfkiCa/yWJLs8Tb2OTweRaKEbWtVj77jXz94ztheIFnfLtK91u7XY5iy4/tyVIXEdv+kQmC1E51w==", - "requires": { - "minimal-polyfills": "^2.2.1" - } - }, - "scripting-tools": { - "version": "0.19.14", - "resolved": "https://registry.npmjs.org/scripting-tools/-/scripting-tools-0.19.14.tgz", - "integrity": "sha512-KGRES70dEmcaCdpx3R88bLWmfA4mQ/EGikCQy0FGTZwx3y9F5yYkzEhwp02+ZTgpvF25JcNOhDBbOqL6z92kwg==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tsafe": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tsafe/-/tsafe-1.1.3.tgz", - "integrity": "sha512-QQQoed5Acb7Qe/sjMwE/qg57mxD5MXqY5HcGN4i3QyhJiplpo79ABEZiOBvL1cRTOYIzeryWvWQ3xsotTA49MQ==" - }, - "uglify-js": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", - "integrity": "sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==", - "optional": true - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "yaml": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==" - } - } -} diff --git a/deno-client/package.json b/deno-client/package.json deleted file mode 100644 index 581299bea8..0000000000 --- a/deno-client/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "denoify": { - "index": "index.ts" - }, - "dependencies": { - "denoify": "^1.3.1", - "openapi-typescript-codegen": "^0.23.0" - }, - "overrides": { - "evt": "2.4.6" - } -} diff --git a/deno-client/tsconfig.json b/deno-client/tsconfig.json deleted file mode 100644 index 6aee05753b..0000000000 --- a/deno-client/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "es6", - "module": "ES6", - "lib": ["es7", "es6", "dom"], - "declaration": true, - "outDir": "dist", - "strict": true, - "esModuleInterop": true - }, - "exclude": [ - "node_modules", - "dist" - ] - } \ No newline at end of file From 2bed97bbcce8ff236f5b16c0a986104e35913492 Mon Sep 17 00:00:00 2001 From: dieriba Date: Sun, 26 Jan 2025 22:09:49 +0100 Subject: [PATCH 16/85] nits: show error and documentation link, add better name (#5141) --- .../windmill-api/src/postgres_triggers/trigger.rs | 5 +++-- .../postgres/PostgresTriggerEditorInner.svelte | 12 ++++++++---- .../triggers/postgres/RelationPicker.svelte | 5 ++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/backend/windmill-api/src/postgres_triggers/trigger.rs b/backend/windmill-api/src/postgres_triggers/trigger.rs index 2e84c0c7ec..aba36d81c3 100644 --- a/backend/windmill-api/src/postgres_triggers/trigger.rs +++ b/backend/windmill-api/src/postgres_triggers/trigger.rs @@ -76,7 +76,7 @@ impl PostgresSimpleClient { .port(database.port) .user(&database.user) .replication_mode(rust_postgres::config::ReplicationMode::Logical); - + if !database.password.is_empty() { config.password(&database.password); } @@ -389,7 +389,8 @@ async fn listen_to_transactions( } } Err(err) => { - tracing::error!("Postgres trigger error while trying to start_logical_replication_streaming: {}", err.to_string()) + tracing::error!("Postgres trigger error while trying to start logical replication streaming: {}", &err); + disable_with_error(&postgres_trigger, &db, err.to_string()).await } } } diff --git a/frontend/src/lib/components/triggers/postgres/PostgresTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/postgres/PostgresTriggerEditorInner.svelte index 29bbbf0acd..6c0934817d 100644 --- a/frontend/src/lib/components/triggers/postgres/PostgresTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/postgres/PostgresTriggerEditorInner.svelte @@ -443,7 +443,7 @@ bind:selected={transaction_to_track} /> -
+

Select the tables to track. You can choose to track all tables in your database, @@ -456,6 +456,7 @@

Basic

Choose the relations to track without worrying about the underlying mechanics of creating a @@ -469,6 +470,7 @@

Advanced

Select a specific publication from your database to track, and manage it by creating, @@ -488,10 +490,11 @@ -

Columns

Enter the names of the columns you want to track.
If no columns are specified, all columns in the table will be @@ -81,7 +82,9 @@

Where Clause

+ >

Where Clause

Use this field to define a row filter for the selected table. The WHERE Date: Mon, 27 Jan 2025 00:26:27 +0100 Subject: [PATCH 17/85] fix: fix SCIM/SAML settings persistence --- .../src/lib/components/InstanceSetting.svelte | 1335 +++++++++-------- .../lib/components/InstanceSettings.svelte | 8 +- 2 files changed, 681 insertions(+), 662 deletions(-) diff --git a/frontend/src/lib/components/InstanceSetting.svelte b/frontend/src/lib/components/InstanceSetting.svelte index 079d8fc378..adac9af08d 100644 --- a/frontend/src/lib/components/InstanceSetting.svelte +++ b/frontend/src/lib/components/InstanceSetting.svelte @@ -37,8 +37,8 @@ export let loading = true const dispatch = createEventDispatcher() - if (setting.fieldType == 'select' && $values[setting.key] == undefined){ - $values[setting.key] = "default"; + if (setting.fieldType == 'select' && $values[setting.key] == undefined) { + $values[setting.key] = 'default' } let latestKeyRenewalAttempt: { @@ -164,6 +164,7 @@ } + {#if (!setting.cloudonly || isCloudHosted()) && showSetting(setting.key, $values) && !(setting.hiddenIfNull && $values[setting.key] == null)} {#if setting.ee_only != undefined && !$enterpriseLicense}

@@ -181,676 +182,689 @@ {@html setting.description} {/if} - - - {#each (setting.select_items ?? []) as item } - - {/each} - + + + {#each setting.select_items ?? [] as item} + + {/each} +
{:else} - -