From ed02099c62bc342fab1b307fa52a2e19459fb5f1 Mon Sep 17 00:00:00 2001 From: Steven Niu Date: Mon, 8 Jun 2026 06:39:51 +0000 Subject: [PATCH 1/3] support online parameter when create index --- .../create_index_online.adoc | 142 +++++++++++++++++ .../compat_create_index_online.adoc | 115 ++++++++++++++ .../create_index_online.adoc | 143 ++++++++++++++++++ .../compat_create_index_online.adoc | 116 ++++++++++++++ 4 files changed, 516 insertions(+) create mode 100644 CN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc create mode 100644 CN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc create mode 100644 EN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc create mode 100644 EN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc diff --git a/CN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc b/CN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc new file mode 100644 index 0000000..a952e28 --- /dev/null +++ b/CN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc @@ -0,0 +1,142 @@ +:sectnums: +:sectnumlevels: 5 + +:imagesdir: ./_images + += 索引 ONLINE 参数 + +== 目的 + +IvorySQL 数据库支持在创建索引时使用 `ONLINE` 参数,用于在线创建索引,同时不阻塞DML操作。 + +== 实现说明 + +=== 数据结构扩展 + +`IndexStmt` 新增 `online_keyword` 字段。 + +[source,c] +---- +bool transformed; /* true when transformIndexStmt is finished */ +bool concurrent; /* should this be a concurrent index build? */ +bool online_keyword; /* was ONLINE keyword used (as opposed to CONCURRENTLY)? */ +---- + +=== 语法与解析 + +==== 语法规则扩展 + +在 `ora_gram.y` 文件中引入一个弹性选项列表 `create_index_opt_list` / `create_index_opt`,类似现有的 `rebuild_index_opt_list`: + +[source,yacc] +---- +create_index_opt_list: + create_index_opt_list create_index_opt { $$ = lappend($1, $2); } + | /* EMPTY */ { $$ = NIL; } +; + +create_index_opt: + ONLINE + { $$ = makeDefElem("online", (Node *) makeBoolean(true), @1); } + | TABLESPACE name + { $$ = makeDefElem("tablespace", (Node *) makeString($2), @1); } +; +---- + +修改 `IndexStmt` 的两个产生式,将 `OptTableSpace` 替换为 `create_index_opt_list`,并在 action 中从选项列表中提取 `online` 和 `tablespace`。 +[source,yacc] +---- +IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_single_name + ON relation_expr access_method_clause '(' index_params ')' + opt_include opt_unique_null_treatment opt_reloptions + create_index_opt_list where_clause + { + IndexStmt *n = makeNode(IndexStmt); + bool online = false; + bool online_seen = false; + char *tablespace = NULL; + ListCell *lc; + + /* 解析 create_index_opt_list,提取 online 和 tablespace */ + foreach(lc, $15) + { + DefElem *opt = (DefElem *) lfirst(lc); + + if (strcmp(opt->defname, "online") == 0) + { + if (online_seen) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("ONLINE specified multiple times"), + parser_errposition(opt->location))); + online = defGetBoolean(opt); + online_seen = true; + } + else if (strcmp(opt->defname, "tablespace") == 0) + { + if (tablespace != NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("TABLESPACE specified multiple times"), + parser_errposition(opt->location))); + tablespace = defGetString(opt); + } + } + + /* CONCURRENTLY 与 ONLINE 互斥 */ + if ($4 && online) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cannot use both CONCURRENTLY and ONLINE"), + parser_errposition(@4))); + + n->unique = $2; + n->concurrent = $4 || online; + n->online_keyword = online; + n->idxname = $5; + n->relation = $7; + n->accessMethod = $8; + n->indexParams = $10; + n->indexIncludingParams = $12; + n->nulls_not_distinct = !$13; + n->options = $14; /* opt_reloptions (WITH clause) */ + n->tableSpace = tablespace; + n->whereClause = $16; + n->excludeOpNames = NIL; + n->idxcomment = NULL; + n->indexOid = InvalidOid; + n->oldNumber = InvalidRelFileNumber; + n->oldCreateSubid = InvalidSubTransactionId; + n->oldFirstRelfilelocatorSubid = InvalidSubTransactionId; + n->primary = false; + n->isconstraint = false; + n->deferrable = false; + n->initdeferred = false; + n->transformed = false; + n->if_not_exists = false; + n->reset_default_tblspc = false; + $$ = (Node *) n; + } +---- + +==== 执行层修改(`indexcmds.c`) + +`DefineIndex()` 中已有临时表降级逻辑(`concurrent = false` when temp table),需在相同位置补充分区表的降级逻辑: + +[source,c] +---- +/* 已有:临时表降级 */ +if (stmt->concurrent && get_rel_persistence(tableId) != RELPERSISTENCE_TEMP) + concurrent = true; +else + concurrent = false; + +/* 新增:分区表降级 + * Oracle 对分区表 CREATE INDEX ONLINE 返回成功(全局非分区索引)。 + * PostgreSQL 的 concurrent + partitioned 路径会报错,因此在 Oracle 解析器 + * 模式下(stmt->online_keyword = true)对分区表静默降级为普通构建。 + */ +if (concurrent && partitioned && stmt->online_keyword) + concurrent = false; +---- + diff --git a/CN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc b/CN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc new file mode 100644 index 0000000..fb3ea4b --- /dev/null +++ b/CN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc @@ -0,0 +1,115 @@ +:sectnums: +:sectnumlevels: 5 + +:imagesdir: ./_images + += 索引 ONLINE 参数 + +== 目的 + +本文档解释 IvorySQL 中 `ONLINE` 参数在创建索引时的功能,实现该参数功能以保持与 Oracle 行为一致。 + +== 功能说明 + +- `ONLINE` 参数在创建索引时被指定,可允许 DML 并发执行,类似 PostgreSQL 中的 `CONCURRENTLY`,但不能与 `CONCURRENTLY` 同时出现。 +- `ONLINE` 必须支持出现在列列表 `)` 之后、`WHERE` 子句之前的任意位置,且与 `TABLESPACE`、`PARALLEL`(如已支持)等其他属性的顺序无关。 +- 临时表上的 `CREATE INDEX ... ONLINE` 自动降级为普通构建(不报错,与 `CONCURRENTLY` 行为一致)。 +- 分区表上的 `CREATE INDEX ... ONLINE` **自动降级为普通构建**(不报错)。 + +== 测试用例 + +=== 测试环境准备 + +[source,sql] +---- +-- 基础测试表 +CREATE TABLE tbl_ci_online ( + id NUMBER(10) PRIMARY KEY, + name VARCHAR2(100), + dept_id NUMBER(10), + salary NUMBER(10,2), + status VARCHAR2(20) +); +INSERT INTO tbl_ci_online + SELECT g, 'name'||g, MOD(g,20), g*100.0, CASE WHEN MOD(g,2)=0 THEN 'ACTIVE' ELSE 'INACTIVE' END + FROM generate_series(1, 1000) g; + +-- 唯一索引测试表 +CREATE TABLE tbl_ci_unique ( + id NUMBER(10) PRIMARY KEY, + email VARCHAR2(200) NOT NULL +); +INSERT INTO tbl_ci_unique SELECT g, 'user'||g||'@example.com' FROM generate_series(1, 200) g; + +-- 分区表 +CREATE TABLE tbl_ci_part ( + id NUMBER(10), + region VARCHAR2(20) +) PARTITION BY RANGE (id); +CREATE TABLE tbl_ci_part_p1 PARTITION OF tbl_ci_part FOR VALUES FROM (1) TO (501); +CREATE TABLE tbl_ci_part_p2 PARTITION OF tbl_ci_part FOR VALUES FROM (501) TO (1001); +INSERT INTO tbl_ci_part SELECT g, CASE WHEN g<=500 THEN 'east' ELSE 'west' END + FROM generate_series(1, 1000) g; +---- + +=== 基础 ONLINE 构建 + +[source,sql] +---- +-- 最简单形式 +CREATE INDEX idx_online_name ON tbl_ci_online (name) ONLINE; + +-- 验证索引已建立并有效 +SELECT indisvalid FROM pg_index + WHERE indexrelid = 'idx_online_name'::regclass; +-- 期望:t + +-- 多列索引 +CREATE INDEX idx_online_multi ON tbl_ci_online (dept_id, salary) ONLINE; + +-- 表达式索引 +CREATE INDEX idx_online_expr ON tbl_ci_online (lower(name)) ONLINE; +---- + +=== 分区表 ONLINE + +[source,sql] +---- +-- 分区表父级索引 ONLINE +-- 注:ONLINE 在分区表上静默降级为普通构建,与 Oracle 行为一致 +CREATE INDEX idx_part_online ON tbl_ci_part (id) ONLINE; + +-- 验证索引已创建且有效(降级为普通构建,父级索引 + 各分区子索引均 VALID) +SELECT c.relname, i.indisvalid +FROM pg_index i +JOIN pg_class c ON c.oid = i.indexrelid +WHERE c.relname LIKE '%idx_part_online%' +ORDER BY c.relname; +-- 期望:idx_part_online(父)及两个分区子索引 indisvalid = t + +-- 分区表 ONLINE + TABLESPACE +CREATE INDEX idx_part_online_tbs ON tbl_ci_part (region) ONLINE TABLESPACE pg_default; +---- + +=== CONCURRENTLY 与 ONLINE 互斥 + +[source,sql] +---- +-- CONCURRENTLY 在前,ONLINE 在后 +CREATE INDEX CONCURRENTLY idx_both ON tbl_ci_online (name) ONLINE; +-- 期望:ERROR: cannot use both CONCURRENTLY and ONLINE + +-- 验证原有 CONCURRENTLY 语法不受影响 +CREATE INDEX CONCURRENTLY idx_still_conc ON tbl_ci_online (dept_id); +-- 期望:成功 +---- + +=== 测试环境清理 + +[source,sql] +---- +DROP TABLE IF EXISTS tbl_ci_online CASCADE; +DROP TABLE IF EXISTS tbl_ci_part CASCADE; +DROP TABLE IF EXISTS tbl_ci_unique CASCADE; +---- + diff --git a/EN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc b/EN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc new file mode 100644 index 0000000..d056ddb --- /dev/null +++ b/EN/modules/ROOT/pages/master/compatibility_features_design/create_index_online.adoc @@ -0,0 +1,143 @@ +:sectnums: +:sectnumlevels: 5 + +:imagesdir: ./_images + += ONLINE Parameter for CREATE INDEX + +== Purpose + +IvorySQL supports the `ONLINE` parameter when creating an index, allowing indexes to be built online without blocking DML operations. + +== Implementation Notes + +=== Data Structure Extension + +A new `online_keyword` field is added to `IndexStmt`. + +[source,c] +---- +bool transformed; /* true when transformIndexStmt is finished */ +bool concurrent; /* should this be a concurrent index build? */ +bool online_keyword; /* was ONLINE keyword used (as opposed to CONCURRENTLY)? */ +---- + +=== Syntax and Parsing + +==== Grammar Rule Extension + +A flexible option list `create_index_opt_list` / `create_index_opt` is introduced in `ora_gram.y`, similar to the existing `rebuild_index_opt_list`: + +[source,yacc] +---- +create_index_opt_list: + create_index_opt_list create_index_opt { $$ = lappend($1, $2); } + | /* EMPTY */ { $$ = NIL; } +; + +create_index_opt: + ONLINE + { $$ = makeDefElem("online", (Node *) makeBoolean(true), @1); } + | TABLESPACE name + { $$ = makeDefElem("tablespace", (Node *) makeString($2), @1); } +; +---- + +The two productions for `IndexStmt` are modified to replace `OptTableSpace` with `create_index_opt_list`, extracting `online` and `tablespace` from the option list in the action: + +[source,yacc] +---- +IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_single_name + ON relation_expr access_method_clause '(' index_params ')' + opt_include opt_unique_null_treatment opt_reloptions + create_index_opt_list where_clause + { + IndexStmt *n = makeNode(IndexStmt); + bool online = false; + bool online_seen = false; + char *tablespace = NULL; + ListCell *lc; + + /* Parse create_index_opt_list, extract online and tablespace */ + foreach(lc, $15) + { + DefElem *opt = (DefElem *) lfirst(lc); + + if (strcmp(opt->defname, "online") == 0) + { + if (online_seen) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("ONLINE specified multiple times"), + parser_errposition(opt->location))); + online = defGetBoolean(opt); + online_seen = true; + } + else if (strcmp(opt->defname, "tablespace") == 0) + { + if (tablespace != NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("TABLESPACE specified multiple times"), + parser_errposition(opt->location))); + tablespace = defGetString(opt); + } + } + + /* CONCURRENTLY and ONLINE are mutually exclusive */ + if ($4 && online) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cannot use both CONCURRENTLY and ONLINE"), + parser_errposition(@4))); + + n->unique = $2; + n->concurrent = $4 || online; + n->online_keyword = online; + n->idxname = $5; + n->relation = $7; + n->accessMethod = $8; + n->indexParams = $10; + n->indexIncludingParams = $12; + n->nulls_not_distinct = !$13; + n->options = $14; /* opt_reloptions (WITH clause) */ + n->tableSpace = tablespace; + n->whereClause = $16; + n->excludeOpNames = NIL; + n->idxcomment = NULL; + n->indexOid = InvalidOid; + n->oldNumber = InvalidRelFileNumber; + n->oldCreateSubid = InvalidSubTransactionId; + n->oldFirstRelfilelocatorSubid = InvalidSubTransactionId; + n->primary = false; + n->isconstraint = false; + n->deferrable = false; + n->initdeferred = false; + n->transformed = false; + n->if_not_exists = false; + n->reset_default_tblspc = false; + $$ = (Node *) n; + } +---- + +==== Executor Layer Changes (`indexcmds.c`) + +`DefineIndex()` already contains downgrade logic for temporary tables (`concurrent = false` when temp table). The same location must also be updated with downgrade logic for partitioned tables: + +[source,c] +---- +/* Existing: downgrade for temp tables */ +if (stmt->concurrent && get_rel_persistence(tableId) != RELPERSISTENCE_TEMP) + concurrent = true; +else + concurrent = false; + +/* New: downgrade for partitioned tables. + * Oracle returns success for CREATE INDEX ONLINE on partitioned tables + * (global non-partitioned index). PostgreSQL's concurrent + partitioned + * path raises an error, so in Oracle parser mode (stmt->online_keyword = true) + * we silently downgrade to a regular build for partitioned tables. + */ +if (concurrent && partitioned && stmt->online_keyword) + concurrent = false; +---- diff --git a/EN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc b/EN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc new file mode 100644 index 0000000..86392c1 --- /dev/null +++ b/EN/modules/ROOT/pages/master/oracle_compatibility/compat_create_index_online.adoc @@ -0,0 +1,116 @@ +:sectnums: +:sectnumlevels: 5 + +:imagesdir: ./_images + += ONLINE Parameter for CREATE INDEX + +== Purpose + +This document explains the behavior of the `ONLINE` parameter when creating an index in IvorySQL. This parameter is implemented to maintain compatibility with Oracle behavior. + +== Feature Description + +- When specified during index creation, the `ONLINE` parameter allows concurrent DML operations, similar to PostgreSQL's `CONCURRENTLY`, but cannot be used together with `CONCURRENTLY`. +- `ONLINE` must be supported in any position after the closing `)` of the column list and before the `WHERE` clause, regardless of the order relative to other attributes such as `TABLESPACE` and `PARALLEL` (if supported). +- `CREATE INDEX ... ONLINE` on a temporary table is automatically downgraded to a regular build (no error, consistent with `CONCURRENTLY` behavior). +- `CREATE INDEX ... ONLINE` on a partitioned table is **automatically downgraded to a regular build** (no error). + +== Test Cases + +=== Test Environment Setup + +[source,sql] +---- +-- Basic test table +CREATE TABLE tbl_ci_online ( + id NUMBER(10) PRIMARY KEY, + name VARCHAR2(100), + dept_id NUMBER(10), + salary NUMBER(10,2), + status VARCHAR2(20) +); +INSERT INTO tbl_ci_online + SELECT g, 'name'||g, MOD(g,20), g*100.0, CASE WHEN MOD(g,2)=0 THEN 'ACTIVE' ELSE 'INACTIVE' END + FROM generate_series(1, 1000) g; + +-- Unique index test table +CREATE TABLE tbl_ci_unique ( + id NUMBER(10) PRIMARY KEY, + email VARCHAR2(200) NOT NULL +); +INSERT INTO tbl_ci_unique SELECT g, 'user'||g||'@example.com' FROM generate_series(1, 200) g; + +-- Partitioned table +CREATE TABLE tbl_ci_part ( + id NUMBER(10), + region VARCHAR2(20) +) PARTITION BY RANGE (id); +CREATE TABLE tbl_ci_part_p1 PARTITION OF tbl_ci_part FOR VALUES FROM (1) TO (501); +CREATE TABLE tbl_ci_part_p2 PARTITION OF tbl_ci_part FOR VALUES FROM (501) TO (1001); +INSERT INTO tbl_ci_part SELECT g, CASE WHEN g<=500 THEN 'east' ELSE 'west' END + FROM generate_series(1, 1000) g; +---- + +=== Basic ONLINE Build + +[source,sql] +---- +-- Simplest form +CREATE INDEX idx_online_name ON tbl_ci_online (name) ONLINE; + +-- Verify the index was created and is valid +SELECT indisvalid FROM pg_index + WHERE indexrelid = 'idx_online_name'::regclass; +-- Expected: t + +-- Multi-column index +CREATE INDEX idx_online_multi ON tbl_ci_online (dept_id, salary) ONLINE; + +-- Expression index +CREATE INDEX idx_online_expr ON tbl_ci_online (lower(name)) ONLINE; +---- + +=== ONLINE on Partitioned Table + +[source,sql] +---- +-- ONLINE on parent of partitioned table +-- Note: ONLINE on a partitioned table is silently downgraded to a regular build, +-- consistent with Oracle behavior +CREATE INDEX idx_part_online ON tbl_ci_part (id) ONLINE; + +-- Verify the index was created and is valid (downgraded to regular build; +-- parent index and all partition child indexes are VALID) +SELECT c.relname, i.indisvalid +FROM pg_index i +JOIN pg_class c ON c.oid = i.indexrelid +WHERE c.relname LIKE '%idx_part_online%' +ORDER BY c.relname; +-- Expected: idx_part_online (parent) and both partition child indexes have indisvalid = t + +-- Partitioned table ONLINE + TABLESPACE +CREATE INDEX idx_part_online_tbs ON tbl_ci_part (region) ONLINE TABLESPACE pg_default; +---- + +=== CONCURRENTLY and ONLINE Are Mutually Exclusive + +[source,sql] +---- +-- CONCURRENTLY first, ONLINE after +CREATE INDEX CONCURRENTLY idx_both ON tbl_ci_online (name) ONLINE; +-- Expected: ERROR: cannot use both CONCURRENTLY and ONLINE + +-- Verify existing CONCURRENTLY syntax is unaffected +CREATE INDEX CONCURRENTLY idx_still_conc ON tbl_ci_online (dept_id); +-- Expected: success +---- + +=== Test Environment Cleanup + +[source,sql] +---- +DROP TABLE IF EXISTS tbl_ci_online CASCADE; +DROP TABLE IF EXISTS tbl_ci_part CASCADE; +DROP TABLE IF EXISTS tbl_ci_unique CASCADE; +---- From f7932e7eeeced1c70ab9bc83c023c383a0b5121e Mon Sep 17 00:00:00 2001 From: Steven Niu Date: Mon, 8 Jun 2026 07:16:19 +0000 Subject: [PATCH 2/3] update nav.adoc for ONLINE Parameter of index creation --- CN/modules/ROOT/nav.adoc | 2 ++ EN/modules/ROOT/nav.adoc | 2 ++ 2 files changed, 4 insertions(+) diff --git a/CN/modules/ROOT/nav.adoc b/CN/modules/ROOT/nav.adoc index 248a06b..5cad74d 100644 --- a/CN/modules/ROOT/nav.adoc +++ b/CN/modules/ROOT/nav.adoc @@ -28,6 +28,7 @@ ** xref:master/oracle_compatibility/compat_call_into.adoc[19、CALL INTO] ** xref:master/oracle_compatibility/compat_read_only_view.adoc[20、视图只读] ** xref:master/oracle_compatibility/with_function_procedure.adoc[21、WITH FUNCTION/PROCEDURE] +** xref:master/oracle_compatibility/compat_create_index_online.adoc[22、索引 ONLINE 参数] * 容器化与云服务 ** 容器化指南 *** xref:master/containerization/k8s_deployment.adoc[K8S部署] @@ -95,6 +96,7 @@ **** xref:master/compatibility_features_design/call_into.adoc[CALL INTO] **** xref:master/compatibility_features_design/read_only_view.adoc[视图只读] **** xref:master/compatibility_features_design/with_function_procedure_impl.adoc[WITH FUNCTION/PROCEDURE] +**** xref:master/compatibility_features_design/create_index_online.adoc[索引 ONLINE 参数] *** 内置函数 **** xref:master/oracle_builtin_functions/sys_context.adoc[sys_context] **** xref:master/oracle_builtin_functions/userenv.adoc[userenv] diff --git a/EN/modules/ROOT/nav.adoc b/EN/modules/ROOT/nav.adoc index 99836ea..33e493d 100644 --- a/EN/modules/ROOT/nav.adoc +++ b/EN/modules/ROOT/nav.adoc @@ -28,6 +28,7 @@ ** xref:master/oracle_compatibility/compat_call_into.adoc[19、CALL INTO] ** xref:master/oracle_compatibility/compat_read_only_view.adoc[20、Read Only View] ** xref:master/oracle_compatibility/with_function_procedure_en.adoc[21、WITH FUNCTION/PROCEDURE] +** xref:master/oracle_compatibility/compat_create_index_online.adoc[22、ONLINE Parameter for CREATE INDEX] * Containerization and Cloud Service ** Containerization *** xref:master/containerization/k8s_deployment.adoc[K8S deployment] @@ -95,6 +96,7 @@ *** xref:master/compatibility_features_design/call_into.adoc[CALL INTO] *** xref:master/compatibility_features_design/read_only_view.adoc[Read Only View] *** xref:master/compatibility_features_design/with_function_procedure_impl_en.adoc[WITH FUNCTION/PROCEDURE] +*** xref:master/compatibility_features_design/create_index_online.adoc[ONLINE Parameter for CREATE INDEX] ** Built-in Functions *** xref:master/oracle_builtin_functions/sys_context.adoc[sys_context] *** xref:master/oracle_builtin_functions/userenv.adoc[userenv] From d4c9a36383bdc62b3e2afa44ee272e5f9a334ec8 Mon Sep 17 00:00:00 2001 From: Steven Niu Date: Mon, 8 Jun 2026 07:57:28 +0000 Subject: [PATCH 3/3] fix issue of build faiure --- .github/workflows/pr-preview.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml index 8ff0446..3a0f238 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview.yml @@ -62,6 +62,8 @@ jobs: yq -i ".content.sources[0].url = \"$NEW_LOCAL_URL\"" "$PLAYBOOK_FILE" + yq -i ".ui.bundle.url = \"./entemplates.zip\"" "$PLAYBOOK_FILE" + yq -i ".content.sources[0].branches = [\"HEAD\"]" "$PLAYBOOK_FILE" yq -i ".content.sources[0].edit_url = false" "$PLAYBOOK_FILE"