You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

119 lines
4.2 KiB

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import json
import shutil
import tempfile
import subprocess
from .common import rootPath
from .common import saveFile
from .common import projectUrl
from .common import projectDesc
from .common import releaseInfo
from .common import createFolder
from .common import resourceInfo
from .sequence import txtSerialize
from .sequence import jsonSerialize
from .sequence import htmlSerialize
from .sequence import gitbookSummary
from .sequence import gitbookChapters
from .sequence import gitbookMetadata
def txtRelease(metadata: dict, content: dict) -> None:
saveFile(releaseInfo['txt'], txtSerialize(metadata, content))
def jsonRelease(metadata: dict, content: dict) -> None:
saveFile(releaseInfo['json'], jsonSerialize(metadata, content))
def htmlRelease(metadata: dict, content: dict) -> None:
saveFile(releaseInfo['calibre'], htmlSerialize(metadata, content))
def gitbookRelease(metadata: dict, content: dict) -> None:
createFolder(releaseInfo['gitbook'])
createFolder(os.path.join(releaseInfo['gitbook'], './assets/'))
createFolder(os.path.join(releaseInfo['gitbook'], './content/'))
cover = gitbookMetadata(metadata)
for (resName, resUrls) in resourceInfo.items():
cover += '{% hint style="success" %}\n' \
+ '### >>> [%s](%s) <<<\n' % (resName, resUrls[0]) \
+ '{% endhint %}\n\n'
cover += '{%% embed url="%s" %%}\n项目地址\n{%% endembed %%}\n' % projectUrl
saveFile(os.path.join(releaseInfo['gitbook'], 'README.md'), cover)
saveFile(os.path.join(releaseInfo['gitbook'], 'SUMMARY.md'), gitbookSummary(content))
for (chapterPath, chapterContent) in gitbookChapters(content).items():
saveFile(os.path.join(releaseInfo['gitbook'], chapterPath), chapterContent)
shutil.copy( # gitbook cover
os.path.join(rootPath, './assets/cover.jpg'),
os.path.join(releaseInfo['gitbook'], './assets/cover.jpg')
)
def staticDepends(workDir: str, metadata: dict, content: dict) -> None:
createFolder(os.path.join(workDir, './assets/'))
createFolder(os.path.join(workDir, './content/'))
cover = gitbookMetadata(metadata) + '<hr/>\n'
for (resName, resUrls) in resourceInfo.items():
cover += '\n{% hint style="tip" %}\n' \
+ '#### [%s](%s)([备用地址](%s))\n' % (resName, resUrls[0], resUrls[1]) \
+ '{% endhint %}\n'
bookInfo = json.dumps({
'title': metadata['name'],
'author': metadata['author'],
'description': projectDesc,
"language": "zh-hans",
'plugins': [
'-lunr', '-search', '-sharing', 'hints', 'github',
'fontsettings', 'image-captions', 'back-to-top-button'
],
'pluginsConfig': {
'github': {'url': projectUrl}
}
})
saveFile(os.path.join(workDir, 'README.md'), cover)
saveFile(os.path.join(workDir, 'book.json'), bookInfo)
saveFile(os.path.join(workDir, 'SUMMARY.md'), gitbookSummary(content))
for (chapterPath, chapterContent) in gitbookChapters(content).items():
saveFile(os.path.join(workDir, chapterPath), chapterContent)
shutil.copy( # gitbook cover
os.path.join(rootPath, './assets/cover.jpg'),
os.path.join(workDir, './assets/cover.jpg')
)
def staticBuild(workDir: str) -> None:
buildDir = '/xxrs/'
nodeImage = 'node:10-alpine'
buildCommand = 'docker run --rm -v %s:%s --entrypoint sh %s -c "%s"' % (
workDir, buildDir, nodeImage,
'npm install gitbook-cli -g && gitbook install %s && gitbook build %s --log=debug' % (
buildDir, buildDir
)
)
print('Gitbook Build -> %s' % workDir)
subprocess.Popen(buildCommand, shell = True).wait() # blocking wait
os.chdir(os.path.join(workDir, './_book'))
os.popen('tar cJf %s *' % releaseInfo['static'])
def staticRelease(metadata: dict, content: dict) -> None:
# TODO: confirm running under root
tempDir = tempfile.TemporaryDirectory() # access temporary directory
content = {x: content[x] for x in list(content)[:20]} # TODO: just for test
staticDepends(tempDir.name, metadata, content)
staticBuild(tempDir.name)
tempDir.cleanup()