#!/usr/bin/env python3 """Publish built artifacts through the existing html_plans Caddy site.""" from pathlib import Path import html import os import shutil import sys version=sys.argv[1] if len(sys.argv)>1 else '0.1.0' if not version.replace('.','').replace('-','').isalnum():raise SystemExit('Invalid version') root=Path(__file__).resolve().parent.parent source=root/'dist';dest=Path('/opt/public-downloads/wswg')/version if not (source/'wswg-all.zip').exists():raise SystemExit('Run scripts/build.sh first') rows=[] for archive in sorted(source.glob('wswg-*.zip')): if archive.name=='wswg-all.zip':continue folder=archive.stem exe='wswg.exe' if 'windows' in folder else 'wswg' rows.append(f'
WireGuard + wstunnel. Простой GUI в локальном браузере и TUI.
Все платформы одним ZIP · SHA256SUMS · Инструкция
| Платформа | Скачать | Размер | Бинарник отдельно |
|---|
Для обычной установки скачайте ZIP и распакуйте целиком. Папки bin и redist должны остаться рядом с программой.
./wswg -t · ./wswg -a · ./wswg -c 1 -d --no-wstunnel
Linux и Termux требуют root и ядро с WireGuard. Windows требует Administrator. Windows ARM32 не поддерживается. Системные требования и настройка DNS описаны в инструкции.
' (source/'index.html').write_text(page) shutil.copy2(root/'README.md',source/'README.md') shutil.copy2(root/'VALIDATION.md',source/'VALIDATION.md') shutil.copytree(source,dest,dirs_exist_ok=True) shared=Path('/opt/html_plans');shared.mkdir(exist_ok=True) link=shared/'wswg-builds' if link.exists() and not link.is_symlink():raise SystemExit(f'Refusing to replace {link}: it is not a symlink') temp=shared/'.wswg-builds-new' if temp.is_symlink():temp.unlink() temp.symlink_to(dest,target_is_directory=True);os.replace(temp,link) print('http://html_plans.t.snw.su/wswg-builds/')