Skip to content

Commit

Permalink
Update tagging for bake release builds
Browse files Browse the repository at this point in the history
  • Loading branch information
ianpittwood committed Apr 8, 2024
1 parent e54f564 commit 68e44ba
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 66 deletions.
13 changes: 7 additions & 6 deletions .github/workflows/build-bake.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
on:
push:
branches:
- main
- dev
pull_request:
push:
branches:
- main
- dev
pull_request:

name: Bake Docker Images
name: Release - Build, Test, and Push
jobs:
build:
name: Build and Test images
runs-on: ubuntu-latest-4x

concurrency:
Expand Down
4 changes: 4 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ changed in each image.

This file only captures pervasive, repository-wide changes.

# 2024-04-08

- Change build orchestration to use `docker buildx bake` for all images.

# 2024-03-14

- Update Professional Drivers to 2024.03.0
Expand Down
147 changes: 87 additions & 60 deletions docker-bake.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,51 @@ variable DEFAULT_QUARTO_VERSION {
default = "1.4.553"
}

function workbench_version_clean {
params = []
result = split("+", WORKBENCH_VERSION)[0]
}

function get_os_alt_name {
params = [os]
result = os == "ubuntu2204" ? "jammy" : os
}

function get_drivers_version {
params = [os]
result = os == "centos7" ? "${DRIVERS_VERSION}-1" : DRIVERS_VERSION
}

function get_centos_tags {
params = [os, product, product_version]
result = [
"ghcr.io/rstudio/${product}:${os}",
"ghcr.io/rstudio/${product}:${os}-${product_version}",
"docker.io/rstudio/${product}:${os}",
"docker.io/rstudio/${product}:${os}-${product_version}",
]
}

function get_ubuntu_tags {
params = [os, product, product_version]
result = [
"ghcr.io/rstudio/${product}:${os}",
"ghcr.io/rstudio/${product}:${get_os_alt_name(os)}",
"ghcr.io/rstudio/${product}:${os}-${product_version}",
"ghcr.io/rstudio/${product}:${get_os_alt_name(os)}-${product_version}",
"docker.io/rstudio/${product}:${os}",
"docker.io/rstudio/${product}:${get_os_alt_name(os)}",
"docker.io/rstudio/${product}:${os}-${product_version}",
"docker.io/rstudio/${product}:${get_os_alt_name(os)}-${product_version}",
]
}

# FIXME: There's an obnoxious amount of hardcoding here due to restrictions with what bake can actually interpret from HCL.
function get_tags {
params = [os, product, product_version]
result = os == "ubuntu2204" ? get_ubuntu_tags(os, product, product_version) : get_centos_tags(os, product, product_version)
}

### Build matrices ###

