diff --git a/$remote b/$remote new file mode 100644 index 0000000..3840320 --- /dev/null +++ b/$remote @@ -0,0 +1,27 @@ +Split-Path : Cannot bind argument to parameter 'Path' because it is null. +At line:1 char:177 ++ ... ; $EXT_DIR = Split-Path -Parent $MyInvocation.MyCommand.Path; $manif ... ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo : InvalidData: (:) [Split-Path], ParameterBindingValidationException + + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SplitPathCo + mmand + +Join-Path : Cannot bind argument to parameter 'Path' because it is null. +At line:1 char:242 ++ ... n.MyCommand.Path; $manifest = Get-Content (Join-Path $EXT_DIR 'manife ... ++ ~~~~~~~~ + + CategoryInfo : InvalidData: (:) [Join-Path], ParameterBindingValidationException + + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCom + mand + +Local: Remote: 2.7 +[INFO] Updating - ... +Expand-Archive : Cannot validate argument on parameter 'DestinationPath'. The argument is null or empty. Provide an arg +ument that is not null or empty, and then try the command again. +At line:1 char:756 ++ ... OutFile $tmp; Expand-Archive $tmp -DestinationPath $EXT_DIR -Force; ... ++ ~~~~~~~~ + + CategoryInfo : InvalidData: (:) [Expand-Archive], ParameterBindingValidationException + + FullyQualifiedErrorId : ParameterArgumentValidationError,Expand-Archive + +[OK] Done. Reload extension in chrome://extensions diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..f5ed0a8 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,289 @@ +# Деплой CAPS Enhancer — Self-Hosted Auto-Update + +## Как это работает + +``` +[Сервер] [Браузер пользователя] + update.xml <── Chrome опрашивает каждые ~5 часов + caps-enhancer.crx <── Chrome скачивает при новой версии +``` + +Chrome сравнивает `version` в `update.xml` с версией установленного расширения. +Если версия на сервере выше — скачивает `.crx` и устанавливает обновление автоматически. + +Пользователь устанавливает расширение **один раз** через реестр Windows — дальше всё автоматически. + +--- + +## Часть 1: Первоначальная упаковка (делается один раз) + +### Шаг 1. Прописать URL обновления в manifest.json + +Открой `manifest.json` и замени `YOUR_DOMAIN` на реальный домен: + +```json +"update_url": "https://updates.example.com/caps-enhancer/update.xml", +``` + +### Шаг 2. Упаковать расширение в .crx + +**Способ A — через bat-скрипт (рекомендуется):** + +Запусти `pack-crx.bat` из папки проекта. Скрипт сам найдёт Chrome и упакует расширение. + +**Способ B — вручную через Chrome:** + +1. Открой `chrome://extensions` +2. Включи "Режим разработчика" (правый верхний угол) +3. Нажми "Упаковать расширение" +4. В поле "Корневой каталог расширения" укажи папку `caps-enhancer` +5. Поле "Файл закрытого ключа" оставь пустым при первой упаковке +6. Нажми "Упаковать расширение" + +Chrome создаст два файла **в папке рядом с `caps-enhancer`**: +- `caps-enhancer.crx` — файл расширения +- `caps-enhancer.pem` — приватный ключ + +> **КРИТИЧНО:** Сохрани `caps-enhancer.pem` в надёжное место! +> Этот ключ определяет ID расширения. Если потеряешь — ID изменится, +> и все установленные у пользователей копии придётся переустанавливать вручную. + +### Шаг 3. Узнать ID расширения + +**После первой упаковки:** + +1. Открой `chrome://extensions` +2. Нажми "Загрузить распакованное расширение" → выбери папку `caps-enhancer` +3. Скопируй ID расширения (длинная строка из 32 символов, например `abcdefghijklmnopqrstuvwxyzabcdef`) + +**Или через файл ключа (если Chrome уже закрыт):** + +```bash +# На Linux/Mac: +openssl rsa -in caps-enhancer.pem -pubout | openssl dgst -sha256 -binary | base32 | head -c 32 | tr '[:upper:]' '[:lower:]' +``` + +### Шаг 4. Обновить update.xml + +Открой `server/update.xml` и замени: +- `EXTENSION_ID` — ID из предыдущего шага +- `YOUR_DOMAIN` — твой домен +- `version` — текущая версия (из manifest.json) + +```xml + + + + + +``` + +--- + +## Часть 2: Настройка сервера + +### Требования к серверу + +- Любой веб-сервер (nginx, Apache, Caddy, даже GitHub Pages) +- **HTTPS обязателен** — Chrome отказывается скачивать `.crx` по HTTP +- Корректные MIME-типы (см. ниже) + +### Вариант A: nginx + +Скопируй `server/nginx.conf` на сервер и замени `YOUR_DOMAIN`: + +```bash +sudo cp server/nginx.conf /etc/nginx/sites-available/caps-enhancer +sudo ln -s /etc/nginx/sites-available/caps-enhancer /etc/nginx/sites-enabled/ +sudo nginx -t && sudo systemctl reload nginx +``` + +Структура файлов на сервере: +``` +/var/www/caps-enhancer/ +└── caps-enhancer/ + ├── update.xml + └── caps-enhancer.crx +``` + +### Вариант B: Apache + +Добавь в `.htaccess` или конфиг: + +```apache + + AddType application/x-chrome-extension .crx + AddType application/xml .xml + + + Header set Cache-Control "no-cache, no-store, must-revalidate" + Header set Pragma "no-cache" + Header set Expires 0 + + +``` + +### Вариант C: Caddy (самый простой, HTTPS автоматически) + +``` +updates.example.com { + root * /var/www/caps-enhancer + file_server + + @xml path *.xml + header @xml Cache-Control "no-cache, no-store, must-revalidate" +} +``` + +### Вариант D: GitHub Pages / любой статический хостинг + +Положи `update.xml` и `caps-enhancer.crx` в репозиторий. +GitHub Pages раздаёт файлы по HTTPS автоматически. + +> Убедись что хостинг отдаёт `.crx` с типом `application/x-chrome-extension` +> или `application/octet-stream`. GitHub Pages обычно справляется. + +### Загрузка файлов на сервер + +```bash +# С локальной машины через scp +scp server/caps-enhancer.crx server/update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/ + +# Или через rsync +rsync -av server/caps-enhancer.crx server/update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/ +``` + +### Проверка сервера + +После загрузки проверь: + +```bash +# update.xml должен вернуть XML с версией +curl -I https://updates.example.com/caps-enhancer/update.xml + +# .crx должен вернуть 200 и Content-Type: application/x-chrome-extension +curl -I https://updates.example.com/caps-enhancer/caps-enhancer.crx +``` + +--- + +## Часть 3: Установка на компьютеры пользователей + +Chrome не позволяет устанавливать сторонние расширения вручную через stable-канал. +Единственный способ — через **Windows Policy (реестр)**. + +### Способ A: .reg файл (для ручной установки) + +1. Открой `server/install-client.reg` +2. Замени `EXTENSION_ID` и `YOUR_DOMAIN` +3. Дай пользователю этот файл +4. Пользователь дважды кликает на `.reg` → соглашается → перезапускает Chrome + +```reg +[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist] +"1"="abcdefghijklmnopqrstuvwxyzabcdef;https://updates.example.com/caps-enhancer/update.xml" +``` + +> Требует прав администратора (HKLM). +> Для установки без прав — использовать HKCU (только для текущего пользователя). + +### Способ B: PowerShell скрипт + +Отредактируй `server/install-client.ps1` (замени ID и домен), запусти от имени администратора: + +```powershell +# Запуск от имени администратора: +Start-Process powershell -Verb RunAs -ArgumentList "-File C:\path\to\install-client.ps1" +``` + +### Способ C: Групповые политики (GPO) — для домена + +1. Открой **Group Policy Management Console** (gpmc.msc) +2. Создай или отредактируй GPO +3. Перейди: `Computer Configuration` → `Administrative Templates` → `Google` → `Google Chrome` → `Extensions` +4. Включи политику **"Configure the list of force-installed apps and extensions"** +5. Добавь строку: `abcdefghijklmnopqrstuvwxyzabcdef;https://updates.example.com/caps-enhancer/update.xml` + +> Если шаблонов Google нет — скачай ADMX: https://chromeenterprise.google/intl/ru/browser/download/ + +### Что видит пользователь после установки + +- Chrome автоматически устанавливает расширение при следующем запуске +- Иконка появляется в панели расширений +- Пользователь **не может удалить** принудительно установленное расширение (managed) + +--- + +## Часть 4: Выпуск обновления + +При каждом обновлении расширения: + +### 1. Обнови версию в manifest.json + +```json +"version": "2.8" +``` + +### 2. Упакуй расширение с тем же ключом + +Запусти `pack-crx.bat` — скрипт автоматически использует существующий `caps-enhancer.pem`. + +### 3. Обнови update.xml + +```xml + +``` + +### 4. Загрузи на сервер + +```bash +scp caps-enhancer.crx update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/ +``` + +### 5. Готово + +Chrome проверяет обновления примерно каждые **5 часов** в фоне. +Обновление применяется при следующем перезапуске браузера (или при перезагрузке расширения). + +Форсировать проверку обновлений вручную можно в `chrome://extensions` → "Обновить расширения". + +--- + +## Итоговая структура файлов + +``` +caps-enhancer/ +├── manifest.json ← update_url прописан +├── pack-crx.bat ← запускать для упаковки +├── caps-enhancer.pem ← ХРАНИТЬ В БЕЗОПАСНОМ МЕСТЕ (создаётся при первой упаковке) +├── DEPLOY.md ← эта инструкция +├── ...остальные файлы расширения... +└── server/ + ├── update.xml ← загружать на сервер при каждом обновлении + ├── caps-enhancer.crx ← загружать на сервер при каждом обновлении + ├── nginx.conf ← конфиг для nginx (один раз) + ├── deploy.sh ← скрипт деплоя на сервере + ├── install-client.reg ← раздать пользователям для установки + └── install-client.ps1 ← альтернатива .reg файлу +``` + +--- + +## Troubleshooting + +| Проблема | Причина | Решение | +|----------|---------|---------| +| Chrome не устанавливает расширение | Нет ключа реестра | Проверь `HKLM\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist` | +| "Extension not from Chrome Web Store" | Расширение установлено не через policy | Используй реестр, не ручную установку | +| Обновление не прилетает | update.xml закэширован или неверный ID | Очисти кэш, проверь EXTENSION_ID в update.xml | +| Chrome отказывается качать .crx | HTTP вместо HTTPS | Настрой SSL на сервере | +| .crx не скачивается | Неверный MIME-тип | Добавь `application/x-chrome-extension` для `.crx` | +| ID расширения изменился | Потерян .pem файл | Перераспространить .reg с новым ID | diff --git a/auto-update.bat b/auto-update.bat new file mode 100644 index 0000000..c09cfaf --- /dev/null +++ b/auto-update.bat @@ -0,0 +1,41 @@ +@echo off +setlocal + +set VERSION_URL=https://git.ihateamerica.ru/caps_enhancer/version.json +set ZIP_URL=https://git.ihateamerica.ru/caps_enhancer/caps-enhancer.zip +set EXT_DIR=%~dp0 + +:: Читаем локальную версию из manifest.json +for /f "delims=" %%v in ('powershell -NoProfile -Command "(Get-Content '%EXT_DIR%manifest.json' | ConvertFrom-Json).version"') do set LOCAL_VER=%%v + +:: Читаем удалённую версию +for /f "delims=" %%v in ('curl -sf "%VERSION_URL%"') do set REMOTE_JSON=%%v +for /f "delims=" %%v in ('powershell -NoProfile -Command "'%REMOTE_JSON%' | ConvertFrom-Json | Select-Object -ExpandProperty version"') do set REMOTE_VER=%%v + +if not defined REMOTE_VER ( + echo [ОШИБКА] Не удалось получить версию с сервера. + goto :end +) + +if "%LOCAL_VER%"=="%REMOTE_VER%" ( + echo [OK] Версия актуальная: %LOCAL_VER% + goto :end +) + +echo [INFO] Обновление: %LOCAL_VER% --^> %REMOTE_VER% + +set TMP_ZIP=%TEMP%\caps-enhancer-update.zip +curl -f "%ZIP_URL%" -o "%TMP_ZIP%" +if errorlevel 1 ( + echo [ОШИБКА] Не удалось скачать ZIP. + goto :end +) + +tar -xf "%TMP_ZIP%" -C "%EXT_DIR%" --overwrite +del "%TMP_ZIP%" + +echo [OK] Обновлено до версии %REMOTE_VER%. Перезагрузи расширение в Chrome. + +:end +endlocal +pause diff --git a/js/background.js b/js/background.js new file mode 100644 index 0000000..0430802 --- /dev/null +++ b/js/background.js @@ -0,0 +1,47 @@ +// Фоновый service worker — проверка обновлений расширения +// Работает только в режиме "Load unpacked" (Developer Mode) + +const VERSION_URL = 'https://git.ihateamerica.ru/caps_enhancer/version.json'; +const CHECK_INTERVAL_MINUTES = 60; + +chrome.runtime.onInstalled.addListener(() => { + chrome.alarms.create('updateCheck', { + delayInMinutes: 1, + periodInMinutes: CHECK_INTERVAL_MINUTES + }); +}); + +chrome.alarms.onAlarm.addListener((alarm) => { + if (alarm.name === 'updateCheck') { + checkForUpdates(); + } +}); + +async function checkForUpdates() { + try { + const res = await fetch(VERSION_URL + '?t=' + Date.now()); + if (!res.ok) return; + + const { version: remote } = await res.json(); + const local = chrome.runtime.getManifest().version; + + if (isNewer(remote, local)) { + console.log(`[CAPS Enhancer] Обновление: ${local} → ${remote}. Перезагружаю...`); + // Небольшая задержка — дать scheduled task время распаковать файлы + await new Promise(r => setTimeout(r, 3000)); + chrome.runtime.reload(); + } + } catch { + // Нет соединения или сервер недоступен — молча игнорируем + } +} + +function isNewer(remote, local) { + const r = remote.split('.').map(Number); + const l = local.split('.').map(Number); + for (let i = 0; i < Math.max(r.length, l.length); i++) { + if ((r[i] || 0) > (l[i] || 0)) return true; + if ((r[i] || 0) < (l[i] || 0)) return false; + } + return false; +} diff --git a/manifest.json b/manifest.json index bd160c9..5676255 100644 --- a/manifest.json +++ b/manifest.json @@ -3,12 +3,16 @@ "name": "CAPS Enhancer", "version": "2.7", "description": "Добавляет всякие фичи для УТП в CAPS", + "update_url": "https://git.ihateamerica.ru/caps_enhancer/update.xml", "icons": { "16": "icons/icon16.png", "48": "icons/icon48.png", "128": "icons/icon128.png" }, - "permissions": ["activeTab", "storage", "tabs"], + "background": { + "service_worker": "js/background.js" + }, + "permissions": ["activeTab", "storage", "tabs", "alarms"], "host_permissions": [""], "action": { "default_popup": "popup.html", diff --git a/pack-crx.bat b/pack-crx.bat new file mode 100644 index 0000000..1adb949 --- /dev/null +++ b/pack-crx.bat @@ -0,0 +1,46 @@ +@echo off +:: Скрипт упаковки расширения в .crx +:: Запускать из папки caps-enhancer +:: Требует: Google Chrome установлен + +setlocal + +:: Путь к Chrome (проверяем оба варианта) +set CHROME="C:\Program Files\Google\Chrome\Application\chrome.exe" +if not exist %CHROME% set CHROME="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" + +:: Текущая директория (где лежит manifest.json) +set EXT_DIR=%~dp0 + +:: Файл ключа (генерируется при первой упаковке, сохранять!) +set KEY_FILE=%~dp0caps-enhancer.pem + +echo === CAPS Enhancer - Упаковка расширения === +echo. + +if exist %KEY_FILE% ( + echo [INFO] Используется существующий ключ: %KEY_FILE% + %CHROME% --pack-extension="%EXT_DIR%" --pack-extension-key="%KEY_FILE%" --no-message-box +) else ( + echo [INFO] Ключ не найден. Будет создан новый ключ. + echo [WARN] ПЕРВЫЙ РАЗ: сохраните caps-enhancer.pem - он нужен для всех обновлений! + %CHROME% --pack-extension="%EXT_DIR%" --no-message-box +) + +echo. +if exist "%~dp0..\caps-enhancer.crx" ( + copy "%~dp0..\caps-enhancer.crx" "%~dp0server\caps-enhancer.crx" >nul + echo [OK] caps-enhancer.crx скопирован в server\ +) else ( + echo [WARN] .crx не найден. Chrome мог создать его на уровень выше. + echo Проверьте папку рядом с caps-enhancer\ +) + +echo. +echo === Готово! === +echo Следующие шаги: +echo 1. Проверь ID расширения в chrome://extensions +echo 2. Обнови server\update.xml (EXTENSION_ID и version) +echo 3. Загрузи server\caps-enhancer.crx и server\update.xml на сервер +echo. +pause diff --git a/server/caps-enhancer.zip b/server/caps-enhancer.zip new file mode 100644 index 0000000..74b91e9 Binary files /dev/null and b/server/caps-enhancer.zip differ diff --git a/server/deploy.sh b/server/deploy.sh new file mode 100644 index 0000000..0c31156 --- /dev/null +++ b/server/deploy.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# Скрипт деплоя на сервер. +# Запускать на сервере после загрузки новых файлов. +# Использование: ./deploy.sh + +set -e + +DEPLOY_DIR="/var/www/caps-enhancer/caps-enhancer" +CRX_FILE="caps-enhancer.crx" +UPDATE_XML="update.xml" + +echo "=== CAPS Enhancer Deploy ===" + +# Создаём директорию если не существует +mkdir -p "$DEPLOY_DIR" + +# Копируем файлы (запускать из папки где лежат .crx и update.xml) +if [ -f "$CRX_FILE" ]; then + cp "$CRX_FILE" "$DEPLOY_DIR/" + echo "[OK] $CRX_FILE скопирован" +else + echo "[WARN] $CRX_FILE не найден в текущей директории" +fi + +if [ -f "$UPDATE_XML" ]; then + cp "$UPDATE_XML" "$DEPLOY_DIR/" + echo "[OK] $UPDATE_XML скопирован" +else + echo "[WARN] $UPDATE_XML не найден в текущей директории" +fi + +# Права доступа +chown -R www-data:www-data "$DEPLOY_DIR" +chmod -R 755 "$DEPLOY_DIR" +echo "[OK] Права выставлены" + +echo "=== Деплой завершён ===" +echo "Проверь: https://YOUR_DOMAIN/caps-enhancer/update.xml" diff --git a/server/install-client.ps1 b/server/install-client.ps1 new file mode 100644 index 0000000..3708ccc --- /dev/null +++ b/server/install-client.ps1 @@ -0,0 +1,38 @@ +# Скрипт установки расширения через PowerShell (альтернатива .reg файлу) +# Запускать с правами администратора: +# Right Click -> "Запустить от имени администратора" +# или: Start-Process powershell -Verb RunAs -ArgumentList "-File install-client.ps1" + +param( + [string]$ExtensionId = "EXTENSION_ID", + [string]$UpdateUrl = "https://YOUR_DOMAIN/caps-enhancer/update.xml" +) + +$registryPath = "HKLM:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist" +$value = "$ExtensionId;$UpdateUrl" + +# Создаём ключ если не существует +if (-not (Test-Path $registryPath)) { + New-Item -Path $registryPath -Force | Out-Null + Write-Host "[OK] Создан ключ реестра: $registryPath" +} + +# Ищем свободный номер (1, 2, 3, ...) +$index = 1 +while (Get-ItemProperty -Path $registryPath -Name "$index" -ErrorAction SilentlyContinue) { + # Проверяем, вдруг расширение уже добавлено + $existing = (Get-ItemProperty -Path $registryPath -Name "$index")."$index" + if ($existing -like "$ExtensionId;*") { + Write-Host "[INFO] Расширение уже установлено (запись $index)." + Write-Host " Значение: $existing" + exit 0 + } + $index++ +} + +Set-ItemProperty -Path $registryPath -Name "$index" -Value $value -Type String +Write-Host "[OK] Расширение добавлено в реестр (запись $index):" +Write-Host " $value" +Write-Host "" +Write-Host "Chrome автоматически установит расширение при следующем запуске." +Write-Host "Если Chrome уже открыт — перезапустите его." diff --git a/server/install-client.reg b/server/install-client.reg new file mode 100644 index 0000000..b2ce863 --- /dev/null +++ b/server/install-client.reg @@ -0,0 +1,13 @@ +Windows Registry Editor Version 5.00 + +; ============================================================ +; Принудительная установка CAPS Enhancer через Windows Registry +; ============================================================ + +; Для всех пользователей компьютера (требует прав администратора) +[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist] +"1"="hpjnlbenmhmigajedbgmonmnediljbfa;https://git.ihateamerica.ru/caps_enhancer/update.xml" + +; --- ИЛИ только для текущего пользователя (без прав админа) --- +; [HKEY_CURRENT_USER\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist] +; "1"="hpjnlbenmhmigajedbgmonmnediljbfa;https://git.ihateamerica.ru/caps_enhancer/update.xml" diff --git a/server/nginx.conf b/server/nginx.conf new file mode 100644 index 0000000..9e43c81 --- /dev/null +++ b/server/nginx.conf @@ -0,0 +1,40 @@ +server { + listen 80; + listen 443 ssl; + server_name YOUR_DOMAIN; + + # SSL (рекомендуется — Chrome требует HTTPS для update_url) + # ssl_certificate /etc/letsencrypt/live/YOUR_DOMAIN/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/YOUR_DOMAIN/privkey.pem; + + root /var/www/caps-enhancer; + index index.html; + + # Директория с файлами расширения + location /caps-enhancer/ { + # MIME-тип для .crx — обязателен, иначе Chrome откажется качать + types { + application/x-chrome-extension crx; + application/xml xml; + text/plain txt; + } + + # Разрешаем скачивание + add_header Content-Disposition 'attachment' always; + + # CORS — если сервер и расширение на разных доменах + add_header Access-Control-Allow-Origin '*' always; + + # Кэш для update.xml — не кэшировать (чтобы обновления прилетали быстро) + location ~* \.xml$ { + add_header Cache-Control 'no-cache, no-store, must-revalidate' always; + add_header Pragma 'no-cache' always; + expires 0; + } + + # .crx можно кэшировать (файл меняется только при новой версии) + location ~* \.crx$ { + add_header Cache-Control 'public, max-age=86400' always; + } + } +} diff --git a/server/pack-zip.bat b/server/pack-zip.bat new file mode 100644 index 0000000..6d258af --- /dev/null +++ b/server/pack-zip.bat @@ -0,0 +1,40 @@ +@echo off +setlocal +set ROOT=%~dp0.. + +:: Читаем версию из manifest.json +for /f "delims=" %%v in ('powershell -NoProfile -Command "(Get-Content '%ROOT%\manifest.json' | ConvertFrom-Json).version"') do set VERSION=%%v +echo Упаковка версии %VERSION%... + +:: Временная папка +set TMP=%TEMP%\caps-enhancer-pack +if exist "%TMP%" rd /s /q "%TMP%" +md "%TMP%" + +:: Копируем файлы расширения +copy "%ROOT%\manifest.json" "%TMP%\" >nul +copy "%ROOT%\popup.html" "%TMP%\" >nul +copy "%ROOT%\popup.css" "%TMP%\" >nul +copy "%ROOT%\options.html" "%TMP%\" >nul +copy "%ROOT%\auto-update.bat" "%TMP%\" >nul +xcopy "%ROOT%\js" "%TMP%\js\" /e /q >nul +xcopy "%ROOT%\css" "%TMP%\css\" /e /q >nul +xcopy "%ROOT%\modules" "%TMP%\modules\" /e /q >nul +xcopy "%ROOT%\icons" "%TMP%\icons\" /e /q >nul + +:: Создаём ZIP +set OUT=%~dp0caps-enhancer.zip +if exist "%OUT%" del "%OUT%" +powershell -NoProfile -Command "Compress-Archive -Path '%TMP%\*' -DestinationPath '%OUT%'" +rd /s /q "%TMP%" + +:: Обновляем version.json +echo {"version": "%VERSION%"} > "%~dp0version.json" + +echo. +echo [OK] server\caps-enhancer.zip +echo [OK] server\version.json (v%VERSION%) +echo. +echo Залей оба файла на сервер: /var/www/caps_enhancer/ +pause +endlocal diff --git a/server/update.xml b/server/update.xml new file mode 100644 index 0000000..56d3807 --- /dev/null +++ b/server/update.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/server/version.json b/server/version.json new file mode 100644 index 0000000..fb01bc4 --- /dev/null +++ b/server/version.json @@ -0,0 +1 @@ +{"version": "2.7"}