depository-deploy 1.0.17 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/install/install-unix.sh +38 -0
- package/install/install-windows.ps1 +35 -0
- package/package.json +4 -4
- package/wizard.html +75 -0
package/install/install-unix.sh
CHANGED
|
@@ -248,6 +248,44 @@ apply_template "$TEMPLATE_DIR/appsettings-worker.json" "$INSTALL_DIR/worker/ap
|
|
|
248
248
|
apply_template "$TEMPLATE_DIR/appsettings-gatherer.json" "$INSTALL_DIR/gatherer/appsettings.json"
|
|
249
249
|
apply_template "$TEMPLATE_DIR/appsettings-digestor.json" "$INSTALL_DIR/digestor/appsettings.json"
|
|
250
250
|
|
|
251
|
+
# ---- Clean database (if requested) ----
|
|
252
|
+
if [ "${CLEAN_DB:-false}" = "true" ]; then
|
|
253
|
+
warn "CLEAN_DB=true — database will be wiped on first service start."
|
|
254
|
+
if [ "$DB_PROVIDER" = "Oracle" ]; then
|
|
255
|
+
# Set OracleForceRecreate=true in api appsettings so the REST service drops all tables
|
|
256
|
+
if command -v python3 &>/dev/null; then
|
|
257
|
+
python3 -c "
|
|
258
|
+
import json, sys
|
|
259
|
+
p='$INSTALL_DIR/api/appsettings.json'
|
|
260
|
+
with open(p) as f: d=json.load(f)
|
|
261
|
+
d.setdefault('DatabaseConfiguration',{})['OracleForceRecreate']=True
|
|
262
|
+
with open(p,'w') as f: json.dump(d,f,indent=2)
|
|
263
|
+
print(' OracleForceRecreate set to true in api/appsettings.json')
|
|
264
|
+
"
|
|
265
|
+
else
|
|
266
|
+
sed -i 's/"OracleForceRecreate": false/"OracleForceRecreate": true/' "$INSTALL_DIR/api/appsettings.json"
|
|
267
|
+
info " OracleForceRecreate set to true in api/appsettings.json"
|
|
268
|
+
fi
|
|
269
|
+
elif [ "$DB_PROVIDER" = "SqlServer" ]; then
|
|
270
|
+
# Drop and recreate both SQL Server databases so EF migrations start fresh
|
|
271
|
+
info " Dropping SQL Server databases: ${SQLSERVER_DATABASE}, DEPOSITORY_Users ..."
|
|
272
|
+
SQLCMD=""
|
|
273
|
+
if command -v sqlcmd &>/dev/null; then SQLCMD="sqlcmd"; fi
|
|
274
|
+
if [ -z "$SQLCMD" ] && [ -f /opt/mssql-tools18/bin/sqlcmd ]; then SQLCMD="/opt/mssql-tools18/bin/sqlcmd"; fi
|
|
275
|
+
if [ -z "$SQLCMD" ] && [ -f /opt/mssql-tools/bin/sqlcmd ]; then SQLCMD="/opt/mssql-tools/bin/sqlcmd"; fi
|
|
276
|
+
if [ -n "$SQLCMD" ]; then
|
|
277
|
+
for DBNAME in "$SQLSERVER_DATABASE" "DEPOSITORY_Users"; do
|
|
278
|
+
"$SQLCMD" -S "${SQLSERVER_HOST},${SQLSERVER_PORT}" -U "$SQLSERVER_USER" -P "$SQLSERVER_PASSWORD" \
|
|
279
|
+
-C -Q "IF DB_ID('${DBNAME}') IS NOT NULL BEGIN ALTER DATABASE [${DBNAME}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [${DBNAME}]; END" \
|
|
280
|
+
2>/dev/null && info " Dropped database: ${DBNAME}" || warn " Could not drop ${DBNAME} (may not exist yet)"
|
|
281
|
+
done
|
|
282
|
+
else
|
|
283
|
+
warn " sqlcmd not found — cannot drop SQL Server databases automatically."
|
|
284
|
+
warn " The services will create fresh databases via EF migrations on first start."
|
|
285
|
+
fi
|
|
286
|
+
fi
|
|
287
|
+
fi
|
|
288
|
+
|
|
251
289
|
# ---- Install systemd services ----
|
|
252
290
|
info "Installing systemd services..."
|
|
253
291
|
for svc in api auth worker gatherer digestor; do
|
|
@@ -231,6 +231,41 @@ Apply-Template "$TemplateDir\appsettings-worker.json" "$INSTALL_DIR\worker\app
|
|
|
231
231
|
Apply-Template "$TemplateDir\appsettings-gatherer.json" "$INSTALL_DIR\gatherer\appsettings.json"
|
|
232
232
|
Apply-Template "$TemplateDir\appsettings-digestor.json" "$INSTALL_DIR\digestor\appsettings.json"
|
|
233
233
|
|
|
234
|
+
# ---- Clean database (if requested) ----
|
|
235
|
+
if ($conf.CLEAN_DB -eq "true") {
|
|
236
|
+
Write-Warn "CLEAN_DB=true -- database will be wiped."
|
|
237
|
+
if ($conf.DB_PROVIDER -eq "Oracle") {
|
|
238
|
+
# Set OracleForceRecreate=true in api appsettings
|
|
239
|
+
$apiSettings = Join-Path $INSTALL_DIR "api\appsettings.json"
|
|
240
|
+
$json = Get-Content $apiSettings -Raw | ConvertFrom-Json
|
|
241
|
+
$json.DatabaseConfiguration.OracleForceRecreate = $true
|
|
242
|
+
$json | ConvertTo-Json -Depth 10 | Set-Content $apiSettings -Encoding UTF8
|
|
243
|
+
Write-Info " OracleForceRecreate set to true in api/appsettings.json"
|
|
244
|
+
}
|
|
245
|
+
elseif ($conf.DB_PROVIDER -eq "SqlServer") {
|
|
246
|
+
# Drop and recreate SQL Server databases
|
|
247
|
+
Write-Info " Dropping SQL Server databases..."
|
|
248
|
+
$sqlHost = "$($conf.SQLSERVER_HOST),$($conf.SQLSERVER_PORT)"
|
|
249
|
+
$sqlUser = $conf.SQLSERVER_USER
|
|
250
|
+
$sqlPass = $conf.SQLSERVER_PASSWORD
|
|
251
|
+
foreach ($dbName in @($conf.SQLSERVER_DATABASE, "DEPOSITORY_Users")) {
|
|
252
|
+
$dropSql = "IF DB_ID('$dbName') IS NOT NULL BEGIN ALTER DATABASE [$dbName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [$dbName]; END"
|
|
253
|
+
try {
|
|
254
|
+
$connStr = "Server=$sqlHost;User ID=$sqlUser;Password=$sqlPass;TrustServerCertificate=true;"
|
|
255
|
+
$conn = New-Object System.Data.SqlClient.SqlConnection($connStr)
|
|
256
|
+
$conn.Open()
|
|
257
|
+
$cmd = $conn.CreateCommand()
|
|
258
|
+
$cmd.CommandText = $dropSql
|
|
259
|
+
$cmd.ExecuteNonQuery() | Out-Null
|
|
260
|
+
$conn.Close()
|
|
261
|
+
Write-Info " Dropped database: $dbName"
|
|
262
|
+
} catch {
|
|
263
|
+
Write-Warn " Could not drop ${dbName}: $($_.Exception.Message)"
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
234
269
|
# ---- Register Windows Services ----
|
|
235
270
|
Write-Info "Registering Windows Services..."
|
|
236
271
|
$svcDefs = @(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "depository-deploy",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.20",
|
|
4
4
|
"description": "Depository document management system – deployment wizard and installers",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"publishConfig": {
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"scripts/publish.mjs"
|
|
26
26
|
],
|
|
27
27
|
"optionalDependencies": {
|
|
28
|
-
"depository-deploy-linux": "1.0.
|
|
29
|
-
"depository-deploy-macos": "1.0.
|
|
30
|
-
"depository-deploy-windows": "1.0.
|
|
28
|
+
"depository-deploy-linux": "1.0.20",
|
|
29
|
+
"depository-deploy-macos": "1.0.20",
|
|
30
|
+
"depository-deploy-windows": "1.0.20"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"start": "node wizard-server.mjs"
|
package/wizard.html
CHANGED
|
@@ -635,6 +635,27 @@ input.err { border-color: var(--err) !important; box-shadow: 0 0 0 3px rgba(220,
|
|
|
635
635
|
<span class="test-badge" id="testBadge-ora"></span>
|
|
636
636
|
</div>
|
|
637
637
|
</div>
|
|
638
|
+
|
|
639
|
+
<!-- Clean Database toggle -->
|
|
640
|
+
<div style="margin-top:18px;padding:14px 16px;border:1px solid #fca5a5;border-radius:8px;background:#fef2f2">
|
|
641
|
+
<div class="toggle-row" style="margin-bottom:0">
|
|
642
|
+
<label class="toggle">
|
|
643
|
+
<input type="checkbox" id="clean_db" onchange="toggleCleanDb()">
|
|
644
|
+
<div class="toggle-slider" style="background:#e5e7eb"></div>
|
|
645
|
+
</label>
|
|
646
|
+
<div class="toggle-text">
|
|
647
|
+
<div class="toggle-label" data-i18n="clean_db_toggle" onclick="document.getElementById('clean_db').click()" style="color:#991b1b;font-weight:600">Clean Database (Drop All Tables)</div>
|
|
648
|
+
<div class="toggle-sub" data-i18n="clean_db_sub" style="color:#b91c1c">Removes ALL existing data before installation. Use only for a fresh start.</div>
|
|
649
|
+
</div>
|
|
650
|
+
</div>
|
|
651
|
+
<div id="cleanDbConfirm" style="display:none;margin-top:10px;padding:10px 12px;background:#fee2e2;border-radius:6px;border:1px solid #fca5a5">
|
|
652
|
+
<div style="font-size:12px;color:#991b1b;font-weight:600;margin-bottom:6px" data-i18n="clean_db_warn">⚠ WARNING: This will permanently delete all documents, users, batches, and configuration from the database. This action cannot be undone.</div>
|
|
653
|
+
<label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:#991b1b">
|
|
654
|
+
<input type="checkbox" id="clean_db_confirm" onchange="validateCleanDb()">
|
|
655
|
+
<span data-i18n="clean_db_confirm">I understand that ALL data will be permanently deleted</span>
|
|
656
|
+
</label>
|
|
657
|
+
</div>
|
|
658
|
+
</div>
|
|
638
659
|
</div>
|
|
639
660
|
|
|
640
661
|
<!-- Step 2: Auth DB -->
|
|
@@ -960,6 +981,12 @@ const T = {
|
|
|
960
981
|
prev_install_warn:"A previous Depository installation was detected at this path.",
|
|
961
982
|
prev_install_confirm:"I understand — overwrite the existing installation",
|
|
962
983
|
err_overwrite:"Please confirm that you want to overwrite the existing installation.",
|
|
984
|
+
clean_db_toggle:"Clean Database (Drop All Tables)",
|
|
985
|
+
clean_db_sub:"Removes ALL existing data before installation. Use only for a fresh start.",
|
|
986
|
+
clean_db_warn:"\u26A0 WARNING: This will permanently delete all documents, users, batches, and configuration from the database. This action cannot be undone.",
|
|
987
|
+
clean_db_confirm:"I understand that ALL data will be permanently deleted",
|
|
988
|
+
err_clean_db:"Please confirm that you want to delete all database data.",
|
|
989
|
+
review_clean_db:"Clean Database",
|
|
963
990
|
update_available:"A newer version is available:",
|
|
964
991
|
update_btn:"Update Now",
|
|
965
992
|
update_updating:"Updating…",
|
|
@@ -1052,6 +1079,12 @@ const T = {
|
|
|
1052
1079
|
prev_install_warn:"Bu yolda önceki bir Depository kurulumu algılandı.",
|
|
1053
1080
|
prev_install_confirm:"Anlıyorum — mevcut kurulumun üzerine yaz",
|
|
1054
1081
|
err_overwrite:"Lütfen mevcut kurulumun üzerine yazmak istediğinizi onaylayın.",
|
|
1082
|
+
clean_db_toggle:"Veritabanını Temizle (Tüm Tabloları Sil)",
|
|
1083
|
+
clean_db_sub:"Kurulum öncesinde TÜM mevcut verileri siler. Yalnızca temiz başlangıç için kullanın.",
|
|
1084
|
+
clean_db_warn:"\u26A0 UYARI: Bu işlem veritabanındaki tüm belgeleri, kullanıcıları, iş gruplarını ve yapılandırmayı kalıcı olarak silecektir. Bu işlem geri alınamaz.",
|
|
1085
|
+
clean_db_confirm:"TÜM verilerin kalıcı olarak silineceğini anlıyorum",
|
|
1086
|
+
err_clean_db:"Lütfen tüm veritabanı verilerini silmek istediğinizi onaylayın.",
|
|
1087
|
+
review_clean_db:"Veritabanı Temizliği",
|
|
1055
1088
|
update_available:"Daha yeni bir sürüm mevcut:",
|
|
1056
1089
|
update_btn:"Şimdi Güncelle",
|
|
1057
1090
|
update_updating:"Güncelleniyor…",
|
|
@@ -1144,6 +1177,12 @@ const T = {
|
|
|
1144
1177
|
prev_install_warn:"Une installation précédente de Depository a été détectée à cet emplacement.",
|
|
1145
1178
|
prev_install_confirm:"Je comprends — écraser l'installation existante",
|
|
1146
1179
|
err_overwrite:"Veuillez confirmer que vous souhaitez écraser l'installation existante.",
|
|
1180
|
+
clean_db_toggle:"Nettoyer la base de données (Supprimer toutes les tables)",
|
|
1181
|
+
clean_db_sub:"Supprime TOUTES les données existantes avant l'installation. À utiliser uniquement pour un nouveau départ.",
|
|
1182
|
+
clean_db_warn:"\u26A0 ATTENTION : Cette action supprimera définitivement tous les documents, utilisateurs, lots et configurations de la base de données. Cette action est irréversible.",
|
|
1183
|
+
clean_db_confirm:"Je comprends que TOUTES les données seront définitivement supprimées",
|
|
1184
|
+
err_clean_db:"Veuillez confirmer la suppression de toutes les données.",
|
|
1185
|
+
review_clean_db:"Nettoyage de la base",
|
|
1147
1186
|
update_available:"Une version plus récente est disponible :",
|
|
1148
1187
|
update_btn:"Mettre à jour",
|
|
1149
1188
|
update_updating:"Mise à jour…",
|
|
@@ -1236,6 +1275,12 @@ const T = {
|
|
|
1236
1275
|
prev_install_warn:"An diesem Pfad wurde eine vorherige Depository-Installation erkannt.",
|
|
1237
1276
|
prev_install_confirm:"Verstanden — vorhandene Installation überschreiben",
|
|
1238
1277
|
err_overwrite:"Bitte bestätigen Sie, dass Sie die vorhandene Installation überschreiben möchten.",
|
|
1278
|
+
clean_db_toggle:"Datenbank bereinigen (Alle Tabellen löschen)",
|
|
1279
|
+
clean_db_sub:"Entfernt ALLE vorhandenen Daten vor der Installation. Nur für einen Neustart verwenden.",
|
|
1280
|
+
clean_db_warn:"\u26A0 WARNUNG: Alle Dokumente, Benutzer, Stapel und Konfigurationen in der Datenbank werden unwiderruflich gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.",
|
|
1281
|
+
clean_db_confirm:"Ich verstehe, dass ALLE Daten unwiderruflich gelöscht werden",
|
|
1282
|
+
err_clean_db:"Bitte bestätigen Sie die Löschung aller Datenbankdaten.",
|
|
1283
|
+
review_clean_db:"Datenbank bereinigen",
|
|
1239
1284
|
update_available:"Eine neuere Version ist verfügbar:",
|
|
1240
1285
|
update_btn:"Jetzt aktualisieren",
|
|
1241
1286
|
update_updating:"Aktualisierung…",
|
|
@@ -1328,6 +1373,12 @@ const T = {
|
|
|
1328
1373
|
prev_install_warn:"Se detectó una instalación previa de Depository en esta ruta.",
|
|
1329
1374
|
prev_install_confirm:"Entiendo — sobrescribir la instalación existente",
|
|
1330
1375
|
err_overwrite:"Por favor confirme que desea sobrescribir la instalación existente.",
|
|
1376
|
+
clean_db_toggle:"Limpiar base de datos (Eliminar todas las tablas)",
|
|
1377
|
+
clean_db_sub:"Elimina TODOS los datos existentes antes de la instalación. Usar solo para un inicio limpio.",
|
|
1378
|
+
clean_db_warn:"\u26A0 ADVERTENCIA: Esto eliminará permanentemente todos los documentos, usuarios, lotes y configuraciones de la base de datos. Esta acción no se puede deshacer.",
|
|
1379
|
+
clean_db_confirm:"Entiendo que TODOS los datos serán eliminados permanentemente",
|
|
1380
|
+
err_clean_db:"Por favor confirme que desea eliminar todos los datos de la base de datos.",
|
|
1381
|
+
review_clean_db:"Limpiar base de datos",
|
|
1331
1382
|
update_available:"Hay una versión más reciente disponible:",
|
|
1332
1383
|
update_btn:"Actualizar ahora",
|
|
1333
1384
|
update_updating:"Actualizando…",
|
|
@@ -1420,6 +1471,12 @@ const T = {
|
|
|
1420
1471
|
prev_install_warn:"تم اكتشاف تثبيت سابق لـ Depository في هذا المسار.",
|
|
1421
1472
|
prev_install_confirm:"أفهم ذلك — الكتابة فوق التثبيت الحالي",
|
|
1422
1473
|
err_overwrite:"يرجى تأكيد رغبتك في الكتابة فوق التثبيت الحالي.",
|
|
1474
|
+
clean_db_toggle:"تنظيف قاعدة البيانات (حذف جميع الجداول)",
|
|
1475
|
+
clean_db_sub:"يحذف جميع البيانات الموجودة قبل التثبيت. استخدمه فقط للبدء من جديد.",
|
|
1476
|
+
clean_db_warn:"\u26A0 تحذير: سيؤدي هذا إلى حذف جميع المستندات والمستخدمين والدفعات والتكوينات من قاعدة البيانات نهائيًا. لا يمكن التراجع عن هذا الإجراء.",
|
|
1477
|
+
clean_db_confirm:"أفهم أنه سيتم حذف جميع البيانات نهائيًا",
|
|
1478
|
+
err_clean_db:"يرجى تأكيد رغبتك في حذف جميع بيانات قاعدة البيانات.",
|
|
1479
|
+
review_clean_db:"تنظيف قاعدة البيانات",
|
|
1423
1480
|
update_available:"يتوفر إصدار أحدث:",
|
|
1424
1481
|
update_btn:"تحديث الآن",
|
|
1425
1482
|
update_updating:"جارٍ التحديث…",
|
|
@@ -1557,6 +1614,10 @@ function validateStep(s) {
|
|
|
1557
1614
|
if (!val('ora_svc')) return {msg:t('err_ora_svc'), field:'ora_svc'};
|
|
1558
1615
|
if (!val('ora_user')) return {msg:t('err_ora_user'), field:'ora_user'};
|
|
1559
1616
|
}
|
|
1617
|
+
if (document.getElementById('clean_db').checked && !document.getElementById('clean_db_confirm').checked) {
|
|
1618
|
+
document.getElementById('cleanDbConfirm').scrollIntoView({behavior:'smooth',block:'center'});
|
|
1619
|
+
return {msg:t('err_clean_db'), field:'clean_db_confirm'};
|
|
1620
|
+
}
|
|
1560
1621
|
break;
|
|
1561
1622
|
case 2:
|
|
1562
1623
|
if (dbType() === 'SqlServer') {
|
|
@@ -1635,6 +1696,16 @@ function toggleAd() {
|
|
|
1635
1696
|
document.getElementById('adFields').classList.toggle('off', !on);
|
|
1636
1697
|
}
|
|
1637
1698
|
|
|
1699
|
+
function toggleCleanDb() {
|
|
1700
|
+
const on = document.getElementById('clean_db').checked;
|
|
1701
|
+
document.getElementById('cleanDbConfirm').style.display = on ? 'block' : 'none';
|
|
1702
|
+
if (!on) document.getElementById('clean_db_confirm').checked = false;
|
|
1703
|
+
}
|
|
1704
|
+
function validateCleanDb() {
|
|
1705
|
+
// If clean_db is on but confirm is not checked, disable Next until confirmed.
|
|
1706
|
+
// This is checked in validateStep() below.
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1638
1709
|
// ── JWT generator ─────────────────────────────────────────────
|
|
1639
1710
|
function generateJwt() {
|
|
1640
1711
|
const chars = 'ABCDEFGHJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789!@#%^&*';
|
|
@@ -1665,6 +1736,7 @@ function buildConf() {
|
|
|
1665
1736
|
AD_GROUP_ADMIN: val('ad_admin'), AD_GROUP_ORG_ADMIN: val('ad_orgadmin'),
|
|
1666
1737
|
AD_GROUP_USER: val('ad_user'), AD_GROUP_READONLY: val('ad_readonly'),
|
|
1667
1738
|
OPENAI_API_KEY: '',
|
|
1739
|
+
CLEAN_DB: document.getElementById('clean_db').checked?'true':'false',
|
|
1668
1740
|
};
|
|
1669
1741
|
}
|
|
1670
1742
|
|
|
@@ -1686,6 +1758,7 @@ function populateReview() {
|
|
|
1686
1758
|
[t('review_ports'), `UI=${c.UI_PORT} API=${c.API_PORT} Auth=${c.AUTH_PORT} Gatherer=${c.GATHERER_PORT}`],
|
|
1687
1759
|
[t('review_jwt'), c.JWT_SECRET.substring(0,12)+'… ('+c.JWT_SECRET.length+' chars)', true],
|
|
1688
1760
|
[t('review_ad'), c.WINDOWS_AUTH_ENABLED==='true'?`✓ ${c.AD_EMAIL_DOMAIN}`:'✗'],
|
|
1761
|
+
[t('review_clean_db'), c.CLEAN_DB==='true'?'<span style="color:#dc2626;font-weight:700">\u26A0 YES — All data will be deleted</span>':'No'],
|
|
1689
1762
|
];
|
|
1690
1763
|
document.getElementById('reviewGrid').innerHTML = rows.map(([k,v,mono]) =>
|
|
1691
1764
|
`<div class="review-row"><div class="review-key">${k}</div><div class="review-val${mono?' mono':''}">${v}</div></div>`
|
|
@@ -1741,6 +1814,8 @@ function downloadConf() {
|
|
|
1741
1814
|
'WINDOWS_AUTH_ENABLED=' + c.WINDOWS_AUTH_ENABLED, 'AD_EMAIL_DOMAIN=' + c.AD_EMAIL_DOMAIN,
|
|
1742
1815
|
'AD_GROUP_ADMIN=' + c.AD_GROUP_ADMIN, 'AD_GROUP_ORG_ADMIN=' + c.AD_GROUP_ORG_ADMIN,
|
|
1743
1816
|
'AD_GROUP_USER=' + c.AD_GROUP_USER, 'AD_GROUP_READONLY=' + c.AD_GROUP_READONLY,
|
|
1817
|
+
'', '# Clean database (drop all tables before install)',
|
|
1818
|
+
'CLEAN_DB=' + c.CLEAN_DB,
|
|
1744
1819
|
'', '# OpenAI (optional)',
|
|
1745
1820
|
'OPENAI_API_KEY=',
|
|
1746
1821
|
];
|