vaultwarden-docker-build/build.sh

93 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
set -xeu
DEBIAN_FRONTEND=noninteractive
TARGET="$PWD"
export DEBIAN_FRONTEND
dependencies() {
# Update system and install basic tools
apt-get update -yq && apt-get install -yq aptitude curl git wget
# Install dependencies for Vaultwarden
aptitude --quiet --assume-yes install pkg-config libssl-dev build-essential libsqlite3-dev
}
install_rust() {
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-host x86_64-unknown-linux-gnu --default-toolchain nightly
. ~/.cargo/env
}
get_vault_sources() {
# Clone Vaultwarden repo
cd "$(mktemp -d)"
git clone https://github.com/dani-garcia/vaultwarden
cd vaultwarden
}
build_vault() {
# Build
cargo build --release --features sqlite
# Move to previous directory
cd -
}
get_webgui_sources() {
# Get Dani Garcia GPG key
gpg --keyserver keyserver.ubuntu.com --recv-keys B9B7A108373276BF3C0406F9FC8A7D14C3CD543A
# Get BlackDex GPG key
gpg --keyserver keyserver.ubuntu.com --recv-keys 3C5BBC173D81186CFFDE72A958C80A2AA6C765E1
# Clone Vault web builds repo
git clone https://github.com/dani-garcia/bw_web_builds
cd bw_web_builds
# Get the last version of builded web gui
web_vault_version=$(git tag --sort=v:refname | tail -n1)
wget "https://github.com/dani-garcia/bw_web_builds/releases/download/${web_vault_version}/bw_web_${web_vault_version}.tar.gz" -O ../bw_web_latest.tar.gz
web_vault_version=$(git tag --sort=v:refname | tail -n1)
wget "https://github.com/dani-garcia/bw_web_builds/releases/download/${web_vault_version}/bw_web_${web_vault_version}.tar.gz.asc" -O ../bw_web_latest.tar.gz.asc
# Move to previous directory
cd -
}
merge() {
# Verify the signature
gpg --verify bw_web_latest.tar.gz.asc bw_web_latest.tar.gz || exit 2
# Extract the builded web gui
tar xf bw_web_latest.tar.gz
# Move the web gui to Vaultwarden
mv web-vault vaultwarden/target/release/web-vault
# Produce an archive of this Vaultwarden release
cd vaultwarden/target
vaultwarden_version=$(git tag --sort=v:refname | tail -n1)
tar czf "/vaultwarden_${vaultwarden_version}.tar.gz" release
# Move to previous directory
cd -
}
copy() {
TARGET_UID="$(stat --printf %u "$TARGET")"
TARGET_GID="$(stat --printf %g "$TARGET")"
install -o "$TARGET_UID" -g "$TARGET_GID" -t "$TARGET/target" /*.tar.gz
}
main() {
dependencies
install_rust
get_vault_sources
build_vault
get_webgui_sources
merge
copy
}
main