mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2024-12-27 07:35:56 -05:00
52 lines
1.6 KiB
Bash
Executable File
52 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# This file is part of Moonfire NVR, a security camera network video recorder.
|
|
# Copyright (C) 2021 The Moonfire NVR Authors; see AUTHORS and LICENSE.txt.
|
|
# SPDX-License-Identifier: GPL-v3.0-or-later WITH GPL-3.0-linking-exception
|
|
|
|
# Pushes a release to Docker. See guides/build.md#release-procedure.
|
|
|
|
set -o errexit
|
|
set -o pipefail
|
|
set -o xtrace
|
|
|
|
set_latest() {
|
|
# Our images are manifest lists (for multiple architectures).
|
|
# "docker tag" won't copy those. The technique below is adopted from here:
|
|
# https://github.com/docker/buildx/issues/459#issuecomment-750011371
|
|
local image="$1"
|
|
local hashes=($(docker manifest inspect "${image}:${version}" |
|
|
jq --raw-output '.manifests[].digest'))
|
|
time docker manifest rm "${image}:latest" || true
|
|
time docker manifest create \
|
|
"${image}:latest" \
|
|
"${hashes[@]/#/${image}@}"
|
|
time docker manifest push "${image}:latest"
|
|
}
|
|
|
|
build_and_push() {
|
|
local image="$1"
|
|
local target="$2"
|
|
time docker buildx build \
|
|
--push \
|
|
--tag="${image}:${version}" \
|
|
--target="${target}" \
|
|
--platform=linux/amd64,linux/arm64/v8,linux/arm/v7 \
|
|
-f docker/Dockerfile .
|
|
}
|
|
|
|
version="$(git describe --dirty)"
|
|
if [[ ! "${version}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo "Expected a vX.Y.Z version tag, got ${version}." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -n "$(git status --porcelain)" ]]; then
|
|
echo "git status says there's extra stuff in this directory." >&2
|
|
exit 1
|
|
fi
|
|
|
|
build_and_push scottlamb/moonfire-nvr deploy
|
|
build_and_push scottlamb/moonfire-dev dev
|
|
set_latest scottlamb/moonfire-nvr
|
|
set_latest scottlamb/moonfire-dev
|