Metadata-Version: 2.1
Name: nexus3-cli
Version: 1.0.2
Summary: A python-based CLI for Sonatype Nexus OSS 3
Home-page: https://github.com/thiagofigueiro/nexus3-cli
Author: Thiago Figueiró
License: MIT
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Topic :: System :: Systems Administration
Classifier: Topic :: Utilities
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.6
Description-Content-Type: text/markdown
Requires-Dist: clint
Requires-Dist: docopt
Requires-Dist: future
Requires-Dist: faker
Requires-Dist: inflect
Requires-Dist: py
Requires-Dist: requests[security] (>=2.14.2)
Requires-Dist: six
Provides-Extra: test
Requires-Dist: codecov ; extra == 'test'
Requires-Dist: flake8 ; extra == 'test'
Requires-Dist: pytest ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: pytest-helpers-namespace ; extra == 'test'
Requires-Dist: pytest-mock ; extra == 'test'
Requires-Dist: pytest-faker ; extra == 'test'

# nexus3-cli
A python-based command-line interface and API client for Sonatype's [Nexus 
OSS 3](https://www.sonatype.com/download-oss-sonatype).

[![Build Status](https://travis-ci.org/thiagofigueiro/nexus3-cli.svg?branch=master)](https://travis-ci.org/thiagofigueiro/nexus3-cli)
[![CodeFactor](https://www.codefactor.io/repository/github/thiagofigueiro/nexus3-cli/badge)](https://www.codefactor.io/repository/github/thiagofigueiro/nexus3-cli)
[![codecov](https://codecov.io/gh/thiagofigueiro/nexus3-cli/branch/master/graph/badge.svg)](https://codecov.io/gh/thiagofigueiro/nexus3-cli)
[![Documentation Status](https://readthedocs.org/projects/nexus3-cli/badge/?version=latest)](https://nexus3-cli.readthedocs.io/en/latest/?badge=latest)

## Features

1. Compatible with [Nexus 3 OSS](https://www.sonatype.com/download-oss-sonatype)
1. Python API and command-line support
1. Artefact management: list, upload, download, delete. 
1. Repository management:
   1. Create hosted and proxy.
   1. Create bower, maven, npm, nuget, pypi, raw, rubygems, yum.
   1. Content type validation, version and write policy.
   1. Delete.
1. Groovy script management: list, upload, delete, run.

The actions above are performed using the Nexus REST API if the endpoint is 
available, otherwise a groovy script is used. 

Please note that some Nexus 3 features are not currently supporter. Assistance 
implementing missing support is very welcome. Please have a look at the 
[issues](https://github.com/thiagofigueiro/nexus3-cli/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement)
and [contribution guidelines](https://github.com/thiagofigueiro/nexus3-cli/blob/develop/CONTRIBUTING.md).

## Installation

The nexus3-cli package is available on PyPi. You can install using pip/pip3:

```bash
pip install nexus3-cli
```

## Usage

### Command line


For a quick start, use the [sonatype/nexus3 Docker image](https://hub.docker.com/r/sonatype/nexus3/):


```bash
docker run -d --rm -p 8081:8081 sonatype/nexus3
```

Nexus will take a little while to start-up the first time you run it. You can
tell when it's available by looking at the Docker instance logs or browsing to
[http://localhost:8081](http://admin:admin123@localhost:8081).

If you haven't changed the default Nexus credentials, you can use it straight 
away; here's the list of default repositories:

```bash
$ nexus3 repo list
Name                                     Format  Type    URL
----                                     ------  ----    ---
maven-snapshots                          maven2  hosted  http://localhost:8081/repository/maven-snapshots
maven-central                            maven2  proxy   http://localhost:8081/repository/maven-central
nuget-group                              nuget   group   http://localhost:8081/repository/nuget-group
nuget.org-proxy                          nuget   proxy   http://localhost:8081/repository/nuget.org-proxy
maven-releases                           maven2  hosted  http://localhost:8081/repository/maven-releases
nuget-hosted                             nuget   hosted  http://localhost:8081/repository/nuget-hosted
maven-public                             maven2  group   http://localhost:8081/repository/maven-public
```

The `login` command will store the service URL and your credentials in 
`~/.nexus-cli` (warning: restrictive file permissions are set but the contents
are saved in plain-text).

```bash
$ nexus3 login
Nexus OSS URL (http://localhost:8081):
Nexus admin username (admin):
Nexus admin password (admin123):
```

Create a Yum repository with read-only access:
```bash
$ nexus3 repo create hosted yum my-yum-repository --write=deny
Created repository: my-yum-repository
```

The CLI output can be filtered using standard *nix tools, e.g. using `grep`:
```bash
$ nexus3 repo list | grep my-yum-repository
Name                                     Format  Type    URL
----                                     ------  ----    ---
my-yum-repository                        yum     hosted  http://localhost:8081/repository/my-yum-repository
```

For all commands and options, run `nexus3 -h`.

### API

See [API documentation](https://nexus3-cli.readthedocs.io/en/latest/api.html).

## Development

The automated tests are configured in `.travis.yml`. To run tests locally,
install the package with test dependencies and run pytest:

```bash
pip install -e .[test]
pytest -m 'not integration'
```

Integration tests require a local Nexus instance listening on 8081 or as
configured in `~/.nexus-cli`; the example configuration used for tests is in
`tests/fixtures/dot-nexus-cli`.

```bash
docker run -d --rm -p 127.0.0.1:8081:8081 --name nexus sonatype/nexus3
./tests/wait-for-nexus.sh  # the Nexus instance takes a while to be ready
pytest -m integration
docker kill nexus
```

Nota Bene: if you re-run integration tests without re-creating or cleaning-up the 
dev Nexus instance, test will fail because objects created during tests will 
already exist. 

Pull requests are welcome; please see [CONTRIBUTING.md](CONTRIBUTING.md).


