agora inbox for [email protected]help / color / mirror / Atom feed
[PATCH v13 05/18] Refactor to allow reindexing all index partitions at once.. 102+ messages / 2 participants [nested] [flat]
* [PATCH v13 05/18] Refactor to allow reindexing all index partitions at once.. @ 2020-11-01 18:25 Justin Pryzby <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Justin Pryzby @ 2020-11-01 18:25 UTC (permalink / raw) The utility of this is to reindex N partitions in 2 transactions, rather than 2*N transactions. --- src/backend/commands/indexcmds.c | 258 ++++++++++++++------- src/test/regress/expected/create_index.out | 4 +- 2 files changed, 182 insertions(+), 80 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index b21555b6cf..f5fea14ff4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -102,6 +102,8 @@ static void ReindexMultipleInternal(List *relids, ReindexParams *params); static bool ReindexRelationConcurrently(Oid relationOid, ReindexParams *params); +static List *ReindexIndexesConcurrently(List *indexIds, List *heapRelationIds, + ReindexParams *params, MemoryContext private_context); static void update_relispartition(Oid relationId, bool newval); static inline void set_indexsafe_procflags(void); @@ -124,6 +126,15 @@ typedef struct ReindexErrorInfo char relkind; } ReindexErrorInfo; +/* Argument to ReindexIndexConcurrently takes a List* of these */ +typedef struct ReindexIndexInfo +{ + Oid indexId; + Oid tableId; + Oid amId; + bool safe; /* for set_indexsafe_procflags */ +} ReindexIndexInfo; + /* * CheckIndexCompatible * Determine whether an existing index definition is compatible with a @@ -2636,7 +2647,15 @@ ReindexIndex(RangeVar *indexRelation, ReindexParams *params, bool isTopLevel) ReindexPartitions(indOid, params, isTopLevel); else if ((params->options & REINDEXOPT_CONCURRENTLY) != 0 && persistence != RELPERSISTENCE_TEMP) - ReindexRelationConcurrently(indOid, params); + { + ReindexIndexInfo idxinfo = { + .indexId = indOid, + /* other fields set later */ + }; + ReindexIndexesConcurrently(list_make1(&idxinfo), + list_make1_oid(IndexGetRelation(indOid, false)), + params, CurrentMemoryContext); + } else { ReindexParams newparams = *params; @@ -3002,20 +3021,69 @@ reindex_error_callback(void *arg) errinfo->relnamespace, errinfo->relname); } + +/* + * Given a list of index oids, return a list of leaf partitions by removing + * any intermediate parents. heaprels is populated with the corresponding + * tables. + */ +static List * +leaf_indexes(List *inhoids, int options, List **heaprels) +{ + List *partitions = NIL; + ListCell *lc; + + foreach(lc, inhoids) + { + Oid partoid = lfirst_oid(lc); + Oid tableoid; + Relation table; + char partkind = get_rel_relkind(partoid); + + /* + * This discards partitioned indexes and foreign tables. + */ + if (!RELKIND_HAS_STORAGE(partkind)) + continue; + + Assert(partkind == RELKIND_INDEX); + + /* Skip invalid indexes, if requested */ + if ((options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + + /* (try to) Open the table, with lock */ + tableoid = IndexGetRelation(partoid, false); + table = table_open(tableoid, ShareLock); + table_close(table, NoLock); + + /* Save partition OID in current MemoryContext */ + partitions = lappend_oid(partitions, partoid); + *heaprels = lappend_oid(*heaprels, tableoid); + } + + return partitions; +} + + /* * ReindexPartitions * * Reindex a set of partitions, per the partitioned index or table given * by the caller. + * XXX: should be further refactored with logic from ReindexRelationConcurrently */ static void ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) { - List *partitions = NIL; + List *partitions = NIL, + *heaprels = NIL; char relkind = get_rel_relkind(relid); char *relname = get_rel_name(relid); char *relnamespace = get_namespace_name(get_rel_namespace(relid)); MemoryContext reindex_context; + MemoryContext old_context; List *inhoids; ListCell *lc; ErrorContextCallback errcallback; @@ -3060,38 +3128,58 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) * The list of relations to reindex are the physical partitions of the * tree so discard any partitioned table or index. */ - foreach(lc, inhoids) - { - Oid partoid = lfirst_oid(lc); - char partkind = get_rel_relkind(partoid); - MemoryContext old_context; - - /* - * This discards partitioned tables, partitioned indexes and foreign - * tables. - */ - if (!RELKIND_HAS_STORAGE(partkind)) - continue; - /* Skip invalid indexes, if requested */ - if ((params->options & REINDEXOPT_SKIPVALID) != 0 && - get_index_isvalid(partoid)) - continue; + if (relkind == RELKIND_PARTITIONED_INDEX) + { + old_context = MemoryContextSwitchTo(reindex_context); + partitions = leaf_indexes(inhoids, params->options, &heaprels); + MemoryContextSwitchTo(old_context); + } else { + /* Loop over parent tables */ + foreach(lc, inhoids) + { + Oid partoid = lfirst_oid(lc); + Relation parttable; + List *partindexes; + + parttable = table_open(partoid, ShareLock); + old_context = MemoryContextSwitchTo(reindex_context); + partindexes = RelationGetIndexList(parttable); + partindexes = leaf_indexes(partindexes, params->options, &heaprels); + partitions = list_concat(partitions, partindexes); + + MemoryContextSwitchTo(old_context); + table_close(parttable, ShareLock); + } + } - Assert(partkind == RELKIND_INDEX || - partkind == RELKIND_RELATION); + if ((params->options & REINDEXOPT_CONCURRENTLY) != 0 && + relkind == RELKIND_PARTITIONED_INDEX && + get_rel_persistence(relid) != RELPERSISTENCE_TEMP) + { + List *idxinfos = NIL; + ReindexIndexInfo *idxinfo; - /* Save partition OID */ old_context = MemoryContextSwitchTo(reindex_context); - partitions = lappend_oid(partitions, partoid); + foreach (lc, partitions) + { + Oid partoid = lfirst_oid(lc); + idxinfo = palloc(sizeof(ReindexIndexInfo)); + idxinfo->indexId = partoid; + /* other fields set later */ + idxinfos = lappend(idxinfos, idxinfo); + } MemoryContextSwitchTo(old_context); - } - /* - * Process each partition listed in a separate transaction. Note that - * this commits and then starts a new transaction immediately. - */ - ReindexMultipleInternal(partitions, params); + /* Process all indexes in a single loop */ + ReindexIndexesConcurrently(idxinfos, heaprels, params, reindex_context); + } else { + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexMultipleInternal(partitions, params); + } /* * If indexes exist on all of the partitioned table's children, and we @@ -3254,18 +3342,9 @@ ReindexMultipleInternal(List *relids, ReindexParams *params) static bool ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) { - typedef struct ReindexIndexInfo - { - Oid indexId; - Oid tableId; - Oid amId; - bool safe; /* for set_indexsafe_procflags */ - } ReindexIndexInfo; List *heapRelationIds = NIL; List *indexIds = NIL; List *newIndexIds = NIL; - List *relationLocks = NIL; - List *lockTags = NIL; ListCell *lc, *lc2; MemoryContext private_context; @@ -3274,13 +3353,6 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) char *relationName = NULL; char *relationNamespace = NULL; PGRUsage ru0; - const int progress_index[] = { - PROGRESS_CREATEIDX_COMMAND, - PROGRESS_CREATEIDX_PHASE, - PROGRESS_CREATEIDX_INDEX_OID, - PROGRESS_CREATEIDX_ACCESS_METHOD_OID - }; - int64 progress_vals[4]; /* * Create a memory context that will survive forced transaction commits we @@ -3553,6 +3625,69 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) Assert(heapRelationIds != NIL); + /* Do the work */ + newIndexIds = ReindexIndexesConcurrently(indexIds, heapRelationIds, params, private_context); + + /* Log what we did */ + if ((params->options & REINDEXOPT_VERBOSE) != 0) + { + if (relkind == RELKIND_INDEX) + ereport(INFO, + (errmsg("index \"%s.%s\" was reindexed", + relationNamespace, relationName), + errdetail("%s.", + pg_rusage_show(&ru0)))); + else + { + foreach(lc, newIndexIds) + { + Oid indOid = lfirst_oid(lc); + ereport(INFO, + (errmsg("index \"%s.%s\" was reindexed", + get_namespace_name(get_rel_namespace(indOid)), + get_rel_name(indOid)))); + /* Don't show rusage here, since it's not per index. */ + } + + ereport(INFO, + (errmsg("table \"%s.%s\" was reindexed", + relationNamespace, relationName), + errdetail("%s.", + pg_rusage_show(&ru0)))); + } + } + + + MemoryContextDelete(private_context); + + return true; +} + +/* + * Reindex concurrently for an arbitrary list of index relations + * This is called by ReindexRelationConcurrently and + */ +static List * +ReindexIndexesConcurrently(List *indexIds, List *heapRelationIds, + ReindexParams *params, MemoryContext private_context) +{ + List *newIndexIds = NIL; + List *relationLocks = NIL; + List *lockTags = NIL; + + ListCell *lc, + *lc2; + + MemoryContext oldcontext; + + const int progress_index[] = { + PROGRESS_CREATEIDX_COMMAND, + PROGRESS_CREATEIDX_PHASE, + PROGRESS_CREATEIDX_INDEX_OID, + PROGRESS_CREATEIDX_ACCESS_METHOD_OID + }; + int64 progress_vals[4]; + /*----- * Now we have all the indexes we want to process in indexIds. * @@ -4026,42 +4161,9 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) /* Start a new transaction to finish process properly */ StartTransactionCommand(); - /* Log what we did */ - if ((params->options & REINDEXOPT_VERBOSE) != 0) - { - if (relkind == RELKIND_INDEX) - ereport(INFO, - (errmsg("index \"%s.%s\" was reindexed", - relationNamespace, relationName), - errdetail("%s.", - pg_rusage_show(&ru0)))); - else - { - foreach(lc, newIndexIds) - { - ReindexIndexInfo *idx = lfirst(lc); - Oid indOid = idx->indexId; - - ereport(INFO, - (errmsg("index \"%s.%s\" was reindexed", - get_namespace_name(get_rel_namespace(indOid)), - get_rel_name(indOid)))); - /* Don't show rusage here, since it's not per index. */ - } - - ereport(INFO, - (errmsg("table \"%s.%s\" was reindexed", - relationNamespace, relationName), - errdetail("%s.", - pg_rusage_show(&ru0)))); - } - } - - MemoryContextDelete(private_context); - pgstat_progress_end_command(); - return true; + return newIndexIds; } /* diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index 830fdddf24..6f41adf736 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -2470,12 +2470,12 @@ COMMIT; REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation ERROR: cannot reindex system catalogs concurrently REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index -ERROR: cannot reindex system catalogs concurrently +ERROR: concurrent index creation on system catalog tables is not supported -- These are the toast table and index of pg_authid. REINDEX TABLE CONCURRENTLY pg_toast.pg_toast_1260; -- no catalog toast table ERROR: cannot reindex system catalogs concurrently REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index -ERROR: cannot reindex system catalogs concurrently +ERROR: concurrent index creation on system catalog tables is not supported REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM ERROR: cannot reindex system catalogs concurrently -- Warns about catalog relations -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0006-More-refactoring.patch" ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
* [PATCH v13a 9/9] ci: Move to per-job naming for containers @ 2026-06-12 16:57 Andres Freund <[email protected]> 0 siblings, 0 replies; 102+ messages in thread From: Andres Freund @ 2026-06-12 16:57 UTC (permalink / raw) Previously we only had two types of containers, "ci" for everything but the CompilerWarnings job and ci_docs that had the tools necessary to build the docs as part of CompilerWarnings. But that was unnecessarily heavy for several of the jobs. As the pull time is a noticeable performance factor, that's not great. Instead use containers that are named by their job. Today some of those are the same, but after this change we can optimize the containers for their jobs without a problem. It probably would make sense to allow over-riding CONTAINER_REPO on a per-repo/org basis, but that seems better done as a separate change. Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33 --- .github/workflows/pg-ci.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index c737173abe0..4034f76e0a1 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -108,9 +108,12 @@ env: # Debian Trixie containers used by all Linux jobs. Built by # 'https://github.com/anarazel/pg-vm-images/';. + # + # The containers are named + # ghcr.io/anarazel/pg-vm-images/<branch>/linux_debian_ci/<debian version>/<ci-job>:latest CONTAINER_REPO: ghcr.io/anarazel/pg-vm-images/main - CONTAINER_LINUX_CI: linux_debian_trixie_ci:latest - CONTAINER_LINUX_CI_DOCS: linux_debian_trixie_ci_docs:latest + CONTAINER_LINUX_CI_NAME: linux_debian_ci/trixie + CONTAINER_TAG: latest # The full set of OS / job selectors recognized by the `ci-os-only:` # commit-message directive parsed in the `setup` job below. @@ -193,7 +196,7 @@ jobs: # # To allow over-riding what runners jobs use, we allow setting # repository / org level variables influencing that choice on a - # per-host-operating-system basis. + # per-host-operating-system basis. See also src/tools/ci/README # # This also makes it easier to change the version of linux / windows # used centrally. We don't just want to use ubuntu-latest, as it's not @@ -210,8 +213,8 @@ jobs: # Re-export workflow-level env vars that other jobs need to reference # from contexts (e.g. `jobs.<id>.container.image`) where the `env` # context is not available. - container_linux_ci: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI }} - container_linux_ci_docs: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_DOCS }} + container_linux_ci_base: ${{ env.CONTAINER_REPO }}/${{ env.CONTAINER_LINUX_CI_NAME }} + container_tag: ${{ env.CONTAINER_TAG }} # Can't use the output from above, so repeated verbatim here runs-on: ${{ case(vars.pg_ci_runs_on_setup != '', vars.pg_ci_runs_on_setup, 'ubuntu-slim') }} @@ -277,8 +280,8 @@ jobs: needs.setup.outputs.sanitycheck == 'true' runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 15 - container: &linux_ci_container - image: ${{ needs.setup.outputs.container_linux_ci }} + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/sanity-check:${{ needs.setup.outputs.container_tag }} # Options passed to all linux containers. Not all of the jobs need # all of them, but it's easier to just define them centrally. @@ -464,7 +467,9 @@ jobs: needs.setup.outputs.linux == 'true' && needs.sanity-check.result != 'failure' runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-autoconf:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: &linux_env @@ -558,7 +563,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-32:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -650,7 +657,9 @@ jobs: needs: [setup, sanity-check] if: *linux_job_if runs-on: ${{ needs.setup.outputs.runs_on_linux }} - container: *linux_ci_container + container: + image: ${{ needs.setup.outputs.container_linux_ci_base }}/linux-meson-64:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options timeout-minutes: 60 env: *linux_env @@ -1194,7 +1203,8 @@ jobs: runs-on: ${{ needs.setup.outputs.runs_on_linux }} timeout-minutes: 60 container: - image: ${{ needs.setup.outputs.container_linux_ci_docs }} + image: ${{ needs.setup.outputs.container_linux_ci_base }}/compiler-warnings:${{ needs.setup.outputs.container_tag }} + options: *linux_container_options env: # Use larger ccache cache as this job compiles with multiple # compilers / flag combinations. -- 2.54.0.450.g9ac3f193c0 --mr2uqtieh2e2xvha-- ^ permalink raw reply [nested|flat] 102+ messages in thread
end of thread, other threads:[~2026-06-12 16:57 UTC | newest] Thread overview: 102+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-11-01 18:25 [PATCH v13 05/18] Refactor to allow reindexing all index partitions at once.. Justin Pryzby <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]> 2026-06-12 16:57 [PATCH v13a 9/9] ci: Move to per-job naming for containers Andres Freund <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox