agora inbox for [email protected]help / color / mirror / Atom feed
[PATCH 2/2] Fix libxml leaks in contrib/xml2 xpath_table 127+ messages / 2 participants [nested] [flat]
* [PATCH 2/2] Fix libxml leaks in contrib/xml2 xpath_table @ 2026-05-25 21:11 Andrey Chernyy <[email protected]> 0 siblings, 0 replies; 127+ messages in thread From: Andrey Chernyy @ 2026-05-25 21:11 UTC (permalink / raw) xpath_table() did not release libxml objects allocated while evaluating XPath expressions. xmlXPathCompiledEval() returns an xmlXPathObjectPtr that must be freed, and string results copied into the tuple input array must be freed after BuildTupleFromCStrings() has consumed them. Track the current libxml objects across the existing PG_TRY block so they are also released on error. --- contrib/xml2/xpath.c | 47 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c index 94819961787..ac140a640e0 100644 --- a/contrib/xml2/xpath.c +++ b/contrib/xml2/xpath.c @@ -643,6 +643,10 @@ xpath_table(PG_FUNCTION_ARGS) StringInfoData query_buf; PgXmlErrorContext *xmlerrcxt; volatile xmlDocPtr doctree = NULL; + xmlXPathContextPtr volatile ctxt = NULL; + xmlXPathObjectPtr volatile res = NULL; + xmlXPathCompExprPtr volatile comppath = NULL; + xmlChar *volatile resstr = NULL; InitMaterializedSRF(fcinfo, MAT_SRF_USE_EXPECTED_DESC); @@ -662,7 +666,7 @@ xpath_table(PG_FUNCTION_ARGS) attinmeta = TupleDescGetAttInMetadata(rsinfo->setDesc); - values = (char **) palloc(rsinfo->setDesc->natts * sizeof(char *)); + values = (char **) palloc0(rsinfo->setDesc->natts * sizeof(char *)); xpaths = (xmlChar **) palloc(rsinfo->setDesc->natts * sizeof(xmlChar *)); /* @@ -732,10 +736,6 @@ xpath_table(PG_FUNCTION_ARGS) { char *pkey; char *xmldoc; - xmlXPathContextPtr ctxt; - xmlXPathObjectPtr res; - xmlChar *resstr; - xmlXPathCompExprPtr comppath; HeapTuple ret_tuple; /* Extract the row data as C Strings */ @@ -780,6 +780,11 @@ xpath_table(PG_FUNCTION_ARGS) had_values = false; for (j = 0; j < numpaths; j++) { + ctxt = NULL; + res = NULL; + comppath = NULL; + resstr = NULL; + ctxt = xmlXPathNewContext(doctree); if (ctxt == NULL || pg_xml_error_occurred(xmlerrcxt)) xml_ereport(xmlerrcxt, @@ -798,6 +803,7 @@ xpath_table(PG_FUNCTION_ARGS) /* Now evaluate the path expression. */ res = xmlXPathCompiledEval(comppath, ctxt); xmlXPathFreeCompExpr(comppath); + comppath = NULL; if (res != NULL) { @@ -842,8 +848,16 @@ xpath_table(PG_FUNCTION_ARGS) * result tuple. */ values[j + 1] = (char *) resstr; + resstr = NULL; + } + + if (res != NULL) + { + xmlXPathFreeObject(res); + res = NULL; } xmlXPathFreeContext(ctxt); + ctxt = NULL; } /* Now add the tuple to the output, if there is one. */ @@ -854,6 +868,16 @@ xpath_table(PG_FUNCTION_ARGS) heap_freetuple(ret_tuple); } + /* BuildTupleFromCStrings() has copied the values. */ + for (j = 1; j < rsinfo->setDesc->natts; j++) + { + if (values[j] != NULL) + { + xmlFree((xmlChar *) values[j]); + values[j] = NULL; + } + } + rownr++; } while (had_values); } @@ -870,6 +894,19 @@ xpath_table(PG_FUNCTION_ARGS) } PG_CATCH(); { + if (resstr != NULL) + xmlFree(resstr); + for (j = 1; j < rsinfo->setDesc->natts; j++) + { + if (values[j] != NULL) + xmlFree((xmlChar *) values[j]); + } + if (res != NULL) + xmlXPathFreeObject(res); + if (comppath != NULL) + xmlXPathFreeCompExpr(comppath); + if (ctxt != NULL) + xmlXPathFreeContext(ctxt); if (doctree != NULL) xmlFreeDoc(doctree); -- 2.54.0 --MP_/T7YUrG7W2jPQOBsjEYwqj9B-- ^ permalink raw reply [nested|flat] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ 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; 127+ 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] 127+ messages in thread
end of thread, other threads:[~2026-06-12 16:57 UTC | newest] Thread overview: 127+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2026-05-25 21:11 [PATCH 2/2] Fix libxml leaks in contrib/xml2 xpath_table Andrey Chernyy <[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]> 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