107 lines
3.4 KiB
Bash
Executable file
107 lines
3.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [[ $# -ne 1 || -z "$1" ]]; then
|
|
echo "Usage: $0 VERSION" >&2
|
|
exit 2
|
|
fi
|
|
|
|
version="$1"
|
|
if [[ ! "${version}" =~ ^[A-Za-z0-9][A-Za-z0-9._-]*$ ]]; then
|
|
echo "VERSION must contain only letters, numbers, dots, underscores, or hyphens." >&2
|
|
exit 2
|
|
fi
|
|
repository_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
dist_dir="${repository_dir}/dist"
|
|
packages_dir="${repository_dir}/packages"
|
|
package_name="netfishing-dedicated-server-${version}-linux-x86_64"
|
|
staging_dir="$(mktemp -d)"
|
|
trap 'rm -rf -- "${staging_dir}"' EXIT
|
|
|
|
if ! git -C "${repository_dir}" diff --quiet \
|
|
|| ! git -C "${repository_dir}" diff --cached --quiet; then
|
|
echo "Commit dedicated packaging changes before creating a release." >&2
|
|
exit 1
|
|
fi
|
|
|
|
for filename in \
|
|
NETfishingServer.x86_64 \
|
|
NETfishingServer.pck \
|
|
BUILD_INFO \
|
|
SOURCE-CODE.md \
|
|
SHA256SUMS; do
|
|
if [[ ! -f "${dist_dir}/${filename}" ]]; then
|
|
echo "Run scripts/stage-build.sh before packaging." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
for filename in \
|
|
GPL-3.0-or-later.txt \
|
|
ASSET-LICENSE.md \
|
|
THIRD-PARTY-NOTICES.md \
|
|
TRADEMARKS.md \
|
|
CREDITS.md; do
|
|
if [[ ! -f "${dist_dir}/licenses/${filename}" ]]; then
|
|
echo "Staged build is missing licenses/${filename}." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
if ! grep -Fxq "game_version=${version}" "${dist_dir}/BUILD_INFO"; then
|
|
echo "Staged BUILD_INFO does not match package version ${version}." >&2
|
|
exit 1
|
|
fi
|
|
packaging_commit="$(
|
|
awk -F= '$1 == "packaging_commit" {print tolower($2); exit}' \
|
|
"${dist_dir}/BUILD_INFO"
|
|
)"
|
|
current_packaging_commit="$(git -C "${repository_dir}" rev-parse HEAD)"
|
|
if [[ "${packaging_commit}" != "${current_packaging_commit}" ]]; then
|
|
echo "Staged BUILD_INFO does not match the current packaging commit." >&2
|
|
exit 1
|
|
fi
|
|
release_tag="v${version}"
|
|
if ! release_commit="$(
|
|
git -C "${repository_dir}" rev-parse --verify "refs/tags/${release_tag}^{commit}"
|
|
)"; then
|
|
echo "Dedicated packaging tag ${release_tag} does not exist." >&2
|
|
exit 1
|
|
fi
|
|
if [[ "${release_commit}" != "${current_packaging_commit}" ]]; then
|
|
echo "Dedicated packaging tag ${release_tag} does not point to HEAD." >&2
|
|
exit 1
|
|
fi
|
|
(cd -- "${dist_dir}" && sha256sum -c SHA256SUMS)
|
|
|
|
install -d "${staging_dir}/${package_name}"
|
|
install -m 0755 "${dist_dir}/NETfishingServer.x86_64" \
|
|
"${staging_dir}/${package_name}/NETfishingServer.x86_64"
|
|
install -m 0644 "${dist_dir}/NETfishingServer.pck" \
|
|
"${staging_dir}/${package_name}/NETfishingServer.pck"
|
|
install -m 0644 "${dist_dir}/BUILD_INFO" \
|
|
"${staging_dir}/${package_name}/BUILD_INFO"
|
|
install -m 0644 "${dist_dir}/SHA256SUMS" \
|
|
"${staging_dir}/${package_name}/SHA256SUMS"
|
|
install -m 0644 "${dist_dir}/SOURCE-CODE.md" \
|
|
"${staging_dir}/${package_name}/SOURCE-CODE.md"
|
|
install -m 0644 "${repository_dir}/config/server.cfg.example" \
|
|
"${staging_dir}/${package_name}/server.cfg"
|
|
install -m 0644 "${repository_dir}/README.md" \
|
|
"${staging_dir}/${package_name}/README.md"
|
|
install -d "${staging_dir}/${package_name}/licenses"
|
|
for filename in \
|
|
GPL-3.0-or-later.txt \
|
|
ASSET-LICENSE.md \
|
|
THIRD-PARTY-NOTICES.md \
|
|
TRADEMARKS.md \
|
|
CREDITS.md; do
|
|
install -m 0644 "${dist_dir}/licenses/${filename}" \
|
|
"${staging_dir}/${package_name}/licenses/${filename}"
|
|
done
|
|
|
|
mkdir -p -- "${packages_dir}"
|
|
archive="${packages_dir}/${package_name}.tar.gz"
|
|
tar --sort=name --mtime=@0 --owner=0 --group=0 --numeric-owner \
|
|
-C "${staging_dir}" -czf "${archive}" "${package_name}"
|
|
cd -- "${packages_dir}"
|
|
sha256sum "${package_name}.tar.gz" > "${package_name}.tar.gz.sha256"
|
|
echo "Created ${archive}"
|