도움말 173개와 제목 181개 한글화 및 운영 반영 기록
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import pathlib,subprocess,datetime,shutil,time,urllib.request,urllib.parse,hashlib,json,sqlite3
|
||||
base=pathlib.Path('/www/dk_project/dk_app/trilium')
|
||||
release=pathlib.Path('/tmp/trilium-korean-phase3')
|
||||
manifest=json.loads((release/'manifest.json').read_text())
|
||||
digest=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
||||
for rel,expected in manifest['files'].items():
|
||||
assert digest(release/rel)==expected,rel
|
||||
assert digest(base/'patched/main.cjs')==manifest['previousMainSha256'],'Main changed since inspection'
|
||||
assert digest(base/'patched/ko.js')==manifest['previousCalendarSha256'],'Calendar changed since inspection'
|
||||
assert not (base/'data/korean-notes-pending.json').exists()
|
||||
compose=base/'docker-compose.yml';before=compose.read_text()
|
||||
anchor=' - ./patched/main.cjs:/usr/src/app/main.cjs:ro'
|
||||
assert anchor in before
|
||||
mount=' - ./i18n_ko/doc_notes/en:/usr/src/app/assets/doc_notes/en:ro'
|
||||
assert mount not in before,'Help mount already exists'
|
||||
assert not (base/'i18n_ko/doc_notes/en').exists(),'Target already exists'
|
||||
stamp=datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
|
||||
backup=base/'backups'/('before-korean-phase3-'+stamp);backup.mkdir(parents=True,mode=0o700)
|
||||
for rel in ['patched/main.cjs','patched/ko.js','docker-compose.yml']:
|
||||
dst=backup/rel;dst.parent.mkdir(parents=True,exist_ok=True);shutil.copy2(base/rel,dst)
|
||||
source=sqlite3.connect('file:'+str(base/'data/document.db')+'?mode=ro',uri=True)
|
||||
with sqlite3.connect(str(backup/'document.db')) as target:source.backup(target)
|
||||
source.close()
|
||||
subprocess.run(['docker','cp','trilium:/usr/src/app/assets/doc_notes/en',str(backup/'original-help-en')],check=True)
|
||||
shutil.copytree(release/'doc_notes/en',base/'i18n_ko/doc_notes/en')
|
||||
prefix='http://127.0.0.1:18082/assets/v0.95.0-ko-20260913-r3/'
|
||||
try:
|
||||
(base/'patched/main.cjs').write_bytes((release/'main.cjs').read_bytes())
|
||||
(base/'patched/ko.js').write_bytes((release/'ko.js').read_bytes())
|
||||
compose.write_text(before.replace(anchor,anchor+'\n'+mount))
|
||||
subprocess.run(['docker','compose','-f',str(compose),'config','--quiet'],check=True)
|
||||
subprocess.run(['docker','compose','-f',str(compose),'up','-d','--no-deps','trilium'],check=True)
|
||||
for attempt in range(40):
|
||||
try:
|
||||
with urllib.request.urlopen('http://127.0.0.1:18082/api/health-check',timeout=2) as response:assert response.status==200
|
||||
break
|
||||
except Exception:
|
||||
if attempt==39:raise
|
||||
time.sleep(1)
|
||||
checked=0
|
||||
for rel,expected in manifest['files'].items():
|
||||
if not rel.startswith('doc_notes/'):continue
|
||||
with urllib.request.urlopen(prefix+urllib.parse.quote(rel),timeout=5) as response:
|
||||
assert hashlib.sha256(response.read()).hexdigest()==expected,rel
|
||||
checked+=1
|
||||
with urllib.request.urlopen(prefix+'src/ko.js',timeout=5) as response:
|
||||
assert hashlib.sha256(response.read()).hexdigest()==manifest['files']['ko.js']
|
||||
meta=json.loads((release/'doc_notes/en/User Guide/!!!meta.json').read_text())
|
||||
db=sqlite3.connect('file:'+str(base/'data/document.db')+'?mode=ro',uri=True)
|
||||
titles=[]
|
||||
def verify(items):
|
||||
for item in items:
|
||||
row=db.execute('SELECT title FROM notes WHERE noteId=? AND isDeleted=0',(item['id'],)).fetchone()
|
||||
assert row and row[0]==item['title'],item['id']
|
||||
titles.append(item['id']);verify(item.get('children',[]))
|
||||
verify(meta);db.close()
|
||||
result={'status':'verified','backup':str(backup),'servedHelpFiles':checked,'helpTitles':len(titles),'assetVersion':'v0.95.0-ko-20260913-r3'}
|
||||
(base/'i18n_ko/phase3-result.json').write_text(json.dumps(result,indent=2))
|
||||
print(json.dumps(result))
|
||||
except Exception:
|
||||
for rel in ['patched/main.cjs','patched/ko.js','docker-compose.yml']:(base/rel).write_bytes((backup/rel).read_bytes())
|
||||
subprocess.run(['docker','compose','-f',str(compose),'up','-d','--no-deps','trilium'],check=True)
|
||||
print('Previous application files restored. Database backup retained at '+str(backup))
|
||||
raise
|
||||
Reference in New Issue
Block a user