Skip to content

jdamick/sega

Repository files navigation

SEGA - Self-Extracting Gem Archive

Gem Version

This is a tool that will help you create a self-extracting gem (cli) archive.

The executable archive will contain a small installer, the gem, and cached dependencies. The executable will unzip itself and place the bundled gem in a target directory (default: /usr/local/) and create shim scripts for files specified in the gemspec bindir. The shim will use rbenv (if possible) so the proper ruby version is used and then run the gem cli within the context of bundler so that the proper dependencies are used.

Similar in concept to traveling-ruby or orca or releasy but it makes some basic assumptions to simplify the package.

Assumes:

  • target machine has ruby (preferably rbenv)
  • target machine has bundler

For example:

# create new cli gem
# create exe/<whatever>
# git add -A

$ $EDITOR Gemfile

## Add these lines:

require 'sega/rake_task'

Sega::RakeTask.new() do |t|
  t.bundler_version = '1.10.6' # uses gem version comparison operators
  t.ruby_version = '~> 2.3.0' # uses gem version comparison operators
end


$ bundle install
Resolving dependencies...
Using rake 10.5.0
Using bundler 1.10.6
Using hello-sega 0.1.0 from source at .
Using sega 0.1.2
Updating files in vendor/cache
Bundle complete! 4 Gemfile dependencies, 4 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

$ bundle exec rake sega:package
Using rake 10.5.0
Using bundler 1.10.6
Using hello-sega 0.1.0 from source at .
Using sega 0.1.2
Updating files in vendor/cache
Bundle complete! 4 Gemfile dependencies, 4 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Updating files in vendor/cache
Created Self-Extracting Gem Archive: hello-sega.run

$ ./hello-sega.run
created target shim: /usr/local/bin/hello-sega

$ hello-sega
Hello SEGA!

See Example Code

Installation

Add this line to your application's Gemfile:

gem 'sega'

And then execute:

$ bundle

Or install it yourself as:

$ gem install sega

Usage

Only tested on linux & mac right now

Configure

Add to your Rakefile:


require 'sega/rake_task'

Sega::RakeTask.new() do |t|
  t.bundler_version = '1.10.6' # uses gem version comparison operators
  t.ruby_version = '~> 2.3.0' # uses gem version comparison operators
end

Build

Create the self-extracting gem archive:

bundle exec rake sega:package

Will generate: <project name>.run

Install

./<project name>.run <optional: target directory> <optional: target binstub directory>

Default target directory: /usr/local/<project name/

Default target binstub directory: /usr/local/bin/

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake false to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

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, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/jdamick/sega.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published