diff --git a/docker/activemq/versions.yaml b/docker/activemq/versions.yaml index 97eb07ae66..85ab1584c0 100644 --- a/docker/activemq/versions.yaml +++ b/docker/activemq/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 6/debian12/6.1 @@ -39,6 +40,9 @@ versions: version: 5.18.5 major: '5' repo: activemq5 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/5e73b3d2-94bf-4217-8af3-5db683773cfd.cloudpartnerservices.goog tags: - 5.18.5-debian12 - 5.18-debian12 diff --git a/docker/airflow/versions.yaml b/docker/airflow/versions.yaml index 3ad58a4771..3795540aad 100644 --- a/docker/airflow/versions.yaml +++ b/docker/airflow/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 2/debian12/2.10 @@ -27,6 +28,9 @@ versions: gpg: B42F6819007F00F88E364FD4036A9C25BF357DD4 version: '1.17' repo: airflow2 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/a0ce6574-4b44-48a4-8a72-69c53ba93d3e.cloudpartnerservices.goog tags: - 2.10.3-debian12 - 2.10-debian12 diff --git a/docker/argo-workflows/versions.yaml b/docker/argo-workflows/versions.yaml index 5d8a2ef3cf..50f80910f0 100644 --- a/docker/argo-workflows/versions.yaml +++ b/docker/argo-workflows/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 3/debian12/3.5 @@ -26,6 +27,9 @@ versions: golang: version: 1.21 repo: argo-workflows3 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/dea629ec-49b1-439e-928d-1b08fa253321.cloudpartnerservices.goog tags: - 3.5.10-debian12 - 3.5-debian12 diff --git a/docker/c2d-debian/versions.yaml b/docker/c2d-debian/versions.yaml index 6b3788e820..029e60ce0c 100644 --- a/docker/c2d-debian/versions.yaml +++ b/docker/c2d-debian/versions.yaml @@ -19,6 +19,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 11/debian11 @@ -27,10 +28,14 @@ versions: debian11: version: 11.5.0 repo: c2d-debian11 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/33c85580-241e-4bb8-a170-b1532293916b.cloudpartnerservices.goog tags: - '11.5.0' - '11.5' - '11' + - latest templateSubDir: debian11 - dir: 12/debian12 from: marketplace.gcr.io/google/debian12 diff --git a/docker/cert-manager/versions.yaml b/docker/cert-manager/versions.yaml index 843ef5b2be..2ed7ee23c9 100644 --- a/docker/cert-manager/versions.yaml +++ b/docker/cert-manager/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false machineType: E2_HIGHCPU_32 versions: @@ -23,6 +24,9 @@ versions: cert-manager: version: 1.15.3 repo: cert-manager1 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/bde1bd76-14f1-46d2-99ad-f484cff10720.cloudpartnerservices.goog tags: - 1.15.3-debian12 - 1.15-debian12 diff --git a/docker/django/versions.yaml b/docker/django/versions.yaml index 58083f26b3..058c9a6bab 100644 --- a/docker/django/versions.yaml +++ b/docker/django/versions.yaml @@ -21,6 +21,8 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 5/debian12/5.1 @@ -29,6 +31,9 @@ versions: django: version: 5.1.1 repo: django5 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/88b938b9-1b2f-466d-943c-0f432e1e3fa8.cloudpartnerservices.goog tags: - 5.1.1-debian12 - 5.1-debian12 @@ -45,6 +50,9 @@ versions: uwsgi_exporter: version: 1.3.0 repo: uwsgi-exporter1 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/b068f3d2-c82d-4419-bded-155768bcd791.cloudpartnerservices.goog tags: - 1.3.0 - '1.3' diff --git a/docker/drupal/versions.yaml b/docker/drupal/versions.yaml index 4093a21329..a13d0fdc34 100644 --- a/docker/drupal/versions.yaml +++ b/docker/drupal/versions.yaml @@ -16,6 +16,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 10/php8/debian12/10.3/apache @@ -28,6 +29,9 @@ versions: md5: 7b0f59c9fc1e3a0b753343cd0893eea6 version: 10.3.6 repo: drupal10-php8-apache + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/2091b012-066a-46f0-8d26-63c5b7db70a4.cloudpartnerservices.goog tags: - 10.3.6-debian12 - 10.3-debian12 @@ -45,6 +49,9 @@ versions: drupal: md5: 1f7a37ba42ee22948ffc11bfe4541dbd version: 10.2.8 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/2091b012-066a-46f0-8d26-63c5b7db70a4.cloudpartnerservices.goog repo: drupal10-php8-apache tags: - 10.2.8-debian12 @@ -69,4 +76,3 @@ versions: - '9.5' - '9' - latest - diff --git a/docker/falco/versions.yaml b/docker/falco/versions.yaml index b93e95a67c..bcf334729f 100644 --- a/docker/falco/versions.yaml +++ b/docker/falco/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 0/debian11/0.36 @@ -22,6 +23,9 @@ versions: falco: version: 0.36.2 repo: falco0 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/5b7a25d4-ece2-4ae3-b8c3-652b2af4a5ec.cloudpartnerservices.goog tags: - 0.36.2-debian11 - 0.36-debian11 @@ -35,6 +39,9 @@ versions: packages: falco: version: 0.34.1 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/5b7a25d4-ece2-4ae3-b8c3-652b2af4a5ec.cloudpartnerservices.goog repo: falco0 tags: - 0.34.1-debian11 @@ -48,10 +55,12 @@ versions: sha256: 5bd3367a0f0839ec96a32ad36d86a0c113476a12424771925cf8b5c2da87be65 version: 0.8.6 repo: falco-exporter0 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/14a94703-d67c-403c-8e1f-f5ad256e6cac.cloudpartnerservices.goog tags: - 0.8.6 - '0.8' - '0' - latest templateSubDir: exporter - diff --git a/docker/gitea/versions.yaml b/docker/gitea/versions.yaml index 19015a9089..e65f0a42e4 100644 --- a/docker/gitea/versions.yaml +++ b/docker/gitea/versions.yaml @@ -19,6 +19,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false machineType: 'E2_HIGHCPU_32' versions: @@ -30,6 +31,9 @@ versions: golang: version: '1.23' repo: gitea1 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/83c38401-9081-4bfd-8d88-f247f9c37ce9.cloudpartnerservices.goog tags: - 1.22.2-debian12 - 1.22-debian12 diff --git a/docker/harbor/versions.yaml b/docker/harbor/versions.yaml index f0d899d42f..b6b8424fbf 100644 --- a/docker/harbor/versions.yaml +++ b/docker/harbor/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 2/debian12/2.11 @@ -22,6 +23,9 @@ versions: harbor: version: 2.11.1 repo: harbor2 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/70c685e1-3aac-4626-9773-b0152237081b.cloudpartnerservices.goog tags: - 2.11.1-debian12 - 2.11-debian12 @@ -35,10 +39,12 @@ versions: packages: harbor: version: 2.7.4 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/70c685e1-3aac-4626-9773-b0152237081b.cloudpartnerservices.goog repo: harbor2 tags: - 2.7.4-debian12 - 2.7-debian12 - 2.7.4 - '2.7' - diff --git a/docker/kafka/versions.yaml b/docker/kafka/versions.yaml index 55ba75ea70..95e70b82a9 100644 --- a/docker/kafka/versions.yaml +++ b/docker/kafka/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 3/debian12/3.7 @@ -26,6 +27,9 @@ versions: scala: version: '2.13' repo: kafka3 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/ccea51e8-0540-4d1b-890e-2a1b04da0383.cloudpartnerservices.goog tags: - 3.7.0-debian12 - 3.7-debian12 @@ -44,6 +48,9 @@ versions: version: 3.6.1 scala: version: '2.13' + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/ccea51e8-0540-4d1b-890e-2a1b04da0383.cloudpartnerservices.goog repo: kafka3 tags: - 3.6.1-debian12 @@ -59,6 +66,9 @@ versions: kafka_exporter: version: 1.8.0 repo: kafka-exporter1 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/a0c4026b-e814-4954-b5e5-c8bd9ee32753.cloudpartnerservices.goog tags: - 1.8.0 - '1.8' diff --git a/docker/keycloak/versions.yaml b/docker/keycloak/versions.yaml index 7ab1b51969..0b52c4794f 100644 --- a/docker/keycloak/versions.yaml +++ b/docker/keycloak/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 23/debian11/23.0 @@ -62,6 +63,9 @@ versions: sshdcommon: version: 2.9.2 repo: keycloak21 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/86f72fc8-e5a0-4d16-8a93-218c7696748d.cloudpartnerservices.goog tags: - 21.1.2-debian11 - 21.1-debian11 diff --git a/docker/prometheus-operator/versions.yaml b/docker/prometheus-operator/versions.yaml index a4e7828ac6..2376e7e813 100644 --- a/docker/prometheus-operator/versions.yaml +++ b/docker/prometheus-operator/versions.yaml @@ -19,6 +19,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 0/debian12/0.77 @@ -29,6 +30,9 @@ versions: golang: version: 1.23.1 repo: prometheus-operator0 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/c7c58b15-e370-4ba7-b1ec-5d8e2c4df4df.cloudpartnerservices.goog tags: - 0.77.1-debian12 - 0.77-debian12 @@ -44,6 +48,9 @@ versions: version: 0.69.1 golang: version: 1.23.1 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/c7c58b15-e370-4ba7-b1ec-5d8e2c4df4df.cloudpartnerservices.goog repo: prometheus-operator0 tags: - 0.69.1-debian12 diff --git a/docker/solr/versions.yaml b/docker/solr/versions.yaml index 7893462478..ab0e63e124 100644 --- a/docker/solr/versions.yaml +++ b/docker/solr/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 9/debian12/9.6 @@ -23,6 +24,9 @@ versions: gpg: 50E3EE1C91C7E0CB4DFB007B369424FC98F3F6EC version: 9.6.1 repo: solr9 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/4af7481b-2d9f-4f98-bb26-cceb6db72414.cloudpartnerservices.goog tags: - 9.6.1-debian12 - 9.6-debian12 diff --git a/docker/spark/versions.yaml b/docker/spark/versions.yaml index 615ab7a39e..78abecedfc 100644 --- a/docker/spark/versions.yaml +++ b/docker/spark/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false machine_type: 'E2_HIGHCPU_32' versions: @@ -25,6 +26,9 @@ versions: spark: version: 3.5.2 repo: spark3 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/ad1bf2fb-7561-4833-8b24-ae3cc489a86f.cloudpartnerservices.goog tags: - 3.5.2-debian12 - 3.5-debian12 diff --git a/docker/superset/versions.yaml b/docker/superset/versions.yaml index 63b30121be..3add0ce4c0 100644 --- a/docker/superset/versions.yaml +++ b/docker/superset/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 4/debian12/4.0 @@ -22,6 +23,9 @@ versions: superset: version: 4.0.2 repo: superset4 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: null tags: - 4.0.2-debian11 - 4.0-debian11 @@ -41,6 +45,9 @@ versions: statsd_exporter: version: 0.27.1 repo: statsd-exporter0 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/eef49bfe-eedd-4301-9165-8f2418cfecac.cloudpartnerservices.goog tags: - 0.27.1 - '0.27' diff --git a/docker/zookeeper/versions.yaml b/docker/zookeeper/versions.yaml index 9e55722785..c9b1927631 100644 --- a/docker/zookeeper/versions.yaml +++ b/docker/zookeeper/versions.yaml @@ -14,6 +14,7 @@ cloudbuild: + docker_image: gcr.io/cloud-builders/docker:24.0.9 enable_parallel: false versions: - dir: 3/debian12/3.8 @@ -28,6 +29,9 @@ versions: version: '1.17' gpg: B42F6819007F00F88E364FD4036A9C25BF357DD4 repo: zookeeper3 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/252442dc-7bf8-44c5-8a80-85c2fb9cc532.cloudpartnerservices.goog tags: - 3.8.4-debian12 - 3.8-debian12 @@ -45,6 +49,9 @@ versions: zookeeper_exporter: sha256: c7446aa33d3505fc8b4a92327c89a543f217ebb246c76880ea796f2893d40418 version: 1.1.0 + annotations: + - key: com.googleapis.cloudmarketplace.product.service.name + value: services/252442dc-7bf8-44c5-8a80-85c2fb9cc532.cloudpartnerservices.goog repo: zookeeper3 tags: - exporter-1.1.0 diff --git a/tools/dockertools.Dockerfile b/tools/dockertools.Dockerfile index 2478e194cd..02321c03d3 100644 --- a/tools/dockertools.Dockerfile +++ b/tools/dockertools.Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,8 +14,10 @@ FROM marketplace.gcr.io/google/debian11 -ENV BAZEL_VERSION 0.19.2 -ENV BAZEL_ARCH linux_amd64_stripped +ENV BAZEL_VERSION=0.19.2 +ENV BAZEL_ARCH=linux_amd64_stripped + +COPY ./ click-to-deploy/tools RUN set -eux \ && apt-get update \ @@ -35,7 +37,6 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | d && apt install gh RUN set -eux \ - && git clone https://github.com/GoogleCloudPlatform/click-to-deploy.git \ && cd click-to-deploy/tools \ && bazel build dockerversioning/scripts/dockerfiles:dockerfiles dockerversioning/scripts/cloudbuild:cloudbuild \ && cp bazel-bin/dockerversioning/scripts/dockerfiles/${BAZEL_ARCH}/dockerfiles /bin/dockerfiles \ diff --git a/tools/dockerversioning/scripts/cloudbuild/main.go b/tools/dockerversioning/scripts/cloudbuild/main.go index 14504afe71..b830388ae0 100644 --- a/tools/dockerversioning/scripts/cloudbuild/main.go +++ b/tools/dockerversioning/scripts/cloudbuild/main.go @@ -8,6 +8,7 @@ import ( "fmt" "io/ioutil" "log" + "math/rand" "os" "strings" "text/template" @@ -16,35 +17,39 @@ import ( ) type cloudBuildOptions struct { - // Whether to restrict to a particular set of Dockerfile directories. - // If empty, all directories are used. - Directories []string + // Whether to restrict to a particular set of Dockerfile directories. + // If empty, all directories are used. + Directories []string - // Whether to run tests as part of the build. - RunTests bool + // Whether to run tests as part of the build. + RunTests bool - // Whether to require that image tags do not already exist in the repo. - RequireNewTags bool + // Whether to require that image tags do not already exist in the repo. + RequireNewTags bool - // Whether to push to all declared tags - FirstTagOnly bool + // Whether to push to all declared tags + FirstTagOnly bool - // Optional timeout duration. If not specified, the Cloud Builder default timeout is used. - TimeoutSeconds int + // Optional timeout duration. If not specified, the Cloud Builder default timeout is used. + TimeoutSeconds int - // Optional machine type used to run the build, must be one of: N1_HIGHCPU_8, N1_HIGHCPU_32, E2_HIGHCPU_8, E2_HIGHCPU_32. If not specified, the default machine is used. - MachineType string + // Optional machine type used to run the build, must be one of: N1_HIGHCPU_8, N1_HIGHCPU_32, E2_HIGHCPU_8, E2_HIGHCPU_32. If not specified, the default machine is used. + MachineType string - // Optional parallel build. If specified, images can be build on bigger machines in parallel. - EnableParallel bool + // Optional parallel build. If specified, images can be build on bigger machines in parallel. + EnableParallel bool - // Forces parallel build. If specified, images are build on bigger machines in parallel. Overrides EnableParallel. - ForceParallel bool + // Forces parallel build. If specified, images are build on bigger machines in parallel. Overrides EnableParallel. + ForceParallel bool + + // Defines the reference for the docker Cloud Build builder (https://cloud.google.com/build/docs/cloud-builders#supported_builder_images_provided_by) + DockerImage string } // TODO(huyhg): Replace "gcr.io/$PROJECT_ID/functional_test" with gcp-runtimes one. const cloudBuildTemplateString = `steps: {{- $parallel := .Parallel }} +{{- $dockerImage := .DockerImage }} {{- if .RequireNewTags }} # Check if tags exist. {{- range .Images }} @@ -56,10 +61,29 @@ const cloudBuildTemplateString = `steps: {{- end }} {{- end }} -# Build images + # Build and push annotated image + - name: {{ $dockerImage }} + args: + - buildx + - create + - --name + - temp-builder + - --use + waitFor: ['-'] + id: docker-create-env + - name: {{ $dockerImage }} + args: + - buildx + - inspect + - temp-builder + - --bootstrap + waitFor: ['docker-create-env'] + id: docker-bootstrap-env + + # Build images {{- range .ImageBuilds }} {{- if .Builder }} - - name: gcr.io/cloud-builders/docker + - name: {{ $dockerImage }} args: - 'build' - '--tag={{ .Tag }}' @@ -77,81 +101,91 @@ const cloudBuildTemplateString = `steps: id: 'image-{{ .Tag }}' {{- end }} {{- else }} - - name: gcr.io/cloud-builders/docker + {{- $testCounter := 0 }} + {{- $primary := .Tag }} + # Build test target image: {{ $primary }} + - name: {{ $dockerImage }} args: - 'build' - - '--tag={{ .Tag }}' + - '-t' + - '{{ $primary }}' - '{{ .Directory }}' -{{- if $parallel }} - waitFor: ['-'] - id: 'image-{{ .Tag }}' -{{- end }} -{{- end }} -{{- end }} -{{- end }} + id: image-test-{{ $primary }} + {{- if $parallel }} + waitFor: ['docker-bootstrap-env'] + {{- end }} -{{- range $imageIndex, $image := .ImageBuilds }} -{{- $primary := $image.Tag }} -{{- range $testIndex, $test := $image.StructureTests }} -{{- if and (eq $imageIndex 0) (eq $testIndex 0) }} - -# Run structure tests -{{- end}} + {{- range $testIndex, $test := .StructureTests }} + # Run structure test: {{ $primary }} - name: gcr.io/gcp-runtimes/structure_test args: - '--image' - '{{ $primary }}' - '--config' - '{{ $test }}' -{{- end }} -{{- end }} + waitFor: ['image-test-{{ $primary }}'] + id: 'structure-test-{{ $primary }}-{{ $testIndex }}' -{{- range $imageIndex, $image := .ImageBuilds }} -{{- $primary := $image.Tag }} -{{- range $testIndex, $test := $image.FunctionalTests }} -{{- if and (eq $imageIndex 0) (eq $testIndex 0) }} + {{ end }} -# Run functional tests -{{- end }} + {{- range $testIndex, $test := .FunctionalTests }} + # Run functional test: {{ $primary }} - name: gcr.io/$PROJECT_ID/functional_test args: - '--verbose' - '--vars' - 'IMAGE={{ $primary }}' - '--vars' - - 'UNIQUE={{ $imageIndex }}-{{ $testIndex }}' + - 'UNIQUE={{ randomString 8 }}' - '--test_spec' - '{{ $test }}' -{{- if $parallel }} - waitFor: ['image-{{ $primary }}'] - id: 'test-{{ $primary }}-{{ $testIndex }}' + waitFor: ['image-test-{{ $primary }}'] + id: 'functional-test-{{ $primary }}-{{ $testIndex }}' + {{- end }} + + - name: {{ $dockerImage }} + args: + - 'buildx' + - 'build' + - '--push' + {{- range .Aliases }} + - '--tag' + - '{{ . }}' + {{- end }} + {{- range .Annotations }} + - '--annotation=index,manifest:{{ .Key }}={{ .Value }}' + {{- end }} + {{- range .Labels }} + - '--label={{ .Key }}={{ .Value }}' + {{- end }} + - '{{ .Directory }}' + id: build-and-push-image-{{ $primary }} + waitFor: + {{- range $testIndex, $test := .StructureTests }} + - 'structure-test-{{ $primary }}-{{ $testIndex }}' + {{- end}} + {{- range $testIndex, $test := .FunctionalTests }} + - 'functional-test-{{ $primary }}-{{ $testIndex }}' + {{- end}} + {{- end }} {{- end }} - {{- end }} -# Add alias tags {{- range $imageIndex, $image := .ImageBuilds }} {{- $primary := $image.Tag }} -{{- range .Aliases }} - - name: gcr.io/cloud-builders/docker +{{- range $testIndex, $test := $image.StructureTests }} +{{- if and (eq $imageIndex 0) (eq $testIndex 0) }} + +# Run structure tests +{{- end}} + - name: gcr.io/gcp-runtimes/structure_test args: - - 'tag' + - '--image' - '{{ $primary }}' - - '{{ . }}' -{{- if $parallel }} - waitFor: - - 'image-{{ $primary }}' -{{- range $testIndex, $test := $image.FunctionalTests }} - - 'test-{{ $primary }}-{{ $testIndex }}' -{{- end }} -{{- end }} -{{- end }} + - '--config' + - '{{ $test }}' {{- end }} - -images: -{{- range .AllImages }} - - '{{ . }}' {{- end }} {{- if not (eq .TimeoutSeconds 0) }} @@ -178,185 +212,208 @@ const testYamlSuffix = "_test.yaml" const workspacePrefix = "/workspace/" type imageBuildTemplateData struct { - Directory string - Tag string - Aliases []string - StructureTests []string - FunctionalTests []string - Builder bool - BuilderImage string - BuilderArgs []string - ImageNameFromBuilder string + Directory string + Tag string + Aliases []string + StructureTests []string + FunctionalTests []string + Builder bool + BuilderImage string + BuilderArgs []string + ImageNameFromBuilder string + Annotations []versions.Annotation + Labels []versions.Annotation } type cloudBuildTemplateData struct { - RequireNewTags bool - Parallel bool - ImageBuilds []imageBuildTemplateData - AllImages []string - TimeoutSeconds int - MachineType string + RequireNewTags bool + Parallel bool + DockerImage string + ImageBuilds []imageBuildTemplateData + AllImages []string + TimeoutSeconds int + MachineType string } func shouldParallelize(options cloudBuildOptions, numberOfVersions int, numberOfTests int) bool { - if options.ForceParallel { - return true - } - if !options.EnableParallel { - return false - } - return numberOfVersions > 1 || numberOfTests > 1 + if options.ForceParallel { + return true + } + if !options.EnableParallel { + return false + } + return numberOfVersions > 1 || numberOfTests > 1 } func newCloudBuildTemplateData( - registry string, spec versions.Spec, options cloudBuildOptions) cloudBuildTemplateData { - data := cloudBuildTemplateData{} - data.RequireNewTags = options.RequireNewTags - - // Determine the set of directories to operate on. - dirs := make(map[string]bool) - if len(options.Directories) > 0 { - for _, d := range options.Directories { - dirs[d] = true - } - } else { - for _, v := range spec.Versions { - dirs[v.Dir] = true - } - } - - // Extract tests to run. - var structureTests []string - var functionalTests []string - if options.RunTests { - // Legacy structure tests reside in the root tests/ directory. - structureTests = append(structureTests, readTests(testsDir)...) - structureTests = append(structureTests, readTests(structureTestsDir)...) - functionalTests = append(functionalTests, readTests(functionalTestsDir)...) - } - - // Extract a list of full image names to build. - for _, v := range spec.Versions { - if !dirs[v.Dir] { - continue - } - var images []string - for _, t := range v.Tags { - image := fmt.Sprintf("%v/%v:%v", registry, v.Repo, t) - images = append(images, image) - if options.FirstTagOnly { - break - } - } - // Ignore builder images from images list - if !v.Builder { - data.AllImages = append(data.AllImages, images...) - } - versionSTests, versionFTests := filterTests(structureTests, functionalTests, v) - // Enforce to use ImageNameFromBuilder as reference to create tags - if v.BuilderImage != "" { - BuilderImageFull := fmt.Sprintf("%v/%v", registry, v.BuilderImage) - data.ImageBuilds = append( - data.ImageBuilds, imageBuildTemplateData{v.Dir, v.ImageNameFromBuilder, images, versionSTests, versionFTests, v.Builder, BuilderImageFull, v.BuilderArgs, v.ImageNameFromBuilder}) - } else { - data.ImageBuilds = append( - data.ImageBuilds, imageBuildTemplateData{v.Dir, images[0], images[1:], versionSTests, versionFTests, v.Builder, v.BuilderImage, v.BuilderArgs, v.ImageNameFromBuilder}) - } - } - - data.TimeoutSeconds = options.TimeoutSeconds - data.MachineType = options.MachineType - data.Parallel = shouldParallelize(options, len(spec.Versions), len(functionalTests)) - return data + registry string, spec versions.Spec, options cloudBuildOptions) cloudBuildTemplateData { + data := cloudBuildTemplateData{} + data.RequireNewTags = options.RequireNewTags + + // Defines the default docker image, if its not set + if (options.DockerImage == "") { + data.DockerImage = "gcr.io/cloud-builders/docker" + } else { + data.DockerImage = options.DockerImage + } + + // Determine the set of directories to operate on. + dirs := make(map[string]bool) + if len(options.Directories) > 0 { + for _, d := range options.Directories { + dirs[d] = true + } + } else { + for _, v := range spec.Versions { + dirs[v.Dir] = true + } + } + + // Extract tests to run. + var structureTests []string + var functionalTests []string + if options.RunTests { + // Legacy structure tests reside in the root tests/ directory. + structureTests = append(structureTests, readTests(testsDir)...) + structureTests = append(structureTests, readTests(structureTestsDir)...) + functionalTests = append(functionalTests, readTests(functionalTestsDir)...) + } + + // Extract a list of full image names to build. + for _, v := range spec.Versions { + if !dirs[v.Dir] { + continue + } + var images []string + for _, t := range v.Tags { + image := fmt.Sprintf("%v/%v:%v", registry, v.Repo, t) + images = append(images, image) + if options.FirstTagOnly { + break + } + } + // Ignore builder images from images list + if !v.Builder { + data.AllImages = append(data.AllImages, images...) + } + versionSTests, versionFTests := filterTests(structureTests, functionalTests, v) + // Enforce to use ImageNameFromBuilder as reference to create tags + if v.BuilderImage != "" { + BuilderImageFull := fmt.Sprintf("%v/%v", registry, v.BuilderImage) + data.ImageBuilds = append( + data.ImageBuilds, imageBuildTemplateData{v.Dir, v.ImageNameFromBuilder, images, versionSTests, versionFTests, v.Builder, BuilderImageFull, v.BuilderArgs, v.ImageNameFromBuilder, v.Annotations, v.Labels}) + } else { + data.ImageBuilds = append( + data.ImageBuilds, imageBuildTemplateData{v.Dir, images[0], images[1:], versionSTests, versionFTests, v.Builder, v.BuilderImage, v.BuilderArgs, v.ImageNameFromBuilder, v.Annotations, v.Labels}) + } + } + + data.TimeoutSeconds = options.TimeoutSeconds + data.MachineType = options.MachineType + data.Parallel = shouldParallelize(options, len(spec.Versions), len(functionalTests)) + return data } func readTests(testsDir string) (tests []string) { - if info, err := os.Stat(testsDir); err == nil && info.IsDir() { - files, err := ioutil.ReadDir(testsDir) - check(err) - for _, f := range files { - if f.IsDir() { - continue - } - if strings.HasSuffix(f.Name(), testJsonSuffix) || strings.HasSuffix(f.Name(), testYamlSuffix) { - tests = append(tests, workspacePrefix+fmt.Sprintf("%s/%s", testsDir, f.Name())) - } - } - } - return + if info, err := os.Stat(testsDir); err == nil && info.IsDir() { + files, err := ioutil.ReadDir(testsDir) + check(err) + for _, f := range files { + if f.IsDir() { + continue + } + if strings.HasSuffix(f.Name(), testJsonSuffix) || strings.HasSuffix(f.Name(), testYamlSuffix) { + tests = append(tests, workspacePrefix+fmt.Sprintf("%s/%s", testsDir, f.Name())) + } + } + } + return } func filterTests(structureTests []string, functionalTests []string, version versions.Version) (outStructureTests []string, outFunctionalTests []string) { - included := make(map[string]bool, len(structureTests)+len(functionalTests)) - for _, test := range append(structureTests, functionalTests...) { - included[test] = true - } - for _, excluded := range version.ExcludeTests { - if !included[workspacePrefix+excluded] { - log.Fatalf("No such test to exclude: %s", excluded) - } - included[workspacePrefix+excluded] = false - } - - outStructureTests = make([]string, 0, len(structureTests)) - for _, test := range structureTests { - if included[test] { - outStructureTests = append(outStructureTests, test) - } - } - outFunctionalTests = make([]string, 0, len(functionalTests)) - for _, test := range functionalTests { - if included[test] { - outFunctionalTests = append(outFunctionalTests, test) - } - } - return + included := make(map[string]bool, len(structureTests)+len(functionalTests)) + for _, test := range append(structureTests, functionalTests...) { + included[test] = true + } + for _, excluded := range version.ExcludeTests { + if !included[workspacePrefix+excluded] { + log.Fatalf("No such test to exclude: %s", excluded) + } + included[workspacePrefix+excluded] = false + } + + outStructureTests = make([]string, 0, len(structureTests)) + for _, test := range structureTests { + if included[test] { + outStructureTests = append(outStructureTests, test) + } + } + outFunctionalTests = make([]string, 0, len(functionalTests)) + for _, test := range functionalTests { + if included[test] { + outFunctionalTests = append(outFunctionalTests, test) + } + } + return } func renderCloudBuildConfig( - registry string, spec versions.Spec, options cloudBuildOptions) string { - data := newCloudBuildTemplateData(registry, spec, options) - tmpl, _ := template. - New("cloudBuildTemplate"). - Parse(cloudBuildTemplateString) - var result bytes.Buffer - tmpl.Execute(&result, data) - return result.String() + registry string, spec versions.Spec, options cloudBuildOptions) string { + data := newCloudBuildTemplateData(registry, spec, options) + + funcMap := template.FuncMap{ + "randomString": func(length int) string { + bytes := make([]byte, length) + for i := 0; i < length; i++ { + bytes[i] = byte(rand.Intn(26) + 'a') + } + return string(bytes) + }, + } + + tmpl, _ := template. + New("cloudBuildTemplate"). + Funcs(funcMap). + Parse(cloudBuildTemplateString) + var result bytes.Buffer + tmpl.Execute(&result, data) + return result.String() } func check(e error) { - if e != nil { - panic(e) - } + if e != nil { + panic(e) + } } func main() { - config := versions.LoadConfig("versions.yaml", "cloudbuild") - registryPtr := config.StringOption("registry", "gcr.io/$PROJECT_ID", "Registry, e.g: 'gcr.io/my-project'") - dirsPtr := config.StringOption("dirs", "", "Comma separated list of Dockerfile dirs to use.") - testsPtr := config.BoolOption("tests", true, "Run tests.") - newTagsPtr := config.BoolOption("new_tags", false, "Require that image tags do not already exist.") - firstTagOnly := config.BoolOption("first_tag", false, "Build only the first per version.") - timeoutPtr := config.IntOption("timeout", 0, "Timeout in seconds. If not set, the default Cloud Build timeout is used.") - machineTypePtr := config.StringOption("machineType","", "Optional machine type used to run the build, , must be one of: N1_HIGHCPU_8, N1_HIGHCPU_32, E2_HIGHCPU_8, E2_HIGHCPU_32. If not specified, the default machine is used.") - enableParallel := config.BoolOption("enable_parallel", false, "Enable parallel build and bigger VM") - forceParallel := config.BoolOption("force_parallel", false, "Force parallel build and bigger VM") - config.Parse() - - if *registryPtr == "" { - log.Fatalf("--registry flag is required") - } - - if strings.Contains(*registryPtr, ":") { - *registryPtr = strings.Replace(*registryPtr, ":", "/", 1) - } - - var dirs []string - if *dirsPtr != "" { - dirs = strings.Split(*dirsPtr, ",") - } - spec := versions.LoadVersions("versions.yaml") - options := cloudBuildOptions{dirs, *testsPtr, *newTagsPtr, *firstTagOnly, *timeoutPtr, *machineTypePtr, *enableParallel, *forceParallel} - result := renderCloudBuildConfig(*registryPtr, spec, options) - fmt.Println(result) -} \ No newline at end of file + config := versions.LoadConfig("versions.yaml", "cloudbuild") + registryPtr := config.StringOption("registry", "gcr.io/$PROJECT_ID", "Registry, e.g: 'gcr.io/my-project'") + dirsPtr := config.StringOption("dirs", "", "Comma separated list of Dockerfile dirs to use.") + testsPtr := config.BoolOption("tests", true, "Run tests.") + newTagsPtr := config.BoolOption("new_tags", false, "Require that image tags do not already exist.") + firstTagOnly := config.BoolOption("first_tag", false, "Build only the first per version.") + timeoutPtr := config.IntOption("timeout", 0, "Timeout in seconds. If not set, the default Cloud Build timeout is used.") + machineTypePtr := config.StringOption("machineType","", "Optional machine type used to run the build, , must be one of: N1_HIGHCPU_8, N1_HIGHCPU_32, E2_HIGHCPU_8, E2_HIGHCPU_32. If not specified, the default machine is used.") + enableParallel := config.BoolOption("enable_parallel", false, "Enable parallel build and bigger VM") + forceParallel := config.BoolOption("force_parallel", false, "Force parallel build and bigger VM") + dockerImage := config.StringOption("docker_image", "gcr.io/cloud-builders/docker", "Optional docker builder reference") + config.Parse() + + if *registryPtr == "" { + log.Fatalf("--registry flag is required") + } + + if strings.Contains(*registryPtr, ":") { + *registryPtr = strings.Replace(*registryPtr, ":", "/", 1) + } + + var dirs []string + if *dirsPtr != "" { + dirs = strings.Split(*dirsPtr, ",") + } + spec := versions.LoadVersions("versions.yaml") + options := cloudBuildOptions{dirs, *testsPtr, *newTagsPtr, *firstTagOnly, *timeoutPtr, *machineTypePtr, *enableParallel, *forceParallel, *dockerImage} + result := renderCloudBuildConfig(*registryPtr, spec, options) + fmt.Println(result) +} diff --git a/tools/dockerversioning/versions/versions.go b/tools/dockerversioning/versions/versions.go index 64a4ba575c..47104bb2d2 100644 --- a/tools/dockerversioning/versions/versions.go +++ b/tools/dockerversioning/versions/versions.go @@ -9,58 +9,74 @@ import ( "io/ioutil" "log" "strconv" + "time" yaml "gopkg.in/yaml.v2" ) type Package struct { - Version string - Minor string - Major string - Gpg string - Sha1 string - Sha256 string - Sha512 string - Md5 string + Version string + Minor string + Major string + Gpg string + Sha1 string + Sha256 string + Sha512 string + Md5 string +} + +type Annotation struct { + Key string `yaml:"key"` + AnnotationValue string `yaml:"value"` + IsTimestamp bool `yaml:"timestamp"` +} + +func (l Annotation) Value() string { + if (l.IsTimestamp) { + return time.Now().Format(time.RFC3339) + } + return l.AnnotationValue } type Version struct { - Dir string - TemplateSubDir string `yaml:"templateSubDir"` - Repo string - Tags []string - From string - TemplateArgs map[string]string `yaml:"templateArgs"` - Packages map[string]Package - ExcludeTests []string `yaml:"excludeTests"` - Builder bool - BuilderImage string `yaml:"builderImage"` - BuilderArgs []string `yaml:"builderArgs"` - ImageNameFromBuilder string `yaml:"imageNameFromBuilder"` + Dir string + TemplateSubDir string `yaml:"templateSubDir"` + Repo string + Tags []string + From string + TemplateArgs map[string]string `yaml:"templateArgs"` + Packages map[string]Package + ExcludeTests []string `yaml:"excludeTests"` + Builder bool + BuilderImage string `yaml:"builderImage"` + BuilderArgs []string `yaml:"builderArgs"` + ImageNameFromBuilder string `yaml:"imageNameFromBuilder"` + Annotations []Annotation `yaml:"annotations"` + Labels []Annotation `yaml:"labels"` } type Spec struct { - Versions []Version + Versions []Version } func ReadFile(path string) []byte { - data, err := ioutil.ReadFile(path) - if err != nil { - log.Fatalf("error: %v", err) - } - return []byte(data) + data, err := ioutil.ReadFile(path) + if err != nil { + log.Fatalf("error: %v", err) + } + return []byte(data) } func LoadVersions(path string) Spec { - spec := Spec{} - err := yaml.Unmarshal(ReadFile(path), &spec) - if err != nil { - log.Fatalf("error: %v", err) - } + spec := Spec{} + err := yaml.Unmarshal(ReadFile(path), &spec) + if err != nil { + log.Fatalf("error: %v", err) + } - validateUniqueTags(spec) + validateUniqueTags(spec) - return spec + return spec } // Config represents setting for a program call. Arguments can be provided in file, as a key-value @@ -68,65 +84,65 @@ func LoadVersions(path string) Spec { type Config map[string]string func LoadConfig(path, config string) Config { - var whole map[string]interface{} - err := yaml.Unmarshal(ReadFile(path), &whole) - if err != nil { - log.Fatalf("error: %v", err) - } - - if c, ok := whole[config]; ok { - configMap := map[string]string{} - mapInterface := c.(map[interface{}]interface{}) - for key, value := range mapInterface { - configMap[key.(string)] = fmt.Sprintf("%v", value) - } - return configMap - } - return map[string]string{} + var whole map[string]interface{} + err := yaml.Unmarshal(ReadFile(path), &whole) + if err != nil { + log.Fatalf("error: %v", err) + } + + if c, ok := whole[config]; ok { + configMap := map[string]string{} + mapInterface := c.(map[interface{}]interface{}) + for key, value := range mapInterface { + configMap[key.(string)] = fmt.Sprintf("%v", value) + } + return configMap + } + return map[string]string{} } func (c Config) StringOption(name, defaultVal, helper string) *string { - if configVal, ok := c[name]; ok { - defaultVal = configVal - } - return flag.String(name, defaultVal, helper) + if configVal, ok := c[name]; ok { + defaultVal = configVal + } + return flag.String(name, defaultVal, helper) } func (c Config) BoolOption(name string, defaultVal bool, helper string) *bool { - if configVal, ok := c[name]; ok { - b, err := strconv.ParseBool(configVal) - if err != nil { - log.Fatalf("error: %v", err) - } - defaultVal = b - } - return flag.Bool(name, defaultVal, helper) + if configVal, ok := c[name]; ok { + b, err := strconv.ParseBool(configVal) + if err != nil { + log.Fatalf("error: %v", err) + } + defaultVal = b + } + return flag.Bool(name, defaultVal, helper) } func (c Config) IntOption(name string, defaultVal int, helper string) *int { - if configVal, ok := c[name]; ok { - i, err := strconv.Atoi(configVal) - if err != nil { - log.Fatalf("error: %v", err) - } - defaultVal = i - } - return flag.Int(name, defaultVal, helper) + if configVal, ok := c[name]; ok { + i, err := strconv.Atoi(configVal) + if err != nil { + log.Fatalf("error: %v", err) + } + defaultVal = i + } + return flag.Int(name, defaultVal, helper) } func (c Config) Parse() { - flag.Parse() + flag.Parse() } func validateUniqueTags(spec Spec) { - repoTags := make(map[string]bool) - for _, version := range spec.Versions { - for _, tag := range version.Tags { - repoTag := fmt.Sprintf("%s:%s", version.Repo, tag) - if repoTags[repoTag] { - log.Fatalf("error: duplicate repo tag %v", repoTag) - } - repoTags[repoTag] = true - } - } + repoTags := make(map[string]bool) + for _, version := range spec.Versions { + for _, tag := range version.Tags { + repoTag := fmt.Sprintf("%s:%s", version.Repo, tag) + if repoTags[repoTag] { + log.Fatalf("error: duplicate repo tag %v", repoTag) + } + repoTags[repoTag] = true + } + } } diff --git a/vm/chef/cookbooks/cassandra/attributes/default.rb b/vm/chef/cookbooks/cassandra/attributes/default.rb index 73b1f3d5cf..66005d5275 100644 --- a/vm/chef/cookbooks/cassandra/attributes/default.rb +++ b/vm/chef/cookbooks/cassandra/attributes/default.rb @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['cassandra']['version'] = '4.1.7' +default['cassandra']['version'] = '5.0.2' default['cassandra']['apt_version'] = "#{default['cassandra']['version']}.*" default['cassandra']['repo']['uri'] = 'https://debian.cassandra.apache.org' default['cassandra']['repo']['components'] = ['main'] -default['cassandra']['repo']['distribution'] = '41x' +default['cassandra']['repo']['distribution'] = '50x' default['cassandra']['repo']['keyserver'] = 'https://www.apache.org/dist/cassandra/KEYS' diff --git a/vm/chef/cookbooks/dokuwiki/attributes/default.rb b/vm/chef/cookbooks/dokuwiki/attributes/default.rb index 53e8d361c9..f2b4483de7 100644 --- a/vm/chef/cookbooks/dokuwiki/attributes/default.rb +++ b/vm/chef/cookbooks/dokuwiki/attributes/default.rb @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['dokuwiki']['download_version'] = '2024-02-06' +default['dokuwiki']['download_version'] = '2024-02-06b' default['dokuwiki']['user']['name'] = 'admin' default['dokuwiki']['user']['real_name'] = 'John Doe' default['dokuwiki']['user']['groups'] = 'admin,user' diff --git a/vm/chef/cookbooks/dokuwiki/recipes/default.rb b/vm/chef/cookbooks/dokuwiki/recipes/default.rb index a97d564aee..5e1c4e786b 100644 --- a/vm/chef/cookbooks/dokuwiki/recipes/default.rb +++ b/vm/chef/cookbooks/dokuwiki/recipes/default.rb @@ -47,7 +47,7 @@ # Download, untar and mark as owned by www-data all files of DokuWiki. remote_file '/tmp/dokuwiki.tgz' do - source "https://download.dokuwiki.org/src/dokuwiki/dokuwiki-#{node['dokuwiki']['download_version']}.tgz" + source "https://github.com/dokuwiki/dokuwiki/releases/download/release-#{node['dokuwiki']['download_version']}/dokuwiki-#{node['dokuwiki']['download_version']}.tgz" action :create end diff --git a/vm/chef/cookbooks/dreamfactory/attributes/default.rb b/vm/chef/cookbooks/dreamfactory/attributes/default.rb index 8b73dac7cc..ac0dc1644c 100644 --- a/vm/chef/cookbooks/dreamfactory/attributes/default.rb +++ b/vm/chef/cookbooks/dreamfactory/attributes/default.rb @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['dreamfactory']['version'] = '4.14.1' +default['dreamfactory']['version'] = '6.3.0' default['dreamfactory']['db']['name'] = 'dreamfactory' default['php81']['distribution'] = 'bullseye' diff --git a/vm/chef/cookbooks/ghost/attributes/default.rb b/vm/chef/cookbooks/ghost/attributes/default.rb index 330f9c5704..26ea979d84 100644 --- a/vm/chef/cookbooks/ghost/attributes/default.rb +++ b/vm/chef/cookbooks/ghost/attributes/default.rb @@ -13,7 +13,7 @@ # limitations under the License. default['ghost']['cli']['version'] = '1.26.0' -default['ghost']['app']['version'] = '5.82.1' +default['ghost']['app']['version'] = '5.100.1' default['ghost']['app']['install_dir'] = '/var/www/ghost' default['ghost']['db']['user'] = 'ghost' diff --git a/vm/chef/cookbooks/haproxy/attributes/default.rb b/vm/chef/cookbooks/haproxy/attributes/default.rb index d796c23b09..039d9a82ad 100755 --- a/vm/chef/cookbooks/haproxy/attributes/default.rb +++ b/vm/chef/cookbooks/haproxy/attributes/default.rb @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['haproxy']['version'] = '2.8' +default['haproxy']['version'] = '3.0' default['haproxy']['apt_version'] = "#{default['haproxy']['version']}.\*" default['haproxy']['repo']['uri'] = 'https://haproxy.debian.net' default['haproxy']['repo']['components'] = ['main'] diff --git a/vm/chef/cookbooks/influxdb/attributes/default.rb b/vm/chef/cookbooks/influxdb/attributes/default.rb index 6448a03c0d..7815925327 100644 --- a/vm/chef/cookbooks/influxdb/attributes/default.rb +++ b/vm/chef/cookbooks/influxdb/attributes/default.rb @@ -12,5 +12,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['influxdb']['version'] = '2.7.5' +default['influxdb']['version'] = '2.7.10' default['influxdb']['sha256'] = '79f286dfaeedb02b545449674c2621d1c1a0e019cd9ed3ffd0bbdf06b22d42f1' diff --git a/vm/chef/cookbooks/joomla/attributes/default.rb b/vm/chef/cookbooks/joomla/attributes/default.rb index f3684dbe06..5909f63b50 100644 --- a/vm/chef/cookbooks/joomla/attributes/default.rb +++ b/vm/chef/cookbooks/joomla/attributes/default.rb @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['joomla']['version'] = '5.1.0' -default['joomla']['sha256'] = 'dbc4630923f02ed4e90be3c8734947a48285334ac8a416774d4e602d794ed227' +default['joomla']['version'] = '5.2.1' +default['joomla']['sha256'] = '090db690680346076a0b9e5f051076191829f4d6745ccae243856a94024eada3' default['joomla']['user'] = 'www-data' default['joomla']['db']['name'] = 'joomla_db' diff --git a/vm/chef/cookbooks/kafka/attributes/default.rb b/vm/chef/cookbooks/kafka/attributes/default.rb index 68717aea34..add7b82373 100644 --- a/vm/chef/cookbooks/kafka/attributes/default.rb +++ b/vm/chef/cookbooks/kafka/attributes/default.rb @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['kafka']['version'] = '3.7.0' +default['kafka']['version'] = '3.7.1' default['scala']['version'] = '2.13' default['kafka']['packages'] = ['zookeeperd'] diff --git a/vm/chef/cookbooks/liferay/attributes/default.rb b/vm/chef/cookbooks/liferay/attributes/default.rb index 901aac3677..631cc99e1b 100644 --- a/vm/chef/cookbooks/liferay/attributes/default.rb +++ b/vm/chef/cookbooks/liferay/attributes/default.rb @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,13 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['liferay']['version'] = '7.4.3.72-ga72' +default['liferay']['version'] = '7.4.3.125-ga125' # SHA1 value check for liferay SOURCE, the cookbook download it from # https://github.com/liferay/liferay-portal/archive/refs/tags/.tar.gz -default['liferay']['sha1']['source'] = '6ec72fa189386ee7e4886786cbf054479ec45479' +default['liferay']['sha1']['source'] = '4166db516f4da321e8828d7f306198a6f3c6d2fa' # SHA1 value check for liferay bundle, the cookbook download it from # https://github.com/liferay/liferay-portal/releases/download//liferay-ce-portal-tomcat--.tar.gz -default['liferay']['sha1']['bundle'] = 'a6c8882e14cf4ffe4ca609def4b3053b14ad1f50' +default['liferay']['sha1']['bundle'] = '19c06dd4a23527430b0de239042d0b96633e8fac' default['liferay']['packages'] = ['jq', 'zip'] default['liferay']['home'] = '/opt/liferay' diff --git a/vm/chef/cookbooks/mattermost/attributes/default.rb b/vm/chef/cookbooks/mattermost/attributes/default.rb index 9866d9e41f..58f7995700 100644 --- a/vm/chef/cookbooks/mattermost/attributes/default.rb +++ b/vm/chef/cookbooks/mattermost/attributes/default.rb @@ -13,8 +13,8 @@ # limitations under the License. default['mattermost']['packages'] = ['jq', 'nginx', 'gettext-base'] -default['mattermost']['version'] = '9.5.3' -default['mattermost']['sha256'] = '7f665aa7fd794cecb308ff7b0461a65e29b001ad664cfe36c37ed14e836402c4' +default['mattermost']['version'] = '10.2.0' +default['mattermost']['sha256'] = '06b3576df15422aa6faa4bdbfa3f01c3dbe1bc5363aa2d275c2be4fcd196aa67' # OS Settings default['mattermost']['user'] = 'mattermost' diff --git a/vm/chef/cookbooks/mautic/attributes/default.rb b/vm/chef/cookbooks/mautic/attributes/default.rb index 3ce7d7c2c3..1ff59a1993 100644 --- a/vm/chef/cookbooks/mautic/attributes/default.rb +++ b/vm/chef/cookbooks/mautic/attributes/default.rb @@ -22,7 +22,7 @@ 'php8.1-imap', ] -default['mautic']['version'] = '5.0.4' +default['mautic']['version'] = '5.1.1' default['mautic']['user'] = 'www-data' default['mautic']['db']['name'] = 'mautic' diff --git a/vm/chef/cookbooks/moodle/attributes/default.rb b/vm/chef/cookbooks/moodle/attributes/default.rb index 0955c96b99..26e7240923 100644 --- a/vm/chef/cookbooks/moodle/attributes/default.rb +++ b/vm/chef/cookbooks/moodle/attributes/default.rb @@ -15,7 +15,7 @@ default['moodle']['user'] = 'www-data' default['moodle']['group'] = 'www-data' default['moodle']['db']['name'] = 'moodle' -default['moodle']['track'] = '404' -default['moodle']['version'] = '4.4' +default['moodle']['track'] = '405' +default['moodle']['version'] = '4.5' default['php81']['distribution'] = 'bullseye' diff --git a/vm/chef/cookbooks/nginx/attributes/default.rb b/vm/chef/cookbooks/nginx/attributes/default.rb index 7ec1a3cab1..8b7a32f7f9 100644 --- a/vm/chef/cookbooks/nginx/attributes/default.rb +++ b/vm/chef/cookbooks/nginx/attributes/default.rb @@ -13,7 +13,7 @@ # limitations under the License. default['nginx']['packages'] = ['nginx'] -default['nginx']['version'] = '1.25.4' +default['nginx']['version'] = '1.27.2' default['nginx']['repo']['uri'] = 'https://nginx.org/packages/debian/' default['nginx']['repo']['components'] = ['nginx'] default['nginx']['repo']['distribution'] = 'buster' diff --git a/vm/chef/cookbooks/nodejs/attributes/default.rb b/vm/chef/cookbooks/nodejs/attributes/default.rb index ca24dbfd52..fc73454408 100644 --- a/vm/chef/cookbooks/nodejs/attributes/default.rb +++ b/vm/chef/cookbooks/nodejs/attributes/default.rb @@ -13,4 +13,4 @@ # limitations under the License. default['nodejs']['packages'] = ['nodejs'] -default['nodejs']['version'] = '21' +default['nodejs']['version'] = '23' diff --git a/vm/chef/cookbooks/odoo/attributes/default.rb b/vm/chef/cookbooks/odoo/attributes/default.rb index 6b6caa06f8..3901f65471 100644 --- a/vm/chef/cookbooks/odoo/attributes/default.rb +++ b/vm/chef/cookbooks/odoo/attributes/default.rb @@ -84,10 +84,10 @@ default['odoo']['pip-packages'] = 'vobject qrcode pyldap num2words xlwt pyopenssl sslcrypto' -default['odoo']['version'] = '17.0' -default['odoo']['release'] = '20240416' -default['odoo']['sha256'] = 'f2031c2633f7dd8fd18d64dac424a79b759d6e8ccd2f308f12bbbcdbe17e8d58' -default['odoo']['src']['sha256'] = '404e39408a080039967b1b14a75225370730073e4a468a2ad623274d8202c0ca' +default['odoo']['version'] = '18.0' +default['odoo']['release'] = '20241107' +default['odoo']['sha256'] = '212a79485ed39c628060e83853f3d1067ca57b4b8a86f2b0e73b9d56ff766de9' +default['odoo']['src']['sha256'] = '615df6b6fc15f0120b7b301e792aa76e80bd0c2c86fd690b9d6ef6dfc588b30a' default['odoo']['wkhtmltopdf']['version'] = '0.12.6' default['odoo']['wkhtmltopdf']['release'] = '0.12.6-1' diff --git a/vm/chef/cookbooks/prestashop/attributes/default.rb b/vm/chef/cookbooks/prestashop/attributes/default.rb index 6c81f49b7e..b5f00c9b7a 100644 --- a/vm/chef/cookbooks/prestashop/attributes/default.rb +++ b/vm/chef/cookbooks/prestashop/attributes/default.rb @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['prestashop']['version'] = '8.1.7' +default['prestashop']['version'] = '8.2.0' default['prestashop']['db']['name'] = 'prestashop' default['prestashop']['temp_packages'] = ['unzip'] diff --git a/vm/chef/cookbooks/redash/attributes/default.rb b/vm/chef/cookbooks/redash/attributes/default.rb index f4159112d8..acc4a1a2eb 100644 --- a/vm/chef/cookbooks/redash/attributes/default.rb +++ b/vm/chef/cookbooks/redash/attributes/default.rb @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['redash']['version'] = 'v10.1.0' +default['redash']['version'] = '10.1.0' default['redash']['sha1'] = 'c85a15f0c1b66f2b542a094accc3b47d7ce67910' default['redash']['packages'] = ['jq'] diff --git a/vm/chef/cookbooks/redash/recipes/default.rb b/vm/chef/cookbooks/redash/recipes/default.rb index a0ee3050f0..ef75aa0293 100644 --- a/vm/chef/cookbooks/redash/recipes/default.rb +++ b/vm/chef/cookbooks/redash/recipes/default.rb @@ -40,7 +40,7 @@ end remote_file '/tmp/redash.tar.gz' do - source "https://github.com/getredash/redash/archive/refs/tags/#{node['redash']['version']}.tar.gz" + source "https://github.com/getredash/redash/archive/refs/tags/v#{node['redash']['version']}.tar.gz" verify "echo '#{node['redash']['sha1']} %{path}' | sha1sum -c" action :create end diff --git a/vm/chef/cookbooks/redis/attributes/default.rb b/vm/chef/cookbooks/redis/attributes/default.rb index effb2e4911..5e168b805b 100644 --- a/vm/chef/cookbooks/redis/attributes/default.rb +++ b/vm/chef/cookbooks/redis/attributes/default.rb @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['redis']['version'] = '7.2.3' +default['redis']['version'] = '7.2.6' default['redis']['download_url'] = "http://download.redis.io/releases/redis-#{default['redis']['version']}.tar.gz" diff --git a/vm/chef/cookbooks/redmine/attributes/default.rb b/vm/chef/cookbooks/redmine/attributes/default.rb index 79cd6f3295..1a3cc2cddf 100644 --- a/vm/chef/cookbooks/redmine/attributes/default.rb +++ b/vm/chef/cookbooks/redmine/attributes/default.rb @@ -26,7 +26,7 @@ 'libgs9-common', 'libjbig2dec0', ] -default['redmine']['version'] = '5.1.2' +default['redmine']['version'] = '5.1.4' default['redmine']['ruby']['version'] = '3.2.3' # OS Settings diff --git a/vm/chef/cookbooks/solr/attributes/default.rb b/vm/chef/cookbooks/solr/attributes/default.rb index da68032de5..b5dd7acbff 100644 --- a/vm/chef/cookbooks/solr/attributes/default.rb +++ b/vm/chef/cookbooks/solr/attributes/default.rb @@ -12,5 +12,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['solr']['version'] = '9.5.0' +default['solr']['version'] = '9.6.1' default['solr']['packages'] = ['lsof'] diff --git a/vm/chef/cookbooks/weblate/attributes/default.rb b/vm/chef/cookbooks/weblate/attributes/default.rb index 26794e0167..c2a1073aaa 100644 --- a/vm/chef/cookbooks/weblate/attributes/default.rb +++ b/vm/chef/cookbooks/weblate/attributes/default.rb @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['weblate']['version'] = '4.16' +default['weblate']['version'] = '5.8.2' default['weblate']['db']['name'] = 'weblate' default['weblate']['pip-packages'] = [ 'psycopg2-binary', diff --git a/vm/chef/cookbooks/zabbix/attributes/default.rb b/vm/chef/cookbooks/zabbix/attributes/default.rb index 314f6e6038..c86f3ea767 100644 --- a/vm/chef/cookbooks/zabbix/attributes/default.rb +++ b/vm/chef/cookbooks/zabbix/attributes/default.rb @@ -12,9 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -default['zabbix']['version'] = '7.0' +default['zabbix']['version'] = '7.0.6' +default['zabbix']['repo']['version'] = '7.0' default['zabbix']['packages'] = %w(mailutils php-pgsql zabbix-server-pgsql zabbix-frontend-php zabbix-proxy-pgsql zabbix-sql-scripts zabbix-apache-conf php-gd php-bcmath php-mbstring php-xml php-ldap php-json) -default['zabbix']['repo']['uri'] = "https://repo.zabbix.com/zabbix/#{default['zabbix']['version']}/debian/" +default['zabbix']['repo']['uri'] = "https://repo.zabbix.com/zabbix/#{default['zabbix']['repo']['version']}/debian/" default['zabbix']['repo']['components'] = ['main'] default['zabbix']['repo']['distribution'] = 'bookworm' default['zabbix']['repo']['keyserver'] = 'https://repo.zabbix.com/zabbix-official-repo.key' diff --git a/vm/tests/solutions/spec/liferay/liferay_spec.rb b/vm/tests/solutions/spec/liferay/liferay_spec.rb index 0b642d0ef4..b0f06a92e1 100644 --- a/vm/tests/solutions/spec/liferay/liferay_spec.rb +++ b/vm/tests/solutions/spec/liferay/liferay_spec.rb @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,12 +20,6 @@ end end -describe 'Liferay bundle should exists' do - describe file('/opt/liferay/readme.html') do - it { should exist } - end -end - describe 'Liferay service script should exists' do describe file('/etc/systemd/system/liferay.service') do it { should exist }