mirror of
https://github.com/dani-garcia/vaultwarden
synced 2024-12-15 18:13:43 +01:00
d722328f05
* WIP: Container building changes * Small updates - Updated to rust 1.73.0 - Updated crates - Updated documentation - Added a bake.sh script to make baking easier * Update GitHub Actions Workflow - Updated workflow to use qemu and buildx bake In the future i would like to extract the alpine based binaries and add them as artifacts to the release. * Address review remarks and small updates - Addressed review remarks - Added `podman-bake.sh` script to build Vaultwarden with podman - Updated README - Updated crates - Added `VW_VERSION` support - Added annotations - Updated web-vault to v2023.9.1
105 lines
3.3 KiB
Bash
Executable file
105 lines
3.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# Determine the basedir of this script.
|
|
# It should be located in the same directory as the docker-bake.hcl
|
|
# This ensures you can run this script from both inside and outside of the docker directory
|
|
BASEDIR=$(RL=$(readlink -n "$0"); SP="${RL:-$0}"; dirname "$(cd "$(dirname "${SP}")" || exit; pwd)/$(basename "${SP}")")
|
|
|
|
# Load build env's
|
|
source "${BASEDIR}/bake_env.sh"
|
|
|
|
# Check if a target is given as first argument
|
|
# If not we assume the defaults and pass the given arguments to the podman command
|
|
case "${1}" in
|
|
alpine*|debian*)
|
|
TARGET="${1}"
|
|
# Now shift the $@ array so we only have the rest of the arguments
|
|
# This allows us too append these as extra arguments too the podman buildx build command
|
|
shift
|
|
;;
|
|
esac
|
|
|
|
LABEL_ARGS=(
|
|
--label org.opencontainers.image.description="Unofficial Bitwarden compatible server written in Rust"
|
|
--label org.opencontainers.image.licenses="AGPL-3.0-only"
|
|
--label org.opencontainers.image.documentation="https://github.com/dani-garcia/vaultwarden/wiki"
|
|
--label org.opencontainers.image.url="https://github.com/dani-garcia/vaultwarden"
|
|
--label org.opencontainers.image.created="$(date --utc --iso-8601=seconds)"
|
|
)
|
|
if [[ -n "${SOURCE_REPOSITORY_URL}" ]]; then
|
|
LABEL_ARGS+=(--label org.opencontainers.image.source="${SOURCE_REPOSITORY_URL}")
|
|
fi
|
|
if [[ -n "${SOURCE_COMMIT}" ]]; then
|
|
LABEL_ARGS+=(--label org.opencontainers.image.revision="${SOURCE_COMMIT}")
|
|
fi
|
|
if [[ -n "${SOURCE_VERSION}" ]]; then
|
|
LABEL_ARGS+=(--label org.opencontainers.image.version="${SOURCE_VERSION}")
|
|
fi
|
|
|
|
# Check if and which --build-arg arguments we need to configure
|
|
BUILD_ARGS=()
|
|
if [[ -n "${DB}" ]]; then
|
|
BUILD_ARGS+=(--build-arg DB="${DB}")
|
|
fi
|
|
if [[ -n "${CARGO_PROFILE}" ]]; then
|
|
BUILD_ARGS+=(--build-arg CARGO_PROFILE="${CARGO_PROFILE}")
|
|
fi
|
|
if [[ -n "${VW_VERSION}" ]]; then
|
|
BUILD_ARGS+=(--build-arg VW_VERSION="${VW_VERSION}")
|
|
fi
|
|
|
|
# Set the default BASE_TAGS if non are provided
|
|
if [[ -z "${BASE_TAGS}" ]]; then
|
|
BASE_TAGS="testing"
|
|
fi
|
|
|
|
# Set the default CONTAINER_REGISTRIES if non are provided
|
|
if [[ -z "${CONTAINER_REGISTRIES}" ]]; then
|
|
CONTAINER_REGISTRIES="vaultwarden/server"
|
|
fi
|
|
|
|
# Check which Dockerfile we need to use, default is debian
|
|
case "${TARGET}" in
|
|
alpine*)
|
|
BASE_TAGS="${BASE_TAGS}-alpine"
|
|
DOCKERFILE="Dockerfile.alpine"
|
|
;;
|
|
*)
|
|
DOCKERFILE="Dockerfile.debian"
|
|
;;
|
|
esac
|
|
|
|
# Check which platform we need to build and append the BASE_TAGS with the architecture
|
|
case "${TARGET}" in
|
|
*-arm64)
|
|
BASE_TAGS="${BASE_TAGS}-arm64"
|
|
PLATFORM="linux/arm64"
|
|
;;
|
|
*-armv7)
|
|
BASE_TAGS="${BASE_TAGS}-armv7"
|
|
PLATFORM="linux/arm/v7"
|
|
;;
|
|
*-armv6)
|
|
BASE_TAGS="${BASE_TAGS}-armv6"
|
|
PLATFORM="linux/arm/v6"
|
|
;;
|
|
*)
|
|
BASE_TAGS="${BASE_TAGS}-amd64"
|
|
PLATFORM="linux/amd64"
|
|
;;
|
|
esac
|
|
|
|
# Be verbose on what is being executed
|
|
set -x
|
|
|
|
# Build the image with podman
|
|
# We use the docker format here since we are using `SHELL`, which is not supported by OCI
|
|
# shellcheck disable=SC2086
|
|
podman buildx build \
|
|
--platform="${PLATFORM}" \
|
|
--tag="${CONTAINER_REGISTRIES}:${BASE_TAGS}" \
|
|
--format=docker \
|
|
"${LABEL_ARGS[@]}" \
|
|
"${BUILD_ARGS[@]}" \
|
|
--file="${BASEDIR}/${DOCKERFILE}" "$@" \
|
|
"${BASEDIR}/.."
|