mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 09:58:46 +08:00
190 lines
7.3 KiB
TypeScript
190 lines
7.3 KiB
TypeScript
import { definePostgresSqlMigration } from './sqlMigration';
|
|
|
|
export const pg0012TaskTriggerDefinitionsMigration =
|
|
definePostgresSqlMigration({
|
|
id: 'pg-0012-task-trigger-definitions',
|
|
statements: [
|
|
`
|
|
CREATE TABLE "ql3"."task_definitions" (
|
|
project_id varchar(128) NOT NULL,
|
|
task_id varchar(128) NOT NULL,
|
|
current_revision integer NOT NULL,
|
|
created_at_ms bigint NOT NULL,
|
|
updated_at_ms bigint NOT NULL,
|
|
CONSTRAINT task_definitions_pkey PRIMARY KEY (project_id, task_id),
|
|
CONSTRAINT ql3_task_definitions_project_fk
|
|
FOREIGN KEY (project_id) REFERENCES "ql3"."projects" (id) ON DELETE RESTRICT,
|
|
CONSTRAINT ql3_task_definitions_id_check CHECK (
|
|
char_length(project_id) BETWEEN 1 AND 128
|
|
AND char_length(task_id) BETWEEN 1 AND 128
|
|
AND project_id !~ '[[:cntrl:]]'
|
|
AND task_id !~ '[[:cntrl:]]'
|
|
),
|
|
CONSTRAINT ql3_task_definitions_revision_check
|
|
CHECK (current_revision BETWEEN 1 AND 2147483647),
|
|
CONSTRAINT ql3_task_definitions_time_check
|
|
CHECK (created_at_ms >= 0 AND updated_at_ms >= created_at_ms)
|
|
)
|
|
`.trim(),
|
|
`
|
|
CREATE TABLE "ql3"."task_definition_revisions" (
|
|
project_id varchar(128) NOT NULL,
|
|
task_id varchar(128) NOT NULL,
|
|
revision integer NOT NULL,
|
|
mutation_id uuid NOT NULL,
|
|
name varchar(255) NOT NULL,
|
|
description varchar(4096),
|
|
kind varchar(16) NOT NULL,
|
|
spec_json jsonb NOT NULL,
|
|
labels_json jsonb NOT NULL,
|
|
enabled boolean NOT NULL,
|
|
content_digest char(64) NOT NULL,
|
|
created_at_ms bigint NOT NULL,
|
|
CONSTRAINT task_definition_revisions_pkey
|
|
PRIMARY KEY (project_id, task_id, revision),
|
|
CONSTRAINT ql3_task_definition_revisions_head_fk
|
|
FOREIGN KEY (project_id, task_id)
|
|
REFERENCES "ql3"."task_definitions" (project_id, task_id)
|
|
ON DELETE RESTRICT,
|
|
CONSTRAINT ql3_task_definition_revisions_revision_check
|
|
CHECK (revision BETWEEN 1 AND 2147483647),
|
|
CONSTRAINT ql3_task_definition_revisions_name_check CHECK (
|
|
char_length(name) BETWEEN 1 AND 255
|
|
AND (description IS NULL OR char_length(description) BETWEEN 1 AND 4096)
|
|
),
|
|
CONSTRAINT ql3_task_definition_revisions_kind_check
|
|
CHECK (kind IN ('script', 'command', 'workflow', 'agent', 'tool')),
|
|
CONSTRAINT ql3_task_definition_revisions_spec_check CHECK (
|
|
jsonb_typeof(spec_json) = 'object'
|
|
AND octet_length(spec_json::text) BETWEEN 2 AND 65536
|
|
),
|
|
CONSTRAINT ql3_task_definition_revisions_labels_check CHECK (
|
|
jsonb_typeof(labels_json) = 'object'
|
|
AND octet_length(labels_json::text) BETWEEN 2 AND 16384
|
|
),
|
|
CONSTRAINT ql3_task_definition_revisions_digest_check
|
|
CHECK (content_digest ~ '^[0-9a-f]{64}$'),
|
|
CONSTRAINT ql3_task_definition_revisions_created_check
|
|
CHECK (created_at_ms >= 0)
|
|
)
|
|
`.trim(),
|
|
`
|
|
CREATE UNIQUE INDEX ql3_task_definition_revisions_mutation_uidx
|
|
ON "ql3"."task_definition_revisions" (mutation_id)
|
|
`.trim(),
|
|
`
|
|
CREATE INDEX ql3_task_definition_revisions_project_kind_idx
|
|
ON "ql3"."task_definition_revisions"
|
|
(project_id, kind, enabled, task_id, revision)
|
|
`.trim(),
|
|
`
|
|
CREATE TABLE "ql3"."triggers" (
|
|
project_id varchar(128) NOT NULL,
|
|
trigger_id varchar(128) NOT NULL,
|
|
task_id varchar(128) NOT NULL,
|
|
current_revision integer NOT NULL,
|
|
created_at_ms bigint NOT NULL,
|
|
updated_at_ms bigint NOT NULL,
|
|
CONSTRAINT triggers_pkey PRIMARY KEY (project_id, trigger_id),
|
|
CONSTRAINT ql3_triggers_project_fk
|
|
FOREIGN KEY (project_id) REFERENCES "ql3"."projects" (id) ON DELETE RESTRICT,
|
|
CONSTRAINT ql3_triggers_task_fk
|
|
FOREIGN KEY (project_id, task_id)
|
|
REFERENCES "ql3"."task_definitions" (project_id, task_id)
|
|
ON DELETE RESTRICT,
|
|
CONSTRAINT ql3_triggers_id_check CHECK (
|
|
char_length(project_id) BETWEEN 1 AND 128
|
|
AND char_length(trigger_id) BETWEEN 1 AND 128
|
|
AND char_length(task_id) BETWEEN 1 AND 128
|
|
AND project_id !~ '[[:cntrl:]]'
|
|
AND trigger_id !~ '[[:cntrl:]]'
|
|
AND task_id !~ '[[:cntrl:]]'
|
|
),
|
|
CONSTRAINT ql3_triggers_revision_check
|
|
CHECK (current_revision BETWEEN 1 AND 2147483647),
|
|
CONSTRAINT ql3_triggers_time_check
|
|
CHECK (created_at_ms >= 0 AND updated_at_ms >= created_at_ms)
|
|
)
|
|
`.trim(),
|
|
`
|
|
CREATE UNIQUE INDEX ql3_triggers_task_uidx
|
|
ON "ql3"."triggers" (project_id, trigger_id, task_id)
|
|
`.trim(),
|
|
`
|
|
CREATE TABLE "ql3"."trigger_revisions" (
|
|
project_id varchar(128) NOT NULL,
|
|
trigger_id varchar(128) NOT NULL,
|
|
revision integer NOT NULL,
|
|
mutation_id uuid NOT NULL,
|
|
task_id varchar(128) NOT NULL,
|
|
task_revision integer NOT NULL,
|
|
task_content_digest char(64) NOT NULL,
|
|
spec_json jsonb NOT NULL,
|
|
enabled boolean NOT NULL,
|
|
content_digest char(64) NOT NULL,
|
|
created_at_ms bigint NOT NULL,
|
|
CONSTRAINT trigger_revisions_pkey
|
|
PRIMARY KEY (project_id, trigger_id, revision),
|
|
CONSTRAINT ql3_trigger_revisions_head_fk
|
|
FOREIGN KEY (project_id, trigger_id, task_id)
|
|
REFERENCES "ql3"."triggers" (project_id, trigger_id, task_id)
|
|
ON DELETE RESTRICT,
|
|
CONSTRAINT ql3_trigger_revisions_task_revision_fk
|
|
FOREIGN KEY (project_id, task_id, task_revision)
|
|
REFERENCES "ql3"."task_definition_revisions" (project_id, task_id, revision)
|
|
ON DELETE RESTRICT,
|
|
CONSTRAINT ql3_trigger_revisions_revision_check CHECK (
|
|
revision BETWEEN 1 AND 2147483647
|
|
AND task_revision BETWEEN 1 AND 2147483647
|
|
),
|
|
CONSTRAINT ql3_trigger_revisions_task_digest_check
|
|
CHECK (task_content_digest ~ '^[0-9a-f]{64}$'),
|
|
CONSTRAINT ql3_trigger_revisions_spec_check CHECK (
|
|
jsonb_typeof(spec_json) = 'object'
|
|
AND octet_length(spec_json::text) BETWEEN 2 AND 16384
|
|
),
|
|
CONSTRAINT ql3_trigger_revisions_digest_check
|
|
CHECK (content_digest ~ '^[0-9a-f]{64}$'),
|
|
CONSTRAINT ql3_trigger_revisions_created_check
|
|
CHECK (created_at_ms >= 0)
|
|
)
|
|
`.trim(),
|
|
`
|
|
CREATE UNIQUE INDEX ql3_trigger_revisions_mutation_uidx
|
|
ON "ql3"."trigger_revisions" (mutation_id)
|
|
`.trim(),
|
|
`
|
|
CREATE INDEX ql3_trigger_revisions_project_enabled_idx
|
|
ON "ql3"."trigger_revisions"
|
|
(project_id, enabled, trigger_id, revision)
|
|
`.trim(),
|
|
`
|
|
CREATE INDEX ql3_trigger_revisions_task_idx
|
|
ON "ql3"."trigger_revisions"
|
|
(project_id, task_id, task_revision, trigger_id, revision)
|
|
`.trim(),
|
|
`
|
|
DO $ql3$
|
|
BEGIN
|
|
UPDATE "ql3"."schema_capabilities"
|
|
SET contract_version = 11,
|
|
migration_id = 'pg-0012-task-trigger-definitions',
|
|
capabilities = '{"api_credential":1,"api_credential_admin":1,"api_credential_pepper_binding":1,"cluster_recovery":1,"cluster_recovery_claim":1,"identity_admin":1,"project_policy":1,"run_core":1,"run_dispatch_lease":1,"run_retry_policy":1,"security_audit":1,"security_audit_query":1,"task_definition":1,"trigger_definition":1,"worker_attestation":1,"worker_credential":1,"worker_session":1}'::jsonb,
|
|
updated_at_ms = floor(
|
|
extract(epoch FROM transaction_timestamp()) * 1000
|
|
)::bigint
|
|
WHERE contract_name = 'control-core'
|
|
AND contract_version = 10
|
|
AND migration_id = 'pg-0011-api-credential-pepper-binding'
|
|
AND capabilities = '{"api_credential":1,"api_credential_admin":1,"api_credential_pepper_binding":1,"cluster_recovery":1,"cluster_recovery_claim":1,"identity_admin":1,"project_policy":1,"run_core":1,"run_dispatch_lease":1,"run_retry_policy":1,"security_audit":1,"security_audit_query":1,"worker_attestation":1,"worker_credential":1,"worker_session":1}'::jsonb;
|
|
|
|
IF NOT FOUND THEN
|
|
RAISE EXCEPTION 'control-core capability is not at version 10'
|
|
USING ERRCODE = 'check_violation';
|
|
END IF;
|
|
END
|
|
$ql3$
|
|
`.trim(),
|
|
],
|
|
});
|