Package: lockss-turtles
Turtles is a tool to manage LOCKSS plugin sets and LOCKSS plugin registries.Latest release:0.4.0-post1 (2023-05-22)Table of ContentsInstallationPrerequisitespipOverviewBuilding PluginsDeploying PluginsConfiguration FilesPlugin Set CatalogPlugin SetsPlugin Set BuildersMaven Plugin Set BuilderMaven Plugin Set Builder PrerequisitesMaven Plugin Set Builder DeclarationAnt Plugin Set BuilderAnt Plugin Set Builder PrerequisitesAnt Plugin Set Builder DeclarationPlugin Registry CatalogPlugin RegistriesPlugin Registry LayoutsDirectory Plugin Registry LayoutDirectory Plugin Registry Layout PrerequisitesDirectory Plugin Registry Layout DeclarationRCS Plugin Registry LayoutRCS Plugin Registry Layout PrerequisitesRCS Plugin Registry Layout DeclarationPlugin Registry LayersPlugin Signing CredentialsCommand Line ToolSynopsisCommandsTop-Level Programbuild-plugincopyrightdeploy-pluginlicenserelease-pluginusageversionOptionsPlugin Identifier Arguments and OptionsPlugin Registry Layer OptionsOutput Format ControlInstallationTurtles is available from thePython Package Index(PyPI) aslockss-turtles(https://pypi.org/project/lockss-turtles), and can be installed withpip.The installation process adds aturtlesCommand Line Tool. You can check at the command line that the installation is functional by runningturtles versionorturtles--help.PrerequisitesPython3.7 or greater.Additional prerequisites depending on the types ofPlugin Set BuildersorPlugin Registry Layoutsin use (see their respective requirements).Prerequisites for development work only:Poetry1.4 or greater.pipYou can install Turtles withpip.To install it in your own non-root, non-virtual environment, use the--useroption:pip3 install --user lockss-turtlesTo install it in a virtual environment, simply use:pip3 install lockss-turtles!DANGER!Do not runpip3/pipasroot, withsudoor otherwise.OverviewBuilding PluginsYou can use Turtles to build (package and sign) LOCKSS plugins from one or more LOCKSS plugin sets (codebases containing plugins).You will need to define one or morePlugin Sets, list them in aPlugin Set Catalog, and declare yourPlugin Signing Credentials.You then use thebuild-plugincommand to build plugins, or therelease-plugincommand to build and deploy plugins (equivalent ofbuild-pluginfollowed bydeploy-plugin).Deploying PluginsYou can use Turtles to deploy LOCKSS plugins to LOCKSS plugin registries.You will need to define one or morePlugin Registriesand declare them in aPlugin Registry Catalog.You then use thedeploy-plugincommand to deploy plugin JARs, or therelease-plugincommand to build and deploy plugins fromPlugin Sets(equivalent ofbuild-pluginfollowed bydeploy-plugin).Configuration FilesAll Turtles configuration files are YAML files and have a top-levelkindkey that declares what kind of configuration file it is.Some Turtles commands require aPlugin Set Catalog,Plugin Registry Catalog, orPlugin Signing Credentials. You can specify the configuration file to use via the appropriate command line option (for example--plugin-set-catalog/-s). Otherwise, Turtles will look for then appropriate configuration file (for exampleplugin-set-catalog.yaml) in several standard directories, in this order:$XDG_CONFIG_HOME/lockss.turtles(by default$HOME/.config/lockss.turtles)/usr/local/share/lockss.turtles/etc/lockss.turtlesPlugin Set CatalogTurtles commands that areBuilding Plugins(build-plugin,release-plugin) need a plugin set catalog. It can be specified via the--plugin-set-catalog/-soption, otherwise Turtles looks throughConfiguration Filesfor a file namedplugin-set-catalog.yaml.A plugin set catalog is defined by a YAML document:---
kind: PluginSetCatalog
plugin-set-files:
  - /path/to/some/file1.yaml
  - /path/to/another/file2.yaml
  - ...The contents are described below:kindRequired.Must be set toPluginSetCatalog.plugin-set-filesRequired.A list of one or more paths toPlugin Sets.Plugin SetsA plugin set is a project containing the source code of one or more LOCKSS plugins.A plugin set is defined by a YAML document:---
kind: PluginSet
id: mypluginset
name: My Plugin Set
builder:
  type: ...
  ...The contents are described below:kindRequired.Must be set toPluginSet.idRequired.A short identifier for the plugin set, for examplemypluginset.nameRequired.A display name for the plugin set, for exampleMy Plugin Set.builderRequired.An object defining the plugin set’s builder together with its options.typeRequired.A plugin set builder type. SeePlugin Set Buildersbelow.OtherAdditional properties depending on the plugin set builder type. SeePlugin Set Buildersbelow.Plugin Set BuildersTurtlesPlugin Setssupport two types of plugin set builders:Maven Plugin Set BuilderAnt Plugin Set BuilderMaven Plugin Set BuilderThis type of plugin set builder is for a Maven project inheriting fromorg.lockss:lockss-plugins-parent-pom.Maven Plugin Set Builder PrerequisitesJava Development Kit 8 (JDK).Apache Maven.Maven Plugin Set Builder DeclarationFor this plugin set builder type, thebuilderobject in the plugin set definition has the following structure:---
kind: PluginSet
id: ...
name: ...
builder:
  type: mvn
  main: ...
  test: ...typeRequired.Must be set tomvn.mainOptional.The path (relative to the root of the project) to the plugins’ source code.Default:src/main/java.testOptional.The path (relative to the root of the project) to the plugins’ unit tests.Default:src/test/java.Ant Plugin Set BuilderThis type of plugin set builder is for the LOCKSS 1.x (https://github.com/lockss/lockss-daemon) code tree, based on Ant.Ant Plugin Set Builder PrerequisitesJava Development Kit 8 (JDK).Apache Ant.JAVA_HOMEmust be set appropriately.Ant Plugin Set Builder DeclarationFor this plugin set builder type, thebuilderobject in the plugin set definition has the following structure:---
kind: PluginSet
id: ...
name: ...
builder:
  type: ant
  main: ...
  test: ...typeRequired.Must be set toant.mainOptional.The path (relative to the root of the project) to the plugins’ source code.Default:plugins/src.testOptional.The path (relative to the root of the project) to the plugins’ unit tests.Default:plugins/test/src.Plugin Registry CatalogTurtles commands that areDeploying Plugins(deploy-plugin,release-plugin) need a plugin registry catalog. It can be specified via the--plugin-registry-catalog/-roption, otherwise Turtles looks throughConfiguration Filesfor a file namedplugin-registry-catalog.yaml.A plugin set catalog is defined by a YAML document:---
kind: PluginRegistryCatalog
plugin-registry-files:
  - /path/to/some/file1.yaml
  - /path/to/another/file2.yaml
  - ...The contents are described below:kindRequired.Must be set toPluginRegistryCatalog.plugin-registry-filesRequired.A list of one or more paths toPlugin Registries.Plugin RegistriesA plugin registry is a structure containing LOCKSS plugins packaged as signed JAR files.Currently the only predefined structures are directory structures local to the file system, which are then typically served by a Web server.A plugin registry is defined by a YAML document:---
kind: PluginRegistry
id: mypluginregistry
name: My Plugin Registry
layout:
  type: ...
  ...
layers:
  - ...
plugin-identifiers:
  - edu.myuniversity.plugin.publisherx.PublisherXPlugin
  - edu.myuniversity.plugin.publishery.PublisherYPlugin
  - ...
suppressed-plugin-identifiers:
  - edu.myuniversity.plugin.old.OldPlugin
  - ...The contents are described below:kindRequired.Must be set toPluginRegistry.idRequired.A short identifier for the plugin registry, for examplemypluginregistry.nameRequired.A display name for the plugin registry, for exampleMy Plugin Registry.layoutRequired.An object defining the plugin registry’s layout together with its options.typeRequired.A plugin registry layout type. SeePlugin Registry Layoutsbelow.OtherAdditional properties depending on the plugin registry layout type. SeePlugin Registry Layoutsbelow.layersRequired.A list of objects describing the layers of the plugin registry. SeePlugin Registry Layersbelow.plugin-identifiersRequired.Non-empty list of the plugin identifiers in this plugin registry.suppressed-plugin-identifiersOptional.Non-empty list of plugin identifiers that are excluded from this plugin registry.Turtles does not currently do anything with this information, but it can be used to record plugins that have been abandoned or retracted over the lifetime of the plugin registry.Turtles does not currently do anything with this information, but it can be used to record plugins that have been abandoned or retracted over the lifetime of the plugin registry.Plugin Registry LayoutsTurtles supports two kinds of plugin registry layouts:Directory Plugin Registry LayoutRCS Plugin Registry LayoutDirectory Plugin Registry LayoutIn this type of plugin registry layout, each layer consists of a directory on the local file system where signed plugin JARs are stored, which is then typically served by a Web server. The directory for each layer is designated by the layer’spathproperty.Directory Plugin Registry Layout PrerequisitesNone.Directory Plugin Registry Layout DeclarationFor this plugin registry layout type, thelayoutobject in the plugin registry definition has the following structure:---
kind: PluginRegistry
id: ...
name: ...
layout:
  type: directory
  file-naming-convention: ...
layers:
  - ...
plugin-identifiers:
  - ...
suppressed-plugin-identifiers:
  - ...typeRequired.Must be set todirectory.file-naming-conventionOptional.A rule for what to name each deployed JAR file. If unspecified, the behavior is that ofidentifier. Can be one of:identifier: Use the plugin identifier and add.jar. For exampleedu.myuniversity.plugin.publisherx.PublisherXPluginresults inedu.myuniversity.plugin.publisherx.PublisherXPlugin.jar.underscore: Replace.in the plugin identifier with_, and add.jar. For exampleedu.myuniversity.plugin.publisherx.PublisherXPluginresults inedu_myuniversity_plugin_publisherx_PublisherXPlugin.jar.abbreviated: Use the last dotted component of the plugin identifier and add.jar. For exampleedu.myuniversity.plugin.publisherx.PublisherXPluginresults inPublisherXPlugin.jar.RCS Plugin Registry LayoutIn this specialization of theDirectory Plugin Registry Layout, each successive version of a given JAR is kept locally in RCS.RCS Plugin Registry Layout PrerequisitesGNU RCS.RCS Plugin Registry Layout DeclarationFor this plugin registry layout type, thelayoutobject in the plugin registry definition has the following structure:---
kind: PluginRegistry
id: ...
name: ...
layout:
  type: rcs
  file-naming-convention: ...
layers:
  - ...
plugin-identifiers:
  - ...
suppressed-plugin-identifiers:
  - ...typeRequired.Must be set torcs.file-naming-conventionOptional.A rule for what to name each deployed JAR file. If unspecified, the behavior is that ofidentifier. Can be one of:identifier: Use the plugin identifier and add.jar. For exampleedu.myuniversity.plugin.publisherx.PublisherXPluginresults inedu.myuniversity.plugin.publisherx.PublisherXPlugin.jar.underscore: Replace.in the plugin identifier with_, and add.jar. For exampleedu.myuniversity.plugin.publisherx.PublisherXPluginresults inedu_myuniversity_plugin_publisherx_PublisherXPlugin.jar.abbreviated: Use the last dotted component of the plugin identifier and add.jar. For exampleedu.myuniversity.plugin.publisherx.PublisherXPluginresults inPublisherXPlugin.jar.Plugin Registry LayersA plugin registry consists of one or more layers.Some plugin registries only one layer, in which case the LOCKSS boxes in a network using the plugin registry will get what is released to it. Some plugin registries may have two or more layers, with the additional layers used for plugin development or content processing quality assurance.Layers are sequential in nature; a new version of a plugin is released to the lowest layer first, then to the next layer (after some process), and so on until the highest layer. This sequencing is reflected in the ordering of thelayerslist in the plugin registry definition.Although the identifiers (seeidbelow) and display names (seenamebelow) of plugin registry layers are arbitrary, the highest layer is commonly referred to as theproductionlayer, and when there are exactly two layers, the lower layer is commonly referred to as thetestinglayer. Turtles reflects this common idiom with built-in--production/-pand--testing/-toptions that are shorthand for--layer=productionand--layer=testingrespectively.It is possible for multiple plugin registries to have a layerpathin common. An example would be a team working on several plugin registries for different purposes, having distinct (public) production layer paths, but sharing a single (internal) testing layer path, if they are the only audience for it.A plugin registry layer is defined as one of the objects in the plugin registry definition’slayerslist. Each layer object has the following structure:---
kind: PluginRegistry
id: ...
name: ...
layout:
  type: ...
  ...
layers:
  - id: testing
    name: My Plugin Registry (Testing)
    path: /path/to/testing
  - id: production
    name: My Plugin Registry (Production)
    path: /path/to/production
  - ...
plugin-identifiers:
  - ...
suppressed-plugin-identifiers:
  - ...idRequired.A short identifier for the plugin registry layer, for exampletesting.nameRequired.A display name for the plugin registry layer, for exampleMy Plugin Registry (Testing).pathRequired.The local path to the root of the plugin registry layer, for example/path/to/testing.Plugin Signing CredentialsTurtles commands that areBuilding Plugins(build-plugin,release-plugin) need a reference to plugin signing credentials. They can be specified via the--plugin-signing-credentials/-coption, otherwise Turtles looks throughConfiguration Filesfor a file namedplugin-signing-credentials.yaml.Plugin signing credentials are defined by a YAML document:---
kind: PluginSigningCredentials
plugin-signing-keystore: /path/to/myalias.keystore
plugin-signing-alias: myaliasThe contents are described below:kindRequired.Must be set toPluginSigningCredentials.plugin-signing-keystoreRequired.Path to the plugin signing key (keystore).plugin-signing-aliasRequired.The alias to use, which must be that of the plugin signing key (keystore) and also found in the LOCKSS network’s shared keystore.Command Line ToolTurtles is invoked at the command line as:turtlesor as a Python module:python3 -m lockss.turtlesHelp messages and this document useturtlesthroughout, but the two invocation styles are interchangeable.SynopsisTurtles usesCommands, in the style of programs likegit,dnf/yum,apt/apt-get, and the like. You can see the list of availableCommandsby invokingturtles--help, and you can find a usage summary of all theCommandsby invokingturtles usage:usage: turtles [-h] [--debug-cli] [--non-interactive] COMMAND ...

       turtles build-plugin [-h] [--output-format FMT] [--password PASS]
                            [--plugin-set-catalog FILE]
                            [--plugin-signing-credentials FILE]
                            [--identifier PLUGID] [--identifiers FILE]
                            [PLUGID ...]

       turtles copyright [-h]

       turtles deploy-plugin [-h] [--output-format FMT]
                             [--plugin-registry-catalog FILE] [--production]
                             [--testing] [--jar PLUGJAR] [--jars FILE]
                             [--layer LAYER] [--layers FILE]
                             [PLUGJAR ...]

       turtles license [-h]

       turtles release-plugin [-h] [--output-format FMT] [--password PASS]
                              [--plugin-registry-catalog FILE]
                              [--plugin-set-catalog FILE]
                              [--plugin-signing-credentials FILE]
                              [--production] [--testing] [--identifier PLUGID]
                              [--identifiers FILE] [--layer LAYER]
                              [--layers FILE]
                              [PLUGID ...]

       turtles usage [-h]

       turtles version [-h]CommandsThe available commands are:CommandAbbreviationPurposebuild-pluginbpbuild (package and sign) pluginscopyrightshow copyright and exitdeploy-plugindpdeploy pluginslicenseshow license and exitrelease-pluginrprelease (build and deploy) pluginsusageshow detailed usage and exitversionshow version and exitTop-Level ProgramThe top-level executable alone does not perform any action or default to a given command. It does define a few options, which you can see by invoking Turtles with the--help/-hoption:usage: turtles [-h] [--debug-cli] [--non-interactive] COMMAND ...

options:
  -h, --help            show this help message and exit
  --debug-cli           print the result of parsing command line arguments
  --non-interactive, -n
                        disallow interactive prompts (default: allow)

commands:
  Add --help to see the command's own help message.

  COMMAND               DESCRIPTION
    build-plugin (bp)   build (package and sign) plugins
    copyright           show copyright and exit
    deploy-plugin (dp)  deploy plugins
    license             show license and exit
    release-plugin (rp)
                        release (build and deploy) plugins
    usage               show detailed usage and exit
    version             show version and exitbuild-plugin(bp)Thebuild-plugincommand is used forBuilding Plugins. It has its own--help/-hoption:usage: turtles build-plugin [-h] [--output-format FMT] [--password PASS]
                            [--plugin-set-catalog FILE]
                            [--plugin-signing-credentials FILE]
                            [--identifier PLUGID] [--identifiers FILE]
                            [PLUGID ...]

Build (package and sign) plugins.

options:
  -h, --help            show this help message and exit
  --output-format FMT   set tabular output format to FMT (default: simple;
                        choices: asciidoc, double_grid, double_outline,
                        fancy_grid, fancy_outline, github, grid, heavy_grid,
                        heavy_outline, html, jira, latex, latex_booktabs,
                        latex_longtable, latex_raw, mediawiki, mixed_grid,
                        mixed_outline, moinmoin, orgtbl, outline, pipe, plain,
                        presto, pretty, psql, rounded_grid, rounded_outline,
                        rst, simple, simple_grid, simple_outline, textile,
                        tsv, unsafehtml, youtrack)
  --password PASS       set the plugin signing password
  --plugin-set-catalog FILE, -s FILE
                        load plugin set catalog from FILE (default:
                        $HOME/.config/lockss.turtles/plugin-set-
                        catalog.yaml or
                        /usr/local/share/lockss.turtles/plugin-set-
                        catalog.yaml or /etc/lockss.turtles/plugin-set-
                        catalog.yaml)
  --plugin-signing-credentials FILE, -c FILE
                        load plugin signing credentials from FILE (default:
                        $HOME/.config/lockss.turtles/plugin-signing-
                        credentials.yaml or
                        /usr/local/share/lockss.turtles/plugin-signing-
                        credentials.yaml or /etc/lockss.turtles/plugin-
                        signing-credentials.yaml)

plugin identifier arguments and options:
  --identifier PLUGID, -i PLUGID
                        add PLUGID to the list of plugin identifiers to build
  --identifiers FILE, -I FILE
                        add the plugin identifiers in FILE to the list of
                        plugin identifiers to build
  PLUGID                plugin identifier to buildThe command needs:Plugin Signing Credentials, either from the--plugin-signing-credentials/-coption or fromplugin-signing-credentials.yamlin theConfiguration Files.APlugin Set Catalog, either from the--plugin-set-catalog/-soption or fromplugin-set-catalog.yamlin theConfiguration Files.One or more plugin identifiers, from thePlugin Identifier Arguments and Options(bare arguments,--identifier/-ioptions,--identifiers/-Ioptions).It also acceptsOptionsforOutput Format ControlExamples:# Help message
turtles build-plugin --help
# Abbreviation
turtles bp -h

# List of plugin identifiers
turtles build-plugin edu.myuniversity.plugin.publisherx.PublisherXPlugin edu.myuniversity.plugin.publishery.PublisherYPlugin ...
# Abbreviation
turtles bp edu.myuniversity.plugin.publisherx.PublisherXPlugin edu.myuniversity.plugin.publishery.PublisherYPlugin ...

# Alternative invocation
turtles build-plugin --identifier=edu.myuniversity.plugin.publisherx.PublisherXPlugin --identifier=edu.myuniversity.plugin.publishery.PublisherYPlugin ...
# Abbreviation
turtles bp -i edu.myuniversity.plugin.publisherx.PublisherXPlugin -i edu.myuniversity.plugin.publishery.PublisherYPlugin ...

# Alternative invocation
# /tmp/pluginids.txt has one plugin identifier per line
turtles build-plugin --identifiers=/tmp/pluginids.txt
# Abbreviation
turtles bp -I /tmp/pluginids.txtcopyrightThecopyrightcommand displays the copyright notice for Turtles and exits.deploy-plugin(dp)Thedeploy-plugincommand is used forDeploying Plugins. It has its own--help/-hoption:usage: turtles deploy-plugin [-h] [--output-format FMT]
                             [--plugin-registry-catalog FILE] [--production]
                             [--testing] [--jar PLUGJAR] [--jars FILE]
                             [--layer LAYER] [--layers FILE]
                             [PLUGJAR ...]

Deploy plugins.

options:
  -h, --help            show this help message and exit
  --output-format FMT   set tabular output format to FMT (default: simple;
                        choices: asciidoc, double_grid, double_outline,
                        fancy_grid, fancy_outline, github, grid, heavy_grid,
                        heavy_outline, html, jira, latex, latex_booktabs,
                        latex_longtable, latex_raw, mediawiki, mixed_grid,
                        mixed_outline, moinmoin, orgtbl, outline, pipe, plain,
                        presto, pretty, psql, rounded_grid, rounded_outline,
                        rst, simple, simple_grid, simple_outline, textile,
                        tsv, unsafehtml, youtrack)
  --plugin-registry-catalog FILE, -r FILE
                        load plugin registry catalog from FILE (default:
                        $HOME/.config/lockss.turtles/plugin-registry-
                        catalog.yaml or
                        /usr/local/share/lockss.turtles/plugin-registry-
                        catalog.yaml or /etc/lockss.turtles/plugin-registry-
                        catalog.yaml)
  --production, -p      synonym for --layer=production (i.e. add 'production'
                        to the list of plugin registry layers to process)
  --testing, -t         synonym for --layer=testing (i.e. add 'testing' to the
                        list of plugin registry layers to process)

plugin JAR arguments and options:
  --jar PLUGJAR, -j PLUGJAR
                        add PLUGJAR to the list of plugin JARs to deploy
  --jars FILE, -J FILE  add the plugin JARs in FILE to the list of plugin JARs
                        to deploy
  PLUGJAR               plugin JAR to deploy

plugin registry layer options:
  --layer LAYER, -l LAYER
                        add LAYER to the list of plugin registry layers to
                        process
  --layers FILE, -L FILE
                        add the layers in FILE to the list of plugin registry
                        layers to processThe command needs:APlugin Registry Catalog, either from the--plugin-registry-catalog/-roption or fromplugin-signing-credentials.yamlin theConfiguration Files.One or more plugin registry layer IDs, from thePlugin Registry Layer Options(--layer/-loptions,--layers/-Loptions, and alternatively,--testing/-toptions,--production/-poption).One or more JAR paths. The list of JAR paths to process is derived from:The JAR paths listed as bare arguments to the command.The JAR paths listed as--jar/-joptions.The JAR paths found in the files listed as--jars/-Joptions.It also acceptsOptionsforOutput Format Control.Examples:# Help message
turtles deploy-plugin --help
# Abbreviation
turtles dp -h

# List of JARs
# Deploy to 'testing' layer only
turtles deploy-plugin --testing /path/to/edu.myuniversity.plugin.publisherx.PublisherXPlugin.jar /path/to/edu.myuniversity.plugin.publishery.PublisherYPlugin.jar ...
# Abbreviation
turtles dp -t /path/to/edu.myuniversity.plugin.publisherx.PublisherXPlugin.jar /path/to/edu.myuniversity.plugin.publishery.PublisherYPlugin.jar ...

# Alternative invocation
# Deploy to 'production' layer only
turtles deploy-plugin --production --jar=/path/to/edu.myuniversity.plugin.publisherx.PublisherXPlugin.jar --jar=/path/to/edu.myuniversity.plugin.publishery.PublisherYPlugin.jar ...
# Abbreviation
turtles dp -p -j /path/to/edu.myuniversity.plugin.publisherx.PublisherXPlugin.jar -j /path/to/edu.myuniversity.plugin.publishery.PublisherYPlugin.jar ...

# Alternative invocation
# /tmp/pluginjars.txt has one JAR path per line
# Deploy to both 'testing' and 'production' layers
turtles deploy-plugin --testing --production --jars=/tmp/pluginjars.txt
# Abbreviation
turtles bp -tp -J /tmp/pluginids.txtlicenseThelicensecommand displays the license terms for Turtles and exits.release-plugin(rp)Therelease-plugincommand is used forBuilding PluginsandDeploying Plugins, being essentiallybuild-pluginfollowed bydeploy-plugin. It has its own--help/-hoption:usage: turtles release-plugin [-h] [--output-format FMT] [--password PASS]
                              [--plugin-registry-catalog FILE]
                              [--plugin-set-catalog FILE]
                              [--plugin-signing-credentials FILE]
                              [--production] [--testing] [--identifier PLUGID]
                              [--identifiers FILE] [--layer LAYER]
                              [--layers FILE]
                              [PLUGID ...]

Release (build and deploy) plugins.

options:
  -h, --help            show this help message and exit
  --output-format FMT   set tabular output format to FMT (default: simple;
                        choices: asciidoc, double_grid, double_outline,
                        fancy_grid, fancy_outline, github, grid, heavy_grid,
                        heavy_outline, html, jira, latex, latex_booktabs,
                        latex_longtable, latex_raw, mediawiki, mixed_grid,
                        mixed_outline, moinmoin, orgtbl, outline, pipe, plain,
                        presto, pretty, psql, rounded_grid, rounded_outline,
                        rst, simple, simple_grid, simple_outline, textile,
                        tsv, unsafehtml, youtrack)
  --password PASS       set the plugin signing password
  --plugin-registry-catalog FILE, -r FILE
                        load plugin registry catalog from FILE (default:
                        $HOME/.config/lockss.turtles/plugin-registry-
                        catalog.yaml or
                        /usr/local/share/lockss.turtles/plugin-registry-
                        catalog.yaml or /etc/lockss.turtles/plugin-registry-
                        catalog.yaml)
  --plugin-set-catalog FILE, -s FILE
                        load plugin set catalog from FILE (default:
                        $HOME/.config/lockss.turtles/plugin-set-
                        catalog.yaml or
                        /usr/local/share/lockss.turtles/plugin-set-
                        catalog.yaml or /etc/lockss.turtles/plugin-set-
                        catalog.yaml)
  --plugin-signing-credentials FILE, -c FILE
                        load plugin signing credentials from FILE (default:
                        $HOME/.config/lockss.turtles/plugin-signing-
                        credentials.yaml or
                        /usr/local/share/lockss.turtles/plugin-signing-
                        credentials.yaml or /etc/lockss.turtles/plugin-
                        signing-credentials.yaml)
  --production, -p      synonym for --layer=production (i.e. add 'production'
                        to the list of plugin registry layers to process)
  --testing, -t         synonym for --layer=testing (i.e. add 'testing' to the
                        list of plugin registry layers to process)

plugin identifier arguments and options:
  --identifier PLUGID, -i PLUGID
                        add PLUGID to the list of plugin identifiers to build
  --identifiers FILE, -I FILE
                        add the plugin identifiers in FILE to the list of
                        plugin identifiers to build
  PLUGID                plugin identifier to build

plugin registry layer options:
  --layer LAYER, -l LAYER
                        add LAYER to the list of plugin registry layers to
                        process
  --layers FILE, -L FILE
                        add the layers in FILE to the list of plugin registry
                        layers to processThe command needs:Plugin Signing Credentials, either from the--plugin-signing-credentials/-coption or fromplugin-signing-credentials.yamlin theConfiguration Files.APlugin Set Catalog, either from the--plugin-set-catalog/-soption or fromplugin-set-catalog.yamlin theConfiguration Files.APlugin Registry Catalog, either from the--plugin-registry-catalog/-roption or fromplugin-signing-credentials.yamlin theConfiguration Files.One or more plugin registry layer IDs, from thePlugin Registry Layer Options(--identifier/-ioptions,--identifiers/-Ioptions, and alternatively,--testing/-toptions,--production/-poption).One or more plugin identifiers, from thePlugin Identifier Arguments and Options(bare arguments,--identifier/-ioptions,--identifiers/-Ioptions).It also acceptsOptionsforOutput Format Control.Examples:# Help message
turtles release-plugin --help
# Abbreviation
turtles rp -h

# List of plugin identifiers
# Deploy to 'testing' layer only
turtles release-plugin --testing edu.myuniversity.plugin.publisherx.PublisherXPlugin edu.myuniversity.plugin.publishery.PublisherYPlugin ...
# Abbreviation
turtles rp -t edu.myuniversity.plugin.publisherx.PublisherXPlugin edu.myuniversity.plugin.publishery.PublisherYPlugin ...

# Alternative invocation
# Deploy to 'production' layer only
turtles release-plugin --production --identifier=edu.myuniversity.plugin.publisherx.PublisherXPlugin --identifier=edu.myuniversity.plugin.publishery.PublisherYPlugin ...
# Abbreviation
turtles rp -p -i edu.myuniversity.plugin.publisherx.PublisherXPlugin -i edu.myuniversity.plugin.publishery.PublisherYPlugin ...

# Alternative invocation
# /tmp/pluginids.txt has one plugin identifier per line
# Deploy to both 'testing' and 'production' layers
turtles release-plugin --testing --production --identifiers=/tmp/pluginids.txt
# Abbreviation
turtles rp -tp -I /tmp/pluginids.txtusageTheusagecommand displays the usage message of all the TurtlesCommands.versionTheversioncommand displays the version number of Turtles and exits.OptionsPlugin Identifier Arguments and OptionsCommands that areBuilding Pluginsexpect one or more plugin identifiers. The list of plugin identifiers to process is derived from:The plugin identifiers listed as bare arguments to the command.The plugin identifiers listed as--identifier/-ioptions.The plugin identifiers found in the files listed as--identifiers/-Ioptions.Plugin Registry Layer OptionsCommands that areDeploying Pluginsexpect one or more plugin registry layer IDs. The list of plugin registry layer IDs to target is derived from:The plugin registry layer IDs listed as--layer/-loptions.The plugin registry layer IDs found in the files listed as--layers/-Loptions.As a convenience, the following synonyms also exist:--testing/-tis a synonym for--layer=testing--production/-pis a synonym for--layer=productionOutput Format ControlTurtles’ tabular output is performed by thetabulatelibrary through the--output-formatoption. See its PyPI page for a visual reference of the various output formats available. Thedefaultissimple.