115 lines
4.1 KiB
Shell
115 lines
4.1 KiB
Shell
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
repo_root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
|
version=${1:-}
|
|
|
|
if [[ ! "$version" =~ ^v[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then
|
|
echo "Использование: $0 vX.Y.Z" >&2
|
|
exit 2
|
|
fi
|
|
|
|
dist_dir="$repo_root/dist"
|
|
if [[ "$dist_dir" != "$repo_root/dist" || "$dist_dir" == "/dist" ]]; then
|
|
echo "Небезопасный путь каталога сборки: $dist_dir" >&2
|
|
exit 2
|
|
fi
|
|
|
|
temp_root=$(mktemp -d "${TMPDIR:-/tmp}/zapret2-release.XXXXXXXX")
|
|
trap 'rm -rf -- "$temp_root"' EXIT
|
|
stage_dir="$temp_root/stage"
|
|
tools_dir="$temp_root/tools"
|
|
verify_dir="$temp_root/verify"
|
|
mkdir -p "$stage_dir" "$tools_dir" "$verify_dir"
|
|
|
|
while IFS= read -r -d '' relative; do
|
|
case "$relative" in
|
|
.forgejo/*|.github/*|scripts/*|.gitattributes|.gitignore)
|
|
continue
|
|
;;
|
|
esac
|
|
mkdir -p "$stage_dir/$(dirname -- "$relative")"
|
|
cp -p -- "$repo_root/$relative" "$stage_dir/$relative"
|
|
done < <(git -C "$repo_root" ls-files -z)
|
|
|
|
# Windows-скрипты и списки должны иметь CRLF независимо от настроек checkout.
|
|
python3 - "$stage_dir" <<'PY'
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
root = Path(sys.argv[1])
|
|
suffixes = {".bat", ".cmd", ".lua", ".md", ".ps1", ".txt", ".vbs"}
|
|
for path in root.rglob("*"):
|
|
if not path.is_file() or path.suffix.lower() not in suffixes:
|
|
continue
|
|
data = path.read_bytes().replace(b"\r\n", b"\n").replace(b"\r", b"\n")
|
|
path.write_bytes(data.replace(b"\n", b"\r\n"))
|
|
PY
|
|
|
|
source_date_epoch=${SOURCE_DATE_EPOCH:-$(git -C "$repo_root" show -s --format=%ct HEAD)}
|
|
find "$stage_dir" -exec touch -d "@$source_date_epoch" -- {} +
|
|
|
|
sevenzip_version=26.02
|
|
sevenzip_linux_url="https://github.com/ip7z/7zip/releases/download/${sevenzip_version}/7z2602-linux-x64.tar.xz"
|
|
sevenzip_sdk_url="https://github.com/ip7z/7zip/releases/download/${sevenzip_version}/lzma2602.7z"
|
|
sevenzip_linux_sha256=41aaba7b1235304ab5aa0624530c67ae829496cd29e875925271efdccc28c03e
|
|
sevenzip_sdk_sha256=2878c85f5f43a4a4e0952b1fd4e5fe097c1c143997a8047c7e1e788892aa9357
|
|
|
|
curl --fail --location --retry 3 --silent --show-error \
|
|
--output "$tools_dir/7z-linux.tar.xz" "$sevenzip_linux_url"
|
|
curl --fail --location --retry 3 --silent --show-error \
|
|
--output "$tools_dir/lzma-sdk.7z" "$sevenzip_sdk_url"
|
|
|
|
printf '%s %s\n' "$sevenzip_linux_sha256" "$tools_dir/7z-linux.tar.xz" | sha256sum --check --status
|
|
printf '%s %s\n' "$sevenzip_sdk_sha256" "$tools_dir/lzma-sdk.7z" | sha256sum --check --status
|
|
|
|
tar -xJf "$tools_dir/7z-linux.tar.xz" -C "$tools_dir"
|
|
chmod +x "$tools_dir/7zz"
|
|
"$tools_dir/7zz" x -y -o"$tools_dir/sdk" "$tools_dir/lzma-sdk.7z" bin/7zSD.sfx >/dev/null
|
|
|
|
archive_name="zapret2-youtube-discord-${version}"
|
|
archive_path="$temp_root/$archive_name.7z"
|
|
sfx_path="$temp_root/$archive_name.exe"
|
|
|
|
(
|
|
cd "$stage_dir"
|
|
"$tools_dir/7zz" a -t7z -mx=9 -mmt=on "$archive_path" ./* >/dev/null
|
|
)
|
|
|
|
python3 - "$temp_root/sfx-config.txt" "$version" "$archive_name" <<'PY'
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
config_path, version, archive_name = sys.argv[1:]
|
|
config = f''' ;!@Install@!UTF-8!
|
|
Title="Zapret2 YouTube Discord {version}"
|
|
BeginPrompt="Распаковать Zapret2 YouTube Discord {version}?"
|
|
ExtractPathText="Папка для распаковки:"
|
|
ExtractPathDefault="%USERPROFILE%\\Desktop\\{archive_name}"
|
|
ExtractDialogText="Распаковка Zapret2..."
|
|
;!@InstallEnd@!
|
|
'''.lstrip()
|
|
Path(config_path).write_bytes(config.encode("utf-8"))
|
|
PY
|
|
|
|
cat "$tools_dir/sdk/bin/7zSD.sfx" "$temp_root/sfx-config.txt" "$archive_path" > "$sfx_path"
|
|
chmod 0644 "$archive_path" "$sfx_path"
|
|
|
|
"$tools_dir/7zz" t "$archive_path" >/dev/null
|
|
"$tools_dir/7zz" t "$sfx_path" >/dev/null
|
|
"$tools_dir/7zz" x -y -o"$verify_dir" "$sfx_path" >/dev/null
|
|
diff -qr "$stage_dir" "$verify_dir" >/dev/null
|
|
|
|
rm -rf -- "$dist_dir"
|
|
mkdir -p "$dist_dir"
|
|
mv "$archive_path" "$sfx_path" "$dist_dir/"
|
|
(
|
|
cd "$dist_dir"
|
|
sha256sum "$archive_name.7z" "$archive_name.exe" > SHA256SUMS.txt
|
|
sha256sum --check --status SHA256SUMS.txt
|
|
)
|
|
chmod 0644 "$dist_dir/SHA256SUMS.txt"
|
|
|
|
echo "Сборка завершена:"
|
|
ls -lh "$dist_dir/$archive_name.7z" "$dist_dir/$archive_name.exe" "$dist_dir/SHA256SUMS.txt"
|
|
cat "$dist_dir/SHA256SUMS.txt"
|