2023-05-09 03:42:06 -05:00
|
|
|
#!/usr/bin/env node
|
|
|
|
|
2023-04-21 08:05:27 -05:00
|
|
|
import { Command, InvalidArgumentError } from '@commander-js/extra-typings'
|
|
|
|
import { listRegistered, registerRunner, unregisterRunner } from './register'
|
|
|
|
import { RunnerServer } from './server'
|
|
|
|
import { ConfigManager, logger } from './shared'
|
|
|
|
|
2023-05-09 03:45:37 -05:00
|
|
|
const packageJSON = require('./package.json')
|
|
|
|
|
2023-04-21 08:05:27 -05:00
|
|
|
const program = new Command()
|
2023-05-09 03:45:37 -05:00
|
|
|
.version(packageJSON.version)
|
2023-04-21 08:05:27 -05:00
|
|
|
.option(
|
|
|
|
'--id <id>',
|
|
|
|
'Runner server id, so you can run multiple PeerTube server runners with different configurations on the same machine',
|
|
|
|
'default'
|
|
|
|
)
|
|
|
|
.option('--verbose', 'Run in verbose mode')
|
|
|
|
.hook('preAction', thisCommand => {
|
|
|
|
const options = thisCommand.opts()
|
|
|
|
|
|
|
|
ConfigManager.Instance.init(options.id)
|
|
|
|
|
|
|
|
if (options.verbose === true) {
|
|
|
|
logger.level = 'debug'
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
program.command('server')
|
|
|
|
.description('Run in server mode, to execute remote jobs of registered PeerTube instances')
|
|
|
|
.action(async () => {
|
|
|
|
try {
|
|
|
|
await RunnerServer.Instance.run()
|
|
|
|
} catch (err) {
|
2023-05-02 06:51:06 -05:00
|
|
|
logger.error('Cannot run PeerTube runner as server mode', err)
|
2023-04-21 08:05:27 -05:00
|
|
|
process.exit(-1)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
program.command('register')
|
|
|
|
.description('Register a new PeerTube instance to process runner jobs')
|
|
|
|
.requiredOption('--url <url>', 'PeerTube instance URL', parseUrl)
|
|
|
|
.requiredOption('--registration-token <token>', 'Runner registration token (can be found in PeerTube instance administration')
|
|
|
|
.requiredOption('--runner-name <name>', 'Runner name')
|
|
|
|
.option('--runner-description <description>', 'Runner description')
|
|
|
|
.action(async options => {
|
|
|
|
try {
|
|
|
|
await registerRunner(options)
|
|
|
|
} catch (err) {
|
2023-05-02 06:51:06 -05:00
|
|
|
logger.error('Cannot register this PeerTube runner.', err)
|
2023-04-21 08:05:27 -05:00
|
|
|
process.exit(-1)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
program.command('unregister')
|
|
|
|
.description('Unregister the runner from PeerTube instance')
|
|
|
|
.requiredOption('--url <url>', 'PeerTube instance URL', parseUrl)
|
|
|
|
.action(async options => {
|
|
|
|
try {
|
|
|
|
await unregisterRunner(options)
|
|
|
|
} catch (err) {
|
2023-05-02 06:51:06 -05:00
|
|
|
logger.error('Cannot unregister this PeerTube runner.', err)
|
2023-04-21 08:05:27 -05:00
|
|
|
process.exit(-1)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
program.command('list-registered')
|
|
|
|
.description('List registered PeerTube instances')
|
|
|
|
.action(async () => {
|
|
|
|
try {
|
|
|
|
await listRegistered()
|
|
|
|
} catch (err) {
|
2023-05-02 06:51:06 -05:00
|
|
|
logger.error('Cannot list registered PeerTube instances.', err)
|
2023-04-21 08:05:27 -05:00
|
|
|
process.exit(-1)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
program.parse()
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
// Private
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
function parseUrl (url: string) {
|
|
|
|
if (url.startsWith('http://') !== true && url.startsWith('https://') !== true) {
|
|
|
|
throw new InvalidArgumentError('URL should start with a http:// or https://')
|
|
|
|
}
|
|
|
|
|
|
|
|
return url
|
|
|
|
}
|