variable BASE_BUILD_MATRIX {
Expand Down Expand Up @@ -313,11 +353,8 @@ target "package-manager" {
inherits = ["base"]
target = "build"

name = "package-manager-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
tags = [
"ghcr.io/rstudio/rstudio-package-manager:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
"docker.io/rstudio/rstudio-package-manager:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
]
name = "package-manager-${builds.os}-${replace(PACKAGE_MANAGER_VERSION, ".", "-")}"
tags = get_tags(builds.os, "package-manager", PACKAGE_MANAGER_VERSION)

dockerfile = "Dockerfile.${builds.os}"
context = "package-manager"
Expand All @@ -336,14 +373,14 @@ target "package-manager" {
}

target "test-package-manager" {
inherits = ["package-manager-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["package-manager-${builds.os}-${replace(PACKAGE_MANAGER_VERSION, ".", "-")}"]
target = "test"

name = "test-package-manager-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "test-package-manager-${builds.os}-${replace(PACKAGE_MANAGER_VERSION, ".", "-")}"
tags = []

contexts = {
build = "target:package-manager-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:package-manager-${builds.os}-${replace(PACKAGE_MANAGER_VERSION, ".", "-")}"
}

matrix = PACKAGE_MANAGER_BUILD_MATRIX
Expand All @@ -354,15 +391,13 @@ target "connect" {
inherits = ["base"]
target = "build"

name = "connect-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
tags = [
"ghcr.io/rstudio/rstudio-connect:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
"docker.io/rstudio/rstudio-connect:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
]
name = "connect-${builds.os}-${replace(CONNECT_VERSION, ".", "-")}"
tags = get_tags(builds.os, "rstudio-connect", CONNECT_VERSION)

# We output Connect to OCI so it can be pulled in for testing later on.
output = [
"type=image",
"type=oci,tar=false,dest=./.out/connect-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
"type=oci,tar=false,dest=./.out/connect-${builds.os}-${replace(CONNECT_VERSION, ".", "-")}"
]

dockerfile = "Dockerfile.${builds.os}"
Expand All @@ -383,14 +418,14 @@ target "connect" {

# FIXME: This target requires a privileged environment which bake cannot provide
target "test-connect" {
inherits = ["connect-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["connect-${builds.os}-${replace(CONNECT_VERSION, ".", "-")}"]
target = "test"

name = "test-connect-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "test-connect-${builds.os}-${replace(CONNECT_VERSION, ".", "-")}"
tags = []

contexts = {
build = "target:connect-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:connect-${builds.os}-${replace(CONNECT_VERSION, ".", "-")}"
}

matrix = CONNECT_BUILD_MATRIX
Expand All @@ -401,12 +436,7 @@ target "connect-content-init" {
target = "build"

name = "connect-content-init-${builds.os}-${replace(CONNECT_VERSION, ".", "-")}"
tags = [
"ghcr.io/rstudio/product-connect-content-init:${builds.os}",
"ghcr.io/rstudio/product-connect-content-init:${builds.os}-${CONNECT_VERSION}",
"docker.io/rstudio/product-connect-content-init:${builds.os}",
"docker.io/rstudio/product-connect-content-init:${builds.os}-${CONNECT_VERSION}",
]
tags = get_tags(builds.os, "rstudio-connect-content-init", CONNECT_VERSION)

dockerfile = "Dockerfile.${builds.os}"
context = "connect-content-init"
Expand Down Expand Up @@ -437,11 +467,8 @@ target "r-session-complete" {
inherits = ["base"]
target = "build"

name = "r-session-complete-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
tags = [
"ghcr.io/rstudio/product-r-session-complete:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
"docker.io/rstudio/product-r-session-complete:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
]
name = "r-session-complete-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
tags = get_tags(builds.os, "r-session-complete", workbench_version_clean())

dockerfile = "Dockerfile.${builds.os}"
context = "r-session-complete"
Expand All @@ -463,14 +490,14 @@ target "r-session-complete" {
}

target "test-r-session-complete" {
inherits = ["r-session-complete-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["r-session-complete-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"]
target = "test"

name = "test-r-session-complete-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "test-r-session-complete-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
tags = []

contexts = {
build = "target:r-session-complete-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:r-session-complete-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
}

matrix = R_SESSION_COMPLETE_BUILD_MATRIX
Expand All @@ -479,11 +506,8 @@ target "test-r-session-complete" {
target "workbench" {
inherits = ["base"]

name = "workbench-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
tags = [
"ghcr.io/rstudio/product-workbench:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
"docker.io/rstudio/product-workbench:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
]
name = "workbench-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
tags = get_tags(builds.os, "rstudio-workbench", workbench_version_clean())

dockerfile = "Dockerfile.${builds.os}"
context = "workbench"
Expand All @@ -505,13 +529,13 @@ target "workbench" {
}

target "test-workbench" {
inherits = ["workbench-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["workbench-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"]

name = "test-workbench-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "test-workbench-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
tags = []

contexts = {
build = "target:workbench-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:workbench-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
}

matrix = WORKBENCH_BUILD_MATRIX
Expand All @@ -521,10 +545,16 @@ target "test-workbench" {
target "workbench-for-google-cloud-workstations" {
inherits = ["base"]

name = "workbench-for-google-cloud-workstation-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "workbench-for-google-cloud-workstation-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
tags = [
"ghcr.io/rstudio/workbench-for-google-cloud-workstation:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
"docker.io/rstudio/workbench-for-google-cloud-workstation:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
"us-central1-docker.pkg.dev/posit-images/cloud-workstations/workbench:latest",
"us-central1-docker.pkg.dev/posit-images/cloud-workstations/workbench:${workbench_version_clean()}",
"us-docker.pkg.dev/posit-images/cloud-workstations/workbench:latest",
"us-docker.pkg.dev/posit-images/cloud-workstations/workbench:${workbench_version_clean()}",
"europe-docker.pkg.dev/posit-images/cloud-workstations/workbench:latest",
"europe-docker.pkg.dev/posit-images/cloud-workstations/workbench:${workbench_version_clean()}",
"asia-docker.pkg.dev/posit-images/cloud-workstations/workbench:latest",
"asia-docker.pkg.dev/posit-images/cloud-workstations/workbench:${workbench_version_clean()}",
]

dockerfile = "Dockerfile.${builds.os}"
Expand All @@ -547,13 +577,13 @@ target "workbench-for-google-cloud-workstations" {
}

target "test-workbench-for-google-cloud-workstations" {
inherits = ["workbench-for-google-cloud-workstation-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["workbench-for-google-cloud-workstation-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"]

name = "test-workbench-for-google-cloud-workstation-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "test-workbench-for-google-cloud-workstation-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
tags = []

contexts = {
build = "target:workbench-for-google-cloud-workstation-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:workbench-for-google-cloud-workstation-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
}

matrix = WORKBENCH_GOOGLE_CLOUD_WORKSTATION_BUILD_MATRIX
Expand All @@ -565,7 +595,7 @@ target "build-workbench-for-microsoft-azure-ml" {
inherits = ["base"]
target = "build"

name = "build-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "build-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"

dockerfile = "Dockerfile.${builds.os}"
context = "workbench-for-microsoft-azure-ml"
Expand All @@ -588,44 +618,41 @@ target "build-workbench-for-microsoft-azure-ml" {
}

target "scan-workbench-for-microsoft-azure-ml" {
inherits = ["build-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["build-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"]
target = "clamav"

name = "scan-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "scan-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"

contexts = {
build = "target:build-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:build-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
}

matrix = WORKBENCH_MICROSOFT_AZURE_ML_BUILD_MATRIX
}

target "test-workbench-for-microsoft-azure-ml" {
inherits = ["build-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["build-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"]
target = "test"

name = "test-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
name = "test-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"

contexts = {
build = "target:build-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:build-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
}

matrix = WORKBENCH_MICROSOFT_AZURE_ML_BUILD_MATRIX
}

target "workbench-for-microsoft-azure-ml" {
inherits = ["build-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"]
inherits = ["build-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"]
target = "final"

name = "workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
tags = [
"ghcr.io/rstudio/product-workbench-for-microsoft-azure-ml:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
"docker.io/rstudio/product-workbench-for-microsoft-azure-ml:${builds.os}-r${builds.r_primary}_${builds.r_alternate}-py${builds.py_primary}_${builds.py_alternate}",
]
name = "workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
tags = get_tags(builds.os, "rstudio-workbench-for-microsoft-azure-ml", workbench_version_clean())

contexts = {
build = "target:build-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
clamav = "target:scan-workbench-for-microsoft-azure-ml-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
build = "target:build-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
clamav = "target:scan-workbench-for-microsoft-azure-ml-${builds.os}-${replace(workbench_version_clean(), ".", "-")}"
}

matrix = WORKBENCH_MICROSOFT_AZURE_ML_BUILD_MATRIX
Expand Down

0 comments on commit 68e44ba

Please sign in to comment.