mirror of https://github.com/coder/coder.git
101 lines
2.3 KiB
Bash
Executable File
101 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script creates a Linux package for the given binary.
|
|
#
|
|
# ./package.sh --arch amd64 --format "(apk|deb|rpm)" --output "path/to/coder.apk" [--version 1.2.3] path/to/coder
|
|
#
|
|
# If no version is specified, defaults to the version from ./version.sh.
|
|
|
|
set -euo pipefail
|
|
# shellcheck source=scripts/lib.sh
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
|
|
|
|
arch=""
|
|
format=""
|
|
output_path=""
|
|
version=""
|
|
|
|
args="$(getopt -o "" -l arch:,format:,output:,version: -- "$@")"
|
|
eval set -- "$args"
|
|
while true; do
|
|
case "$1" in
|
|
--arch)
|
|
arch="$2"
|
|
shift 2
|
|
;;
|
|
--format)
|
|
format="$2"
|
|
shift 2
|
|
;;
|
|
--output)
|
|
mkdir -p "$(dirname "$2")"
|
|
output_path="$(realpath "$2")"
|
|
shift 2
|
|
;;
|
|
--version)
|
|
version="$2"
|
|
shift 2
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
*)
|
|
error "Unrecognized option: $1"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ "$arch" == "" ]]; then
|
|
error "--arch is a required parameter"
|
|
fi
|
|
if [[ "$format" != "apk" ]] && [[ "$format" != "deb" ]] && [[ "$format" != "rpm" ]]; then
|
|
error "--format is a required parameter and must be one of 'apk', 'deb', or 'rpm'"
|
|
fi
|
|
if [[ "$output_path" == "" ]]; then
|
|
error "--output is a required parameter"
|
|
fi
|
|
|
|
if [[ "$#" != 1 ]]; then
|
|
error "Exactly one argument must be provided to this script, $# were supplied"
|
|
fi
|
|
if [[ ! -f "$1" ]]; then
|
|
error "File '$1' does not exist or is not a regular file"
|
|
fi
|
|
input_file="$(realpath "$1")"
|
|
|
|
# Check dependencies
|
|
dependencies nfpm
|
|
|
|
# Remove the "v" prefix.
|
|
version="${version#v}"
|
|
if [[ "$version" == "" ]]; then
|
|
version="$(execrelative ./version.sh)"
|
|
fi
|
|
|
|
# armv7 isn't a real architecture, so we need to remap it to armhf.
|
|
if [[ "$arch" == "arm" ]] || [[ "$arch" == "armv7" ]]; then
|
|
arch="armhf"
|
|
fi
|
|
|
|
# Make temporary dir where all source files intended to be in the package will
|
|
# be hardlinked to.
|
|
cdroot
|
|
temp_dir="$(TMPDIR="$(dirname "$input_file")" mktemp -d)"
|
|
ln "$input_file" "$temp_dir/coder"
|
|
ln "$(realpath coder.env)" "$temp_dir/"
|
|
ln "$(realpath scripts/linux-pkg/coder-workspace-proxy.service)" "$temp_dir/"
|
|
ln "$(realpath scripts/linux-pkg/coder.service)" "$temp_dir/"
|
|
ln "$(realpath scripts/linux-pkg/nfpm.yaml)" "$temp_dir/"
|
|
ln "$(realpath scripts/linux-pkg/preinstall.sh)" "$temp_dir/"
|
|
|
|
pushd "$temp_dir"
|
|
GOARCH="$arch" CODER_VERSION="$version" nfpm package \
|
|
-f nfpm.yaml \
|
|
-p "$format" \
|
|
-t "$output_path" \
|
|
1>&2
|
|
popd
|
|
|
|
rm -rf "$temp_dir"
|