* CLI: plugins install command accept a --plugin-version parameter.
* Unit tests for plugins install --plugin-version.
* Fix linting.
* Styling
Co-authored-by: Chocobozzz <me@florianbigard.com>
const fromDisk = !!body.path
const toInstall = body.npmName || body.path
+
+ const pluginVersion = body.pluginVersion && body.npmName
+ ? body.pluginVersion
+ : undefined
+
try {
- const plugin = await PluginManager.Instance.install(toInstall, undefined, fromDisk)
+ const plugin = await PluginManager.Instance.install(toInstall, pluginVersion, fromDisk)
return res.json(plugin.toFormattedJSON())
} catch (err) {
body('npmName')
.optional()
.custom(isNpmPluginNameValid).withMessage('Should have a valid npm name'),
+ body('pluginVersion')
+ .optional()
+ .custom(isPluginVersionValid).withMessage('Should have a valid plugin version'),
body('path')
.optional()
.custom(isSafePath).withMessage('Should have a valid safe path'),
if (!body.path && !body.npmName) {
return res.fail({ message: 'Should have either a npmName or a path' })
}
+ if (body.pluginVersion && !body.npmName) {
+ return res.fail({ message: 'Should have a npmName when specifying a pluginVersion' })
+ }
return next()
}
expect(res).to.not.contain('peertube-plugin-hello-world')
})
+
+ it('Should install a plugin in requested version', async function () {
+ this.timeout(60000)
+
+ await cliCommand.execWithEnv(`${cmd} plugins install --npm-name peertube-plugin-hello-world --plugin-version 0.0.17`)
+ })
+
+ it('Should list installed plugins, in correct version', async function () {
+ const res = await cliCommand.execWithEnv(`${cmd} plugins list`)
+
+ expect(res).to.contain('peertube-plugin-hello-world')
+ expect(res).to.contain('0.0.17')
+ })
+
+ it('Should uninstall the plugin again', async function () {
+ const res = await cliCommand.execWithEnv(`${cmd} plugins uninstall --npm-name peertube-plugin-hello-world`)
+
+ expect(res).to.not.contain('peertube-plugin-hello-world')
+ })
})
describe('Manage video redundancies', function () {
.option('-p, --password <token>', 'Password')
.option('-P --path <path>', 'Install from a path')
.option('-n, --npm-name <npmName>', 'Install from npm')
+ .option('--plugin-version <pluginVersion>', 'Specify the plugin version to install (only available when installing from npm)')
.action((options, command) => installPluginCLI(command, options))
program
await assignToken(server, username, password)
try {
- await server.plugins.install({ npmName: options.npmName, path: options.path })
+ await server.plugins.install({ npmName: options.npmName, path: options.path, pluginVersion: options.pluginVersion })
} catch (err) {
console.error('Cannot install plugin.', err)
process.exit(-1)
install (options: OverrideCommandOptions & {
path?: string
npmName?: string
+ pluginVersion?: string
}) {
- const { npmName, path } = options
+ const { npmName, path, pluginVersion } = options
const apiPath = '/api/v1/plugins/install'
return this.postBodyRequest({
...options,
path: apiPath,
- fields: { npmName, path },
+ fields: { npmName, path, pluginVersion },
implicitToken: true,
defaultExpectedStatus: HttpStatusCode.OK_200
})
export interface InstallOrUpdatePlugin {
npmName?: string
+ pluginVersion?: string
path?: string
}