ern-container-publisher-fs
Version:
Electrode Native File System Container Publisher
70 lines (63 loc) • 2.03 kB
text/typescript
import { ContainerPublisher } from 'ern-container-publisher'
import { shell, log, NativePlatform } from 'ern-core'
import fs from 'fs'
import path from 'path'
export default class FsPublisher implements ContainerPublisher {
get name(): string {
return 'fs'
}
get platforms(): NativePlatform[] {
return ['android', 'ios']
}
public async publish({
containerPath,
containerVersion,
url,
platform
}: {
containerPath: string
containerVersion: string
url?: string,
platform: string
}) {
if (!url) {
throw new Error('url parameter is required')
}
if (url && fs.existsSync(url)) {
if (fs.readdirSync(url).length > 0) {
throw new Error(
`${url} directory exists and is not empty.
Publication directory should either not exist (it will be created) or should be empty.`
)
}
}
shell.mkdir('-p', url)
shell.cp('-Rf', path.join(containerPath, '{.*,*}'), url)
if (platform === 'ios') {
this.patchContainerInfoPlistWithVersion({containerPath: url, containerVersion})
}
log.info('[=== Completed publication of the Container ===]')
log.info(`[Path : ${url}]`)
}
/**
* [iOS Specific]
* Patch ElectrodeContainer Info.plist to update CFBundleShortVersionString
* with the Container version being published
*/
public patchContainerInfoPlistWithVersion({
containerPath,
containerVersion
} : {
containerPath: string,
containerVersion: string
}) {
const infoPlistPath = path.join(containerPath, 'ElectrodeContainer', 'Info.plist')
if (fs.existsSync(infoPlistPath)) {
const infoPlist = fs.readFileSync(infoPlistPath).toString()
const patchedInfoPlist = infoPlist.replace(
new RegExp('<key>CFBundleShortVersionString<\/key>\\n\\t<string>.+<\/string>'),
`<key>CFBundleShortVersionString</key>\n\t<string>${containerVersion.replace('-raw', '')}</string>`)
fs.writeFileSync(infoPlistPath, patchedInfoPlist)
}
}
}