gemstash 1.0.0.pre.1-java → 2.5.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +295 -0
- data/exe/gemstash +3 -0
- data/lib/gemstash/api_key_authorization.rb +32 -0
- data/lib/gemstash/authorization.rb +15 -8
- data/lib/gemstash/cache.rb +42 -2
- data/lib/gemstash/cli/authorize.rb +52 -9
- data/lib/gemstash/cli/base.rb +14 -6
- data/lib/gemstash/cli/setup.rb +67 -39
- data/lib/gemstash/cli/start.rb +6 -2
- data/lib/gemstash/cli/status.rb +3 -1
- data/lib/gemstash/cli/stop.rb +4 -1
- data/lib/gemstash/cli.rb +59 -1
- data/lib/gemstash/config.ru +4 -3
- data/lib/gemstash/configuration.rb +56 -8
- data/lib/gemstash/db/authorization.rb +5 -3
- data/lib/gemstash/db/cached_rubygem.rb +20 -0
- data/lib/gemstash/db/dependency.rb +2 -0
- data/lib/gemstash/db/rubygem.rb +3 -0
- data/lib/gemstash/db/upstream.rb +15 -0
- data/lib/gemstash/db/version.rb +25 -2
- data/lib/gemstash/db.rb +5 -0
- data/lib/gemstash/dependencies.rb +6 -2
- data/lib/gemstash/env.rb +44 -13
- data/lib/gemstash/gem_fetcher.rb +5 -3
- data/lib/gemstash/gem_pusher.rb +25 -18
- data/lib/gemstash/gem_source/dependency_caching.rb +4 -4
- data/lib/gemstash/gem_source/private_source.rb +34 -50
- data/lib/gemstash/gem_source/rack_middleware.rb +3 -0
- data/lib/gemstash/gem_source/upstream_source.rb +71 -27
- data/lib/gemstash/gem_source.rb +4 -2
- data/lib/gemstash/gem_yanker.rb +14 -4
- data/lib/gemstash/health.rb +55 -0
- data/lib/gemstash/http_client.rb +15 -5
- data/lib/gemstash/logging.rb +19 -7
- data/lib/gemstash/man/gemstash-authorize.1 +54 -0
- data/lib/gemstash/man/gemstash-authorize.1.txt +52 -0
- data/lib/gemstash/man/gemstash-configuration.5 +186 -0
- data/lib/gemstash/man/gemstash-configuration.5.txt +208 -0
- data/lib/gemstash/man/gemstash-customize.7 +273 -0
- data/lib/gemstash/man/gemstash-customize.7.txt +184 -0
- data/lib/gemstash/man/gemstash-debugging.7 +30 -0
- data/lib/gemstash/man/gemstash-debugging.7.txt +27 -0
- data/lib/gemstash/man/gemstash-deploy.7 +63 -0
- data/lib/gemstash/man/gemstash-deploy.7.txt +57 -0
- data/lib/gemstash/man/gemstash-mirror.7 +34 -0
- data/lib/gemstash/man/gemstash-mirror.7.txt +31 -0
- data/lib/gemstash/man/gemstash-multiple-sources.7 +131 -0
- data/lib/gemstash/man/gemstash-multiple-sources.7.txt +116 -0
- data/lib/gemstash/man/gemstash-private-gems.7 +191 -0
- data/lib/gemstash/man/gemstash-private-gems.7.txt +154 -0
- data/lib/gemstash/man/gemstash-readme.7 +199 -0
- data/lib/gemstash/man/gemstash-readme.7.txt +177 -0
- data/lib/gemstash/man/gemstash-setup.1 +38 -0
- data/lib/gemstash/man/gemstash-setup.1.txt +38 -0
- data/lib/gemstash/man/gemstash-start.1 +23 -0
- data/lib/gemstash/man/gemstash-start.1.txt +24 -0
- data/lib/gemstash/man/gemstash-status.1 +17 -0
- data/lib/gemstash/man/gemstash-status.1.txt +20 -0
- data/lib/gemstash/man/gemstash-stop.1 +17 -0
- data/lib/gemstash/man/gemstash-stop.1.txt +20 -0
- data/lib/gemstash/man/gemstash-version.1 +17 -0
- data/lib/gemstash/man/gemstash-version.1.txt +19 -0
- data/lib/gemstash/migrations/01_gem_dependencies.rb +11 -9
- data/lib/gemstash/migrations/02_authorizations.rb +4 -2
- data/lib/gemstash/migrations/03_cached_gems.rb +26 -0
- data/lib/gemstash/migrations/04_health_tests.rb +10 -0
- data/lib/gemstash/migrations/05_authorization_names.rb +10 -0
- data/lib/gemstash/puma.rb +5 -3
- data/lib/gemstash/rack_env_rewriter.rb +11 -2
- data/lib/gemstash/specs_builder.rb +25 -15
- data/lib/gemstash/storage.rb +175 -32
- data/lib/gemstash/upstream.rb +43 -8
- data/lib/gemstash/version.rb +4 -2
- data/lib/gemstash/web.rb +13 -8
- data/lib/gemstash.rb +6 -2
- metadata +135 -110
- data/.gitignore +0 -10
- data/.rspec +0 -2
- data/.rubocop-bundler.yml +0 -92
- data/.rubocop-relax.yml +0 -11
- data/.rubocop.yml +0 -8
- data/.travis.yml +0 -20
- data/Gemfile +0 -4
- data/README.md +0 -139
- data/Rakefile +0 -35
- data/bin/console +0 -14
- data/bin/gemstash +0 -3
- data/bin/setup +0 -5
- data/docs/config.md +0 -136
- data/docs/debug.md +0 -24
- data/docs/deploy.md +0 -30
- data/docs/mirror.md +0 -30
- data/docs/multiple_sources.md +0 -68
- data/docs/private_gems.md +0 -140
- data/docs/reference.md +0 -308
- data/gemstash.gemspec +0 -47
- data/gemstash.png +0 -0
- data/lib/gemstash/gem_unyanker.rb +0 -61
data/README.md
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
[![Build Status](https://travis-ci.org/bundler/gemstash.svg?branch=master)](https://travis-ci.org/bundler/gemstash)
|
2
|
-
|
3
|
-
<p align="center"><img src="gemstash.png" /></p>
|
4
|
-
|
5
|
-
## What is Gemstash?
|
6
|
-
|
7
|
-
Gemstash is both a cache for remote servers such as https://www.rubygems.org,
|
8
|
-
and a private gem source.
|
9
|
-
|
10
|
-
If you are using [bundler](http://bundler.io/) across many machines that have
|
11
|
-
access to a server within your control, you might want to use Gemstash.
|
12
|
-
|
13
|
-
If you produce gems that you don't want everyone in the world to have access to,
|
14
|
-
you might want to use Gemstash.
|
15
|
-
|
16
|
-
If you frequently bundle the same set of gems across multiple projects, you
|
17
|
-
might want to use Gemstash.
|
18
|
-
|
19
|
-
Are you only using gems from https://www.rubygems.org, and don't bundle the same
|
20
|
-
gems frequently? Well, maybe you don't need Gemstash... yet.
|
21
|
-
|
22
|
-
## Quickstart Guide
|
23
|
-
|
24
|
-
### Setup
|
25
|
-
|
26
|
-
Gemstash is designed to be quick and painless to get set up. By the end of this
|
27
|
-
Quickstart Guide, you will be able to bundle stashed gems from public sources
|
28
|
-
against a Gemstash server running on your machine.
|
29
|
-
|
30
|
-
Install Gemstash to get started:
|
31
|
-
```
|
32
|
-
$ gem install gemstash
|
33
|
-
```
|
34
|
-
|
35
|
-
After it is installed, starting Gemstash requires no additional steps. Simply
|
36
|
-
start the Gemstash server with the `gemstash` command:
|
37
|
-
```
|
38
|
-
$ gemstash start
|
39
|
-
```
|
40
|
-
|
41
|
-
You may have noticed that the command finished quickly. This is because Gemstash
|
42
|
-
will run the server in the background by default. The server runs on port 9292.
|
43
|
-
|
44
|
-
### Bundling
|
45
|
-
|
46
|
-
With the server running, you can bundle against it. Create a simple `Gemfile`
|
47
|
-
like the following:
|
48
|
-
```ruby
|
49
|
-
# ./Gemfile
|
50
|
-
source "http://localhost:9292"
|
51
|
-
gem "rubywarrior"
|
52
|
-
```
|
53
|
-
|
54
|
-
The first line is important, as it will tell Bundler to use your new Gemstash
|
55
|
-
server. The gems you include should be gems you don't yet have installed,
|
56
|
-
otherwise Gemstash will have nothing to stash. Now bundle:
|
57
|
-
```
|
58
|
-
$ bundle install --path .bundle
|
59
|
-
```
|
60
|
-
|
61
|
-
Your Gemstash server has fetched the gems from https://www.rubygems.org and
|
62
|
-
cached them for you! To prove this, you can disable your Internet connection and
|
63
|
-
try again. The gem dependencies from https://www.rubygems.org are cached for 30
|
64
|
-
minutes, so if you bundle again before that, you can successfully bundle without
|
65
|
-
an Internet connection:
|
66
|
-
```
|
67
|
-
$ # Disable your Internet first!
|
68
|
-
$ rm -rf Gemfile.lock .bundle
|
69
|
-
$ bundle
|
70
|
-
```
|
71
|
-
|
72
|
-
### Stopping the Server
|
73
|
-
|
74
|
-
Once you've finish using your Gemstash server, you can stop it just as easily as
|
75
|
-
you started it:
|
76
|
-
```
|
77
|
-
$ gemstash stop
|
78
|
-
```
|
79
|
-
|
80
|
-
### Under the Hood
|
81
|
-
|
82
|
-
You might wonder where the gems are stored. After running the commands above,
|
83
|
-
you will find a new directory at `~/.gemstash`. This directory holds all the
|
84
|
-
cached and private gems. It also has a server log, the database, and
|
85
|
-
configuration for Gemstash. If you prefer, you can [point to a different
|
86
|
-
directory](docs/config.md#files).
|
87
|
-
|
88
|
-
Gemstash uses [SQLite](https://www.sqlite.org/) to store details about private
|
89
|
-
gems. The database will be located in `~/.gemstash`, however you won't see the
|
90
|
-
database appear until you start using private gems. If you prefer, you can [use
|
91
|
-
a different database](docs/config.md#database).
|
92
|
-
|
93
|
-
Gemstash temporarily caches things like gem dependencies in memory. Anything
|
94
|
-
cached in memory will last for 30 minutes before being retrieved again. You can
|
95
|
-
[use memcached](docs/config.md#cache) instead of caching in memory. Gem files
|
96
|
-
are always cached permanently, so bundling with a `Gemfile.lock` with all gems
|
97
|
-
cached will never call out to https://www.rubygems.org.
|
98
|
-
|
99
|
-
The server you ran is provided via [Puma](http://puma.io/) and
|
100
|
-
[Rack](http://rack.github.io/), however they are not customizable at this point.
|
101
|
-
|
102
|
-
## Deep Dive
|
103
|
-
|
104
|
-
For a deep dive into the following subjects, follow the links:
|
105
|
-
* [Private gems](docs/private_gems.md)
|
106
|
-
* [Multiple gem sources](docs/multiple_sources.md)
|
107
|
-
* [Using Gemstash as a mirror](docs/mirror.md)
|
108
|
-
* [Customizing the server (database, storage, caching, and more)](docs/config.md)
|
109
|
-
* [Deploying Gemstash](docs/deploy.md)
|
110
|
-
* [Debugging Gemstash](docs/debug.md)
|
111
|
-
|
112
|
-
## Reference
|
113
|
-
|
114
|
-
For an anatomy of various configuration and commands, follow the links:
|
115
|
-
* [Configuration](docs/reference.md#configuration)
|
116
|
-
* [Authorize](docs/reference.md#authorize)
|
117
|
-
* [Start](docs/reference.md#start)
|
118
|
-
* [Stop](docs/reference.md#stop)
|
119
|
-
* [Status](docs/reference.md#status)
|
120
|
-
* [Setup](docs/reference.md#setup)
|
121
|
-
|
122
|
-
## Development
|
123
|
-
|
124
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
125
|
-
`rake` to run RuboCop and the tests. While developing, you can run
|
126
|
-
`bin/gemstash` to run Gemstash. You can also run `bin/console` for an
|
127
|
-
interactive prompt that will allow you to experiment.
|
128
|
-
|
129
|
-
## Contributing
|
130
|
-
|
131
|
-
Bug reports and pull requests are welcome on GitHub at
|
132
|
-
https://github.com/bundler/gemstash. This project is intended to be a safe,
|
133
|
-
welcoming space for collaboration, and contributors are expected to adhere to
|
134
|
-
the [Contributor Covenant](CODE_OF_CONDUCT.md) code of conduct.
|
135
|
-
|
136
|
-
## License
|
137
|
-
|
138
|
-
The gem is available as open source under the terms of the
|
139
|
-
[MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require "rspec/core/rake_task"
|
3
|
-
require "rubocop/rake_task"
|
4
|
-
|
5
|
-
RuboCop::RakeTask.new
|
6
|
-
|
7
|
-
desc "Run specs"
|
8
|
-
RSpec::Core::RakeTask.new(:spec) do |t|
|
9
|
-
t.rspec_opts = %w(--color)
|
10
|
-
end
|
11
|
-
|
12
|
-
task :spec => :rubocop
|
13
|
-
task :default => :spec
|
14
|
-
|
15
|
-
desc "Generate Table of Contents for certain docs"
|
16
|
-
task :toc do
|
17
|
-
toc_dir = File.expand_path("../tmp/", __FILE__)
|
18
|
-
toc = File.join(toc_dir, "gh-md-toc")
|
19
|
-
|
20
|
-
unless File.exist?(toc)
|
21
|
-
require "open-uri"
|
22
|
-
toc_contents = open("https://raw.githubusercontent.com/ekalinin/github-markdown-toc/master/gh-md-toc", &:read)
|
23
|
-
Dir.mkdir(toc_dir) unless Dir.exist?(toc_dir)
|
24
|
-
File.write(toc, toc_contents)
|
25
|
-
File.chmod(0776, toc)
|
26
|
-
end
|
27
|
-
|
28
|
-
doc = File.expand_path("../docs/reference.md", __FILE__)
|
29
|
-
old_contents = File.read(doc)
|
30
|
-
old_contents.sub!(/\A.*?^---$/m, "---")
|
31
|
-
File.write(doc, old_contents)
|
32
|
-
toc_contents = `"#{toc}" "#{doc}"`
|
33
|
-
toc_contents.sub!(/Created by.*$/, "")
|
34
|
-
File.write(doc, "#{toc_contents}\n#{old_contents}")
|
35
|
-
end
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "gemstash"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start
|
data/bin/gemstash
DELETED
data/bin/setup
DELETED
data/docs/config.md
DELETED
@@ -1,136 +0,0 @@
|
|
1
|
-
# Customizing the Server
|
2
|
-
|
3
|
-
Although Gemstash is designed for as minimal setup as possible, there may be
|
4
|
-
times you will want to change some of the default configuration. By the end of
|
5
|
-
this guide, you will be able to customize some of the Gemstash behavior,
|
6
|
-
including where files are stored, what database Gemstash uses, and how Gemstash
|
7
|
-
caches certain requests.
|
8
|
-
|
9
|
-
## Setup
|
10
|
-
|
11
|
-
Several customizable options are available via an interactive Gemstash command.
|
12
|
-
Run `gemstash setup` and answer the questions it provides (a blank answer will
|
13
|
-
use the default value):
|
14
|
-
<pre>
|
15
|
-
$ gemstash setup
|
16
|
-
Where should files go? [~/.gemstash]
|
17
|
-
Cache with what? [MEMORY, memcached] <strong>memcached</strong>
|
18
|
-
What is the comma separated Memcached servers? [localhost:11211]
|
19
|
-
What database adapter? [SQLITE3, postgres] <strong>postgres</strong>
|
20
|
-
Where is the database? [postgres:///gemstash]
|
21
|
-
Checking that the cache is available
|
22
|
-
Checking that the database is available
|
23
|
-
The database is not available
|
24
|
-
</pre>
|
25
|
-
|
26
|
-
Once you've answered the questsions, some checks will be made to ensure the
|
27
|
-
configuration will work. For example, the database didn't exist in the previous
|
28
|
-
example, so the command failed and the configuration wasn't saved. If the
|
29
|
-
command passes, you may provide the `--redo` option to force configuration to be
|
30
|
-
redone:
|
31
|
-
<pre>
|
32
|
-
$ gemstash setup --redo
|
33
|
-
Where should files go? [~/.gemstash]
|
34
|
-
Cache with what? [MEMORY, memcached] <strong>memcached</strong>
|
35
|
-
What is the comma separated Memcached servers? [localhost:11211]
|
36
|
-
What database adapter? [SQLITE3, postgres]
|
37
|
-
Checking that the cache is available
|
38
|
-
Checking that the database is available
|
39
|
-
You are all setup!
|
40
|
-
</pre>
|
41
|
-
|
42
|
-
Once all checks have passed, Gemstash will store your answers in the
|
43
|
-
configuration file located at `~/.gemstash/config.yml`.
|
44
|
-
|
45
|
-
## Files
|
46
|
-
|
47
|
-
Storage in Gemstash defaults to `~/.gemstash` unless otherwise specified. You
|
48
|
-
can change this in your config file via the `:base_path` key:
|
49
|
-
```yaml
|
50
|
-
# ~/.gemstash/config.yml
|
51
|
-
---
|
52
|
-
:base_path: "/var/gemstash"
|
53
|
-
```
|
54
|
-
|
55
|
-
When customizing the `base_path`, the directory must exist, otherwise Gemstash
|
56
|
-
will fail to run. Thus, if you want to use `/var/gemstash` like in the previous
|
57
|
-
example, make sure to `mkdir /var/gemstash` and grant access to the directory
|
58
|
-
for the user you run Gemstash with.
|
59
|
-
|
60
|
-
## Database
|
61
|
-
|
62
|
-
The `:db_adapter` configuration key specifies what database you will be using.
|
63
|
-
The default `:db_adapter` is [`sqlite3`](https://www.sqlite.org/), which will
|
64
|
-
use a database file located within your `:base_path`. The database file will
|
65
|
-
always be named `gemstash.db`.
|
66
|
-
|
67
|
-
You may also use [`postgres`](http://www.postgresql.org/) for your
|
68
|
-
`:db_adapter`. When using PostgreSQL, you need to specify the `:db_url` to point
|
69
|
-
to an existing database. Here is an example configuration to use the `postgres`
|
70
|
-
adapter:
|
71
|
-
```yaml
|
72
|
-
# ~/.gemstash/config.yml
|
73
|
-
---
|
74
|
-
:db_adapter: postgres
|
75
|
-
:db_url: postgres:///gemstash
|
76
|
-
```
|
77
|
-
|
78
|
-
Regardless of the adapter you choose, the database will automatically migrate to
|
79
|
-
your version of Gemstash whenever the database is needed. Except for `sqlite3`,
|
80
|
-
you only need to ensure the database exists and Gemstash will do the rest.
|
81
|
-
|
82
|
-
## Cache
|
83
|
-
|
84
|
-
Certain things (like dependencies) are cached in memory. This avoids web calls
|
85
|
-
to the gem source, and database calls for private gems. The memory cache can
|
86
|
-
optionally be swapped out with a [Memcached](http://memcached.org/) server (or
|
87
|
-
cluster of servers). To use Memcached, you must update the `:cache_type`
|
88
|
-
configuration key to be `memcached`, and provide the servers via the
|
89
|
-
`:memcached_servers` configuration key:
|
90
|
-
```yaml
|
91
|
-
# ~/.gemstash/config.yml
|
92
|
-
---
|
93
|
-
:cache_type: memcached
|
94
|
-
:memcached_servers: memcached1.local:11211,memcached2.local:11211
|
95
|
-
```
|
96
|
-
|
97
|
-
Note that the `:memcached_servers` requires a comma separated list of servers.
|
98
|
-
All caching lasts for 30 minutes.
|
99
|
-
|
100
|
-
## Server
|
101
|
-
|
102
|
-
Gemstash uses [Puma](http://puma.io/) and [Rack](http://rack.github.io/) as the
|
103
|
-
server. Alternate server configurations are not currently supported, but you can
|
104
|
-
take a look at the [Puma configuration](../lib/gemstash/puma.rb) and the [rackup
|
105
|
-
file](../lib/gemstash/config.ru) for inspiration.
|
106
|
-
|
107
|
-
While the server is not customizable, the way Gemstash binds the port can be
|
108
|
-
changed. To change the binding, update the `:bind` configuration key:
|
109
|
-
```yaml
|
110
|
-
# ~/.gemstash/config.yml
|
111
|
-
---
|
112
|
-
:bind: tcp://0.0.0.0:4242
|
113
|
-
```
|
114
|
-
|
115
|
-
This maps directly to the [Puma bind
|
116
|
-
flag](https://github.com/puma/puma#binding-tcp--sockets), and will support
|
117
|
-
anything valid for that flag.
|
118
|
-
|
119
|
-
## Config File Location
|
120
|
-
|
121
|
-
By default, configuration for Gemstash will be at `~/.gemstash/config.yml`. This
|
122
|
-
can be changed by providing the `--config-file` option to the various Gemstash
|
123
|
-
commands:
|
124
|
-
```
|
125
|
-
$ gemstash setup --config-file ./gemstash-config.yml
|
126
|
-
$ gemstash authorize --config-file ./gemstash-config.yml
|
127
|
-
$ gemstash start --config-file ./gemstash-config.yml
|
128
|
-
$ gemstash stop --config-file ./gemstash-config.yml
|
129
|
-
$ gemstash status --config-file ./gemstash-config.yml
|
130
|
-
```
|
131
|
-
|
132
|
-
When providing `--config-file` to `gemstash setup`, the provided file will be
|
133
|
-
output to with the provided configuration. **This will overwrite** any existing
|
134
|
-
configuration. If the file doesn't exist when providing `--config-file` to
|
135
|
-
`gemstash start`, `gemstash stop`, `gemstash status`, and `gemstash authorize`,
|
136
|
-
the default configuration will be used.
|
data/docs/debug.md
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# Debugging Gemstash
|
2
|
-
|
3
|
-
If you are finding Gemstash isn't behaving as you would expect, you might want
|
4
|
-
to start by looking at the server log. You can find the log at `server.log`
|
5
|
-
within your base directory. By default, this will be at
|
6
|
-
`~/.gemstash/server.log`.
|
7
|
-
|
8
|
-
You might find it easier to view the log directly in your terminal. If you run
|
9
|
-
Gemstash [in non-daemonized form](reference.md#--no-daemonize), the log will be
|
10
|
-
output directly to standard out:
|
11
|
-
```
|
12
|
-
$ gemstash start --no-daemonize
|
13
|
-
```
|
14
|
-
|
15
|
-
You can also [check the status](reference.md#status) of the server:
|
16
|
-
```
|
17
|
-
$ gemstash status
|
18
|
-
```
|
19
|
-
|
20
|
-
The server status is checked by passing through to
|
21
|
-
[pumactl](https://github.com/puma/puma#pumactl).
|
22
|
-
|
23
|
-
If you find a bug, please don't hesitate to [open a bug
|
24
|
-
report](../README.md#contributing)!
|
data/docs/deploy.md
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
# Deploying Gemstash
|
2
|
-
|
3
|
-
Bundler is here for the rescue to keep Gemstash up to date! Create a `Gemfile`
|
4
|
-
pointing to Gemstash:
|
5
|
-
```ruby
|
6
|
-
# ./Gemfile
|
7
|
-
source "https://www.rubygems.org"
|
8
|
-
gem "gemstash"
|
9
|
-
```
|
10
|
-
|
11
|
-
Then `bundle` to create your `Gemfile.lock`. When you are ready to upgrade,
|
12
|
-
simply `bundle update`. You may need to run `gemstash` via `bundle exec`.
|
13
|
-
Alternatively, you can `gem uninstall gemstash` and `gem install gemstash` when
|
14
|
-
you want to upgrade.
|
15
|
-
|
16
|
-
Gemstash will automatically run any necessary migrations, so updating the gem is
|
17
|
-
all that needs to be done.
|
18
|
-
|
19
|
-
It is probably wise to stop Gemstash before upgrading, then starting again once
|
20
|
-
you are done:
|
21
|
-
```
|
22
|
-
$ bundle exec gemstash stop
|
23
|
-
$ bundle update
|
24
|
-
$ bundle exec gemstash start
|
25
|
-
```
|
26
|
-
|
27
|
-
## Downgrading
|
28
|
-
|
29
|
-
It is not recommended to go backwards in Gemstash versions. Migrations may have
|
30
|
-
run that could leave the database in a bad state.
|
data/docs/mirror.md
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
# Using Gemstash as a Mirror
|
2
|
-
|
3
|
-
If you don't have control over your `Gemfile`, or you don't want to force
|
4
|
-
everyone on your team to go through the Gemstash server, you can use Bundler
|
5
|
-
mirroring to bundle against your Gemstash server.
|
6
|
-
|
7
|
-
For each source in your `Gemfile`, add a mirror pointing to your Gemstash
|
8
|
-
server:
|
9
|
-
```
|
10
|
-
$ bundle config mirror.http://rubygems.org http://localhost:9292
|
11
|
-
$ bundle config mirror.https://my.gem-source.local http://localhost:9292/upstream/$(ruby -rcgi -e 'puts CGI.escape("https://my.gem-source.local")')
|
12
|
-
```
|
13
|
-
|
14
|
-
From now on, bundler will fetch gems from those sources via your Gemstash
|
15
|
-
server.
|
16
|
-
|
17
|
-
# Simpler Gemstash Mirrors
|
18
|
-
|
19
|
-
**WARNING: This feature is not yet available.**
|
20
|
-
|
21
|
-
**This feature requires Bundler to be at least version `1.11.0`.**
|
22
|
-
|
23
|
-
If you are using Bundler version `1.11.0` or greater, the mirroring becomes a
|
24
|
-
bit easier:
|
25
|
-
```
|
26
|
-
$ bundle config mirror.http://rubygems.org http://localhost:9292
|
27
|
-
$ bundle config mirror.https://my.gem-source.local http://localhost:9292
|
28
|
-
```
|
29
|
-
|
30
|
-
Bundler will then send headers to Gemstash to indicate the correct upstream.
|
data/docs/multiple_sources.md
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
# Multiple Gem Sources
|
2
|
-
|
3
|
-
Gemstash will stash from any amount of gem sources. By the end of this guide,
|
4
|
-
you will be able to bundle using multiple gem sources, all stashed within your
|
5
|
-
Gemstash server.
|
6
|
-
|
7
|
-
## Default Source
|
8
|
-
|
9
|
-
When you don't provide an explicit source (as with the [Quickstart
|
10
|
-
Guide](../README.md#quickstart-guide)), your gems will be fetched from
|
11
|
-
https://www.rubygems.org. This default source is not set in stone. To change it,
|
12
|
-
you need only edit the Gemstash configuration found at `~/.gemstash/config.yml`:
|
13
|
-
```yaml
|
14
|
-
# ~/.gemstash/config.yml
|
15
|
-
---
|
16
|
-
:rubygems_url: https://my.gem-source.local
|
17
|
-
```
|
18
|
-
|
19
|
-
Make sure to restart your Gemstash server after changing the config:
|
20
|
-
```
|
21
|
-
$ gemstash stop
|
22
|
-
$ gemstash start
|
23
|
-
```
|
24
|
-
|
25
|
-
Once restarted, bundling against `http://localhost:9292` will fetch gems from
|
26
|
-
`https://my.gem-source.local`. If you had bundled before making these changes,
|
27
|
-
fear not; bundling with a different default gem source will store gems in a
|
28
|
-
separate location, ensuring different sources won't leak between each other.
|
29
|
-
|
30
|
-
## Bundling with Multiple Sources
|
31
|
-
|
32
|
-
Changing the default source won't help you if you need to bundle against
|
33
|
-
https://www.rubygems.org along with additional sources. If you need to bundle
|
34
|
-
with multiple gem sources, Gemstash doesn't need to be specially configured.
|
35
|
-
Your Gemstash server will honor any gem source specified via a specialized URL.
|
36
|
-
Consider the following `Gemfile`:
|
37
|
-
```ruby
|
38
|
-
# ./Gemfile
|
39
|
-
require "cgi"
|
40
|
-
source "http://localhost:9292"
|
41
|
-
gem "rubywarrior"
|
42
|
-
|
43
|
-
source "http://localhost:9292/upstream/#{CGI.escape("https://my.gem-source.local")}" do
|
44
|
-
gem "my-gem"
|
45
|
-
end
|
46
|
-
```
|
47
|
-
|
48
|
-
Notice the `CGI.escape` call in the second source. This is important, as it
|
49
|
-
properly URL escapes the source URL so Gemstash knows what gem source you want.
|
50
|
-
The `/upstream` prefix tells Gemstash to use a gem source other than the default
|
51
|
-
source. You can now bundle with the additional source.
|
52
|
-
|
53
|
-
## Redirecting
|
54
|
-
|
55
|
-
Gemstash supports an alternate mode of specifying your gem sources. If you want
|
56
|
-
Gemstash to redirect Bundler to your given gem sources, then you can specify
|
57
|
-
your `Gemfile` like so:
|
58
|
-
```ruby
|
59
|
-
# ./Gemfile
|
60
|
-
require "cgi"
|
61
|
-
source "http://localhost:9292/redirect/#{CGI.escape("https://www.rubygems.org")}"
|
62
|
-
gem "rubywarrior"
|
63
|
-
```
|
64
|
-
|
65
|
-
Notice the `/redirect` prefix. This prefix tells Gemstash to redirect API calls
|
66
|
-
to the provided URL. Redirected calls like this will not be cached by Gemstash,
|
67
|
-
and gem files will not be stashed, even if they were previously cached or
|
68
|
-
stashed from the same gem source.
|
data/docs/private_gems.md
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
# Private Gems
|
2
|
-
|
3
|
-
Stashing private gems in your Gemstash server requires a bit of additional
|
4
|
-
setup. If you haven't read through the [Quickstart
|
5
|
-
Guide](../README.md#quickstart-guide), you should do that first. By the end of
|
6
|
-
this guide, you will be able to interact with your Gemstash server to store and
|
7
|
-
retrieve your private gems.
|
8
|
-
|
9
|
-
## Authorizing
|
10
|
-
|
11
|
-
**IMPORTANT NOTE:** Do not use the actual key value in this document, otherwise
|
12
|
-
your Gemstash server will be vulnerable to anyone who wants to try to use the
|
13
|
-
key against your server. Instead of the key value here, use whatever key is
|
14
|
-
generated from running the commands.
|
15
|
-
|
16
|
-
In order to push a gem to your Gemstash server, you need to first create an API
|
17
|
-
key. Utilize the `gemstash` command to create the API key:
|
18
|
-
```
|
19
|
-
$ gemstash authorize
|
20
|
-
Your new key is: e374e237fdf5fa5718d2a21bd63dc911
|
21
|
-
```
|
22
|
-
|
23
|
-
This new key can `push`, `yank`, and `unyank` gems from your Gemstash server.
|
24
|
-
Run `gemstash authorize` with just the permissions you want to limit what the
|
25
|
-
key will be allowed to do. You can similarly update a specific key by providing
|
26
|
-
it via the `--key` option:
|
27
|
-
```
|
28
|
-
$ gemstash authorize push yank --key e374e237fdf5fa5718d2a21bd63dc911
|
29
|
-
```
|
30
|
-
|
31
|
-
When no permissions are provided (like the first example), the key will be
|
32
|
-
authorized for all permissions. Leave the key authorized with everything if you
|
33
|
-
want to use it to try all private gem interactions:
|
34
|
-
```
|
35
|
-
$ gemstash authorize --key e374e237fdf5fa5718d2a21bd63dc911
|
36
|
-
```
|
37
|
-
|
38
|
-
With the key generated, you'll need to tell Rubygems about your new key. If
|
39
|
-
you've pushed a gem to https://www.rubygems.org, then you will already have a
|
40
|
-
credentials file to add the key to. If not, run the following commands before
|
41
|
-
modifying the credentials file:
|
42
|
-
```
|
43
|
-
$ mkdir -p ~/.gem
|
44
|
-
$ touch ~/.gem/credentials
|
45
|
-
$ chmod 0600 ~/.gem/credentials
|
46
|
-
```
|
47
|
-
|
48
|
-
Add your new key to credentials such that it looks something like this (but make
|
49
|
-
sure not to remove any existing keys):
|
50
|
-
```yaml
|
51
|
-
# ~/.gem/credentials
|
52
|
-
---
|
53
|
-
:test_key: e374e237fdf5fa5718d2a21bd63dc911
|
54
|
-
```
|
55
|
-
|
56
|
-
The name `test_key` can be anything you want, but you will need to remember it
|
57
|
-
and use it again later in this guide for the `--key` option.
|
58
|
-
|
59
|
-
## Creating a Test Gem
|
60
|
-
|
61
|
-
You'll need a test gem before you can play with private gems on your Gemstash
|
62
|
-
server. If you have a gem you can use, move along to the next section. You can
|
63
|
-
start by instantiating a test gem via Bundler:
|
64
|
-
```
|
65
|
-
$ bundle gem private-example
|
66
|
-
```
|
67
|
-
|
68
|
-
You'll need to add a summary and description to the new gem's gemspec file in
|
69
|
-
order to successfully build it. Once you've built the gem, you will be ready to
|
70
|
-
push the new gem.
|
71
|
-
```
|
72
|
-
$ cd private-example
|
73
|
-
$ rake build
|
74
|
-
```
|
75
|
-
|
76
|
-
You will now have a gem at `private-example/pkg/private-example-0.1.0.gem`.
|
77
|
-
|
78
|
-
## Pushing
|
79
|
-
|
80
|
-
If your Gemstash server isn't running, go ahead and start it:
|
81
|
-
```
|
82
|
-
$ gemstash start
|
83
|
-
```
|
84
|
-
|
85
|
-
Push your test gem using Rubygems:
|
86
|
-
```
|
87
|
-
$ gem push --key test_key --host http://localhost:9292/private pkg/private-example-0.1.0.gem
|
88
|
-
```
|
89
|
-
|
90
|
-
The `/private` portion of the `--host` option tells Gemstash you are interacting
|
91
|
-
with the private gems. Gemstash will not let you push, yank, or unyank from
|
92
|
-
anything except `/private`.
|
93
|
-
|
94
|
-
## Bundling
|
95
|
-
|
96
|
-
Once your gem is pushed to your Gemstash server, you are ready to bundle it.
|
97
|
-
Create a `Gemfile` and specify the gem. You will probably want to wrap the
|
98
|
-
private gem in a source block, and let the rest of Gemstash handle all other
|
99
|
-
gems:
|
100
|
-
```ruby
|
101
|
-
# ./Gemfile
|
102
|
-
source "http://localhost:9292"
|
103
|
-
gem "rubywarrior"
|
104
|
-
|
105
|
-
source "http://localhost:9292/private" do
|
106
|
-
gem "private-example"
|
107
|
-
end
|
108
|
-
```
|
109
|
-
|
110
|
-
Notice that the Gemstash server points to `/private` again when installing your
|
111
|
-
private gem. Go ahead and bundle to install your new private gem:
|
112
|
-
```
|
113
|
-
$ bundle
|
114
|
-
```
|
115
|
-
|
116
|
-
## Yanking
|
117
|
-
|
118
|
-
If you push a private gem by accident, you can yank the gem with Rubygems:
|
119
|
-
```
|
120
|
-
$ RUBYGEMS_HOST=http://localhost:9292/private gem yank --key test_key private-example --version 0.1.0
|
121
|
-
```
|
122
|
-
|
123
|
-
Like with pushing, the `/private` portion of the host option tells Gemstash you
|
124
|
-
are interacting with private gems. Gemstash will only let you yank from
|
125
|
-
`/private`. Unlike pushing, Rubygems doesn't support `--host` for yank and
|
126
|
-
unyank (yet), so you need to specify the host via the `RUBYGEMS_HOST`
|
127
|
-
environment variable.
|
128
|
-
|
129
|
-
## Unyanking
|
130
|
-
|
131
|
-
If you yank a private gem by accident, you can unyank the gem with Rubygems:
|
132
|
-
```
|
133
|
-
$ RUBYGEMS_HOST=http://localhost:9292/private gem yank --key test_key private-example --version 0.1.0 --undo
|
134
|
-
```
|
135
|
-
|
136
|
-
Like with pushing and yanking, the `/private` portion of the host option tells
|
137
|
-
Gemstash you are interacting with private gems. Gemstash will only let you
|
138
|
-
unyank from `/private`. Unlike pushing, Rubygems doesn't support `--host` for
|
139
|
-
unyank and yank (yet), so you need to specify the host via the `RUBYGEMS_HOST`
|
140
|
-
environment variable.
|