Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sepulworld/aptly_cli

Aptly client
https://github.com/sepulworld/aptly_cli

aptly aptly-server docker ruby

Last synced: about 1 month ago
JSON representation

Aptly client

Awesome Lists containing this project

README

        

# AptlyCli

[![Build Status](https://travis-ci.org/sepulworld/aptly_cli.svg)](https://travis-ci.org/sepulworld/aptly_cli)
[![Gem Version](https://badge.fury.io/rb/aptly_cli.svg)](http://badge.fury.io/rb/aptly_cli)
[![Coverage Status](https://coveralls.io/repos/github/sepulworld/aptly_cli/badge.svg?branch=master)](https://coveralls.io/github/sepulworld/aptly_cli?branch=master)
[![](https://images.microbadger.com/badges/image/sepulworld/aptly-cli.svg)](http://microbadger.com/images/sepulworld/aptly-cli "Get your own image badge on microbadger.com")
[![](https://images.microbadger.com/badges/version/sepulworld/aptly-cli.svg)](http://microbadger.com/images/sepulworld/aptly-cli "Get your own version badge on microbadger.com")

A command line interface to execute [Aptly](http://aptly.info) commands againts remote Aptly API servers. Aptly-cli will allow you to interact with the file, repo, snapshot, publish, packages, graph and version API endpoints of your Aptly server.

## Installation

### Install Gem:

$ gem install aptly_cli

or...

### Install and run aptly-cli from Docker:

# Optional: If you don't pull explicitly, `docker run` will do it for you
$ docker pull sepulworld/aptly-cli

$ alias aptly-cli='\
docker run \
-v /etc/aptly-cli.conf:/etc/aptly-cli.conf \
-it --rm --name=aptly-cli \
sepulworld/aptly-cli'

(Depending on how your system is set up, you might have to add `sudo` in front of the above `docker` commands or add your user to the `docker` group).

If you don't do the `docker pull`, the first time you run `aptly-cli`, the `docker run` command will automatically pull [the `sepulworld/aptly-cli` image on the Docker Hub](https://hub.docker.com/r/sepulworld/aptly-cli/). Subsequent runs will use a locally cached copy of the image and will not have to download anything.

Create a configuration file with aptly server and port, `/etc/aptly-cli.conf` (YAML syntax):

```yaml
---
:proto: http
:server: 127.0.0.1
:port: 8082
:debug: false
```

If you use Basic Authentication to protect your API, add username and password:

```yaml
:username: api-user
:password: api-password
```

The username and password can also be configured for prompt entry using
the following in `aptly-cli.conf`:

```yaml
:username: ${PROMPT}
:password: ${PROMPT_PASSWORD}
```

The tool will prompt for the specified values, where `${PROMPT}` results
in a regular prompt and `${PROMPT_PASSWORD}` results in a password
prompt where the input is replaced by asterisks, e.g.:

$ aptly-cli version
Enter a value for username:
zane
Enter a value for password:
********

Another possibility for storing passwords is `${KEYRING}`. To use this feature,
you must have the [`keyring` gem](https://github.com/jheiss/keyring) installed
and also have a system that is set up to use one of the backends that the
`keyring` gem supports, such as Mac OS X Keychain or GNOME 2 Keyring (Note:
Only Mac OS X Keychain has been tested thus far):

$ gem install keyring

Then you can put something like this in `aptly-cli.conf`:

```yaml
:username: zane
:password: ${KEYRING}
```

The first time you run an `aptly-cli` command, you will be prompted to enter a
password.

$ aptly-cli version
Enter a value for password:
***************

The entered password will be stored in your keyring so that future uses of
`aptly-cli` can get the password from your keyring:

$ aptly-cli version
{"Version"=>"0.9.7"}

Also make sure that your config file isn't world readable (```chmod o-rw /etc/aptly-cli.conf```)

If a configuration file is not found, the defaults in the example
configuration file above will be used.

## Usage - available aptly-cli commands

The `--config` (`-c`) option allows specifying an alternative config file, e.g.:

$ aptly-cli -c ~/.config/aptly-cli/aptly-cli.conf repo_list

The `--server`, `--port`, `--username`, and `--password` options allow specifying
those things on the command-line and not even requiring a config file.

$ aptly-cli --server 10.3.0.46 --port 9000 --username marca --password '${PROMPT_PASSWORD}' repo_list

Note that you can use `${PROMPT}`, `${PROMPT_PASSWORD}`, and `${KEYRING}` in
the values of these options, just as you can in a config file. Note that you
might have to quote them to prevent the shell from trying to expand them.

$ aptly-cli --help
NAME:

aptly-cli

DESCRIPTION:

Aptly repository API client (https://github.com/sepulworld/aptly_cli)

COMMANDS:

file_delete File delete
file_list List all directories
file_upload File upload
graph Download an svg or png graph of repository layout
help Display global or [command] help documentation
publish_drop Delete published repository
publish_list List published repositories
publish_repo Publish local repository or snapshot under specified prefix
publish_update Update published repository
repo_create Create a new repository, requires --name
repo_delete Delete a local repository, requires --name
repo_edit Edit a local repository metadata, requires --name
repo_list Show list of currently available local repositories
repo_package_add Add existing package to local repository
repo_package_delete Delete package from local repository
repo_package_query List all packages or search on repo contents, requires --name
repo_show Returns basic information about local repository
repo_upload Import packages from files
snapshot_create Create snapshot, require --name
snapshot_delete Delete snapshot, require --name
snapshot_diff Calculate difference between two snapshots
snapshot_list Return list of all snapshots created in the system
snapshot_search List all packages in snapshot or perform search
snapshot_show Get information about snapshot by name
snapshot_update Update snapshot’s description or name
version Display aptly server version

GLOBAL OPTIONS:

-c, --config FILE
Path to YAML config file

--no-config
Don't try to read YAML config file

-s, --server SERVER
Host name or IP address of Aptly API server

-p, --port PORT
Port of Aptly API server

--username USERNAME
User name or '${PROMPT}'

--password PASSWORD
Password or '${PROMPT_PASSWORD}' or '${KEYRING}'

--debug
Enable debug output

-h, --help
Display help documentation

-v, --version
Display version information

-t, --trace
Display backtrace when an error occurs

### To see more options for each command

$ aptly-cli --help

## Development

### Measuring coverage locally

```
$ rake docker_pull
$ rake docker_run
$ bundle exec rake test
...
Coverage report generated for Unit Tests to /Users/marca/dev/git-repos/aptly_cli/coverage. 521 / 566 LOC (92.05%) covered.
[Coveralls] Outside the CI environment, not sending data.

$ open coverage/index.html
```

screen shot 2016-07-25 at 8 38 28 pm

### Rubocop syntax and style check

```bash
$ bundle exec rake rubocop
Running RuboCop...
Inspecting 24 files
WCCCWC..CCCC.CCC.WCWCCCC
...
```

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

Ruby Minitest are implemented using a Docker container for functional tests.

Rake tasks available:

```bash
rake build # Build aptly_cli-.gem into the pkg directory
rake clean # Remove any temporary products
rake clobber # Remove any generated files
rake docker_build # Docker build image
rake docker_list_aptly # List Docker Aptly running containers
rake docker_pull # Pull Docker image to Docker Hub
rake docker_push # Push Docker image to Docker Hub
rake docker_restart # Restart Aptly docker container
rake docker_run # Start Aptly Docker container on port 8082
rake docker_show_logs # Show running Aptly process Docker stdout logs
rake docker_stop # Stop running Aptly Docker containers
rake install # Build and install aptly_cli-.gem into system gems
rake install:local # Build and install aptly_cli-.gem into system gems without network access
rake rubocop # Run RuboCop
rake rubocop:auto_correct # Auto-correct RuboCop offenses
rake test # Run tests
```

## Contributing

1. Fork it ( https://github.com/[my-github-username]/aptly_cli/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request

## Related

- [ruby-aptly](https://github.com/ryanuber/ruby-aptly) - Ruby client library
- [aptly-web-ui](https://github.com/sdumetz/aptly-web-ui) - Web interface for aptly (JavaScript, React, Redux)