You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							260 lines
						
					
					
						
							7.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							260 lines
						
					
					
						
							7.0 KiB
						
					
					
				| // ==== Baking Variables ==== | |
| 
 | |
| // Set which cargo profile to use, dev or release for example | |
| // Use the value provided in the Dockerfile as default | |
| variable "CARGO_PROFILE" { | |
|   default = null | |
| } | |
| 
 | |
| // Set which DB's (features) to enable | |
| // Use the value provided in the Dockerfile as default | |
| variable "DB" { | |
|   default = null | |
| } | |
| 
 | |
| // The repository this build was triggered from | |
| variable "SOURCE_REPOSITORY_URL" { | |
|   default = null | |
| } | |
| 
 | |
| // The commit hash of the current commit this build was triggered on | |
| variable "SOURCE_COMMIT" { | |
|   default = null | |
| } | |
| 
 | |
| // The version of this build | |
| // Typically the current exact tag of this commit, | |
| // else the last tag and the first 8 characters of the source commit | |
| variable "SOURCE_VERSION" { | |
|   default = null | |
| } | |
| 
 | |
| // This can be used to overwrite SOURCE_VERSION | |
| // It will be used during the build.rs building stage | |
| variable "VW_VERSION" { | |
|   default = null | |
| } | |
| 
 | |
| // The base tag(s) to use | |
| // This can be a comma separated value like "testing,1.29.2" | |
| variable "BASE_TAGS" { | |
|   default = "testing" | |
| } | |
| 
 | |
| // Which container registries should be used for the tagging | |
| // This can be a comma separated value | |
| // Use a full URI like `ghcr.io/dani-garcia/vaultwarden,docker.io/vaultwarden/server` | |
| variable "CONTAINER_REGISTRIES" { | |
|   default = "vaultwarden/server" | |
| } | |
| 
 | |
| 
 | |
| // ==== Baking Groups ==== | |
| 
 | |
| group "default" { | |
|   targets = ["debian"] | |
| } | |
| 
 | |
| 
 | |
| // ==== Shared Baking ==== | |
| function "labels" { | |
|   params = [] | |
|   result = { | |
|     "org.opencontainers.image.description" = "Unofficial Bitwarden compatible server written in Rust - ${SOURCE_VERSION}" | |
|     "org.opencontainers.image.licenses" = "AGPL-3.0-only" | |
|     "org.opencontainers.image.documentation" = "https://github.com/dani-garcia/vaultwarden/wiki" | |
|     "org.opencontainers.image.url" = "https://github.com/dani-garcia/vaultwarden" | |
|     "org.opencontainers.image.created" =  "${formatdate("YYYY-MM-DD'T'hh:mm:ssZZZZZ", timestamp())}" | |
|     "org.opencontainers.image.source" = "${SOURCE_REPOSITORY_URL}" | |
|     "org.opencontainers.image.revision" = "${SOURCE_COMMIT}" | |
|     "org.opencontainers.image.version" = "${SOURCE_VERSION}" | |
|   } | |
| } | |
| 
 | |
| target "_default_attributes" { | |
|   labels = labels() | |
|   args = { | |
|     DB = "${DB}" | |
|     CARGO_PROFILE = "${CARGO_PROFILE}" | |
|     VW_VERSION = "${VW_VERSION}" | |
|   } | |
| } | |
| 
 | |
| 
 | |
| // ==== Debian Baking ==== | |
| 
 | |
| // Default Debian target, will build a container using the hosts platform architecture | |
| target "debian" { | |
|   inherits = ["_default_attributes"] | |
|   dockerfile = "docker/Dockerfile.debian" | |
|   tags = generate_tags("", platform_tag()) | |
|   output = ["type=docker"] | |
| } | |
| 
 | |
| // Multi Platform target, will build one tagged manifest with all supported architectures | |
| // This is mainly used by GitHub Actions to build and push new containers | |
| target "debian-multi" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/amd64", "linux/arm64", "linux/arm/v7", "linux/arm/v6"] | |
|   tags = generate_tags("", "") | |
|   output = [join(",", flatten([["type=registry"], image_index_annotations()]))] | |
| } | |
| 
 | |
| // Per platform targets, to individually test building per platform locally | |
| target "debian-amd64" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/amd64"] | |
|   tags = generate_tags("", "-amd64") | |
| } | |
| 
 | |
| target "debian-arm64" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/arm64"] | |
|   tags = generate_tags("", "-arm64") | |
| } | |
| 
 | |
| target "debian-armv7" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/arm/v7"] | |
|   tags = generate_tags("", "-armv7") | |
| } | |
| 
 | |
| target "debian-armv6" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/arm/v6"] | |
|   tags = generate_tags("", "-armv6") | |
| } | |
| 
 | |
