Source licenses, attribution, provenance, and font notices from the pinned game checkout while retaining installer compatibility with earlier manifest formats.
113 lines
3.7 KiB
Bash
Executable file
113 lines
3.7 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 \
|
|
ATTRIBUTION.md \
|
|
TRADEMARKS.md \
|
|
Tuffy-LICENSE.txt \
|
|
Seattle-Avenue-LICENSE.txt; 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
|
|
if ! grep -Fxq "manifest_version=3" "${dist_dir}/BUILD_INFO"; then
|
|
echo "Staged BUILD_INFO does not use the current manifest format." >&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 \
|
|
ATTRIBUTION.md \
|
|
TRADEMARKS.md \
|
|
Tuffy-LICENSE.txt \
|
|
Seattle-Avenue-LICENSE.txt; 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}"
|