| // ==== Start of unsupported Debian architecture targets === | |
| // These are provided just to help users build for these rare platforms | |
| // They will not be built by default | |
| target "debian-386" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/386"] | |
|   tags = generate_tags("", "-386") | |
|   args = { | |
|     TARGET_PKG_CONFIG_PATH = "/usr/lib/i386-linux-gnu/pkgconfig" | |
|   } | |
| } | |
| 
 | |
| target "debian-ppc64le" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/ppc64le"] | |
|   tags = generate_tags("", "-ppc64le") | |
| } | |
| 
 | |
| target "debian-s390x" { | |
|   inherits = ["debian"] | |
|   platforms = ["linux/s390x"] | |
|   tags = generate_tags("", "-s390x") | |
| } | |
| // ==== End of unsupported Debian architecture targets === | |
| 
 | |
| // A Group to build all platforms individually for local testing | |
| group "debian-all" { | |
|   targets = ["debian-amd64", "debian-arm64", "debian-armv7", "debian-armv6"] | |
| } | |
| 
 | |
| 
 | |
| // ==== Alpine Baking ==== | |
| 
 | |
| // Default Alpine target, will build a container using the hosts platform architecture | |
| target "alpine" { | |
|   inherits = ["_default_attributes"] | |
|   dockerfile = "docker/Dockerfile.alpine" | |
|   tags = generate_tags("-alpine", platform_tag()) | |
|   output = ["type=docker"] | |
| } | |
| 
 | |
| // Multi Platform target, will build one tagged manifest with all supported architectures | |
| // This is mainly used by GitHub Actions to build and push new containers | |
| target "alpine-multi" { | |
|   inherits = ["alpine"] | |
|   platforms = ["linux/amd64", "linux/arm64", "linux/arm/v7", "linux/arm/v6"] | |
|   tags = generate_tags("-alpine", "") | |
|   output = [join(",", flatten([["type=registry"], image_index_annotations()]))] | |
| } | |
| 
 | |
| // Per platform targets, to individually test building per platform locally | |
| target "alpine-amd64" { | |
|   inherits = ["alpine"] | |
|   platforms = ["linux/amd64"] | |
|   tags = generate_tags("-alpine", "-amd64") | |
| } | |
| 
 | |
| target "alpine-arm64" { | |
|   inherits = ["alpine"] | |
|   platforms = ["linux/arm64"] | |
|   tags = generate_tags("-alpine", "-arm64") | |
| } | |
| 
 | |
| target "alpine-armv7" { | |
|   inherits = ["alpine"] | |
|   platforms = ["linux/arm/v7"] | |
|   tags = generate_tags("-alpine", "-armv7") | |
| } | |
| 
 | |
| target "alpine-armv6" { | |
|   inherits = ["alpine"] | |
|   platforms = ["linux/arm/v6"] | |
|   tags = generate_tags("-alpine", "-armv6") | |
| } | |
| 
 | |
| // A Group to build all platforms individually for local testing | |
| group "alpine-all" { | |
|   targets = ["alpine-amd64", "alpine-arm64", "alpine-armv7", "alpine-armv6"] | |
| } | |
| 
 | |
| 
 | |
| // ==== Bake everything locally ==== | |
| 
 | |
| group "all" { | |
|   targets = ["debian-all", "alpine-all"] | |
| } | |
| 
 | |
| 
 | |
| // ==== Baking functions ==== | |
| 
 | |
| // This will return the local platform as amd64, arm64 or armv7 for example | |
| // It can be used for creating a local image tag | |
| function "platform_tag" { | |
|   params = [] | |
|   result = "-${replace(replace(BAKE_LOCAL_PLATFORM, "linux/", ""), "/", "")}" | |
| } | |
| 
 | |
| 
 | |
| function "get_container_registries" { | |
|   params = [] | |
|   result = flatten(split(",", CONTAINER_REGISTRIES)) | |
| } | |
| 
 | |
| function "get_base_tags" { | |
|   params = [] | |
|   result = flatten(split(",", BASE_TAGS)) | |
| } | |
| 
 | |
| function "generate_tags" { | |
|   params = [ | |
|     suffix,   // What to append to the BASE_TAG when needed, like `-alpine` for example | |
|     platform  // the platform we are building for if needed | |
|   ] | |
|   result = flatten([ | |
|     for registry in get_container_registries() : | |
|       [for base_tag in get_base_tags() : | |
|         concat( | |
|           # If the base_tag contains latest, and the suffix contains `-alpine` add a `:alpine` tag too | |
|           base_tag == "latest" ? suffix == "-alpine" ? ["${registry}:alpine${platform}"] : [] : [], | |
|           # The default tagging strategy | |
|           ["${registry}:${base_tag}${suffix}${platform}"] | |
|         ) | |
|       ] | |
|   ]) | |
| } | |
| 
 | |
| function "image_index_annotations" { | |
|   params = [] | |
|   result = flatten([ | |
|     for key, value in labels() : | |
|       value != null ? formatlist("annotation-index.%s=%s", "${key}", "${value}") : [] | |
|   ]) | |
| }
 | |
| 
 |