Git Product home page Git Product logo

gem-release's Introduction

gem release

This gem plugin adds a bootstrap, bump, tag and a release command to the rubygems gem command.

Project Gem Release
gem name gem-release
license MIT
version Gem Version
continuous integration Build Status
test coverage Coverage Status
homepage https://github.com/svenfuchs/gem-release
documentation http://rdoc.info/github/svenfuchs/gem-release/frames

Basic Commands

The bump command

  • bumps the version number defined in lib/[gem_name]/version.rb to the next major, minor or patch level or to a given, particular version number
  • optionally invokes the release command (see below)
  • optionally invokes the tag command (see below)
  • if tag is not invoked, can optionally just push to git (i.e. git push origin) if the --push option is specified

The tag command

  • executes git tag -am "tag [tag_name]" [tag_name], with tag_name being the version number as specified in your .gemspec preceded by v (e.g. v0.0.1)
  • executes git push origin
  • executes git push --tags origin

The release command

  • builds a gem from your gemspec
  • pushes the gem to rubygems.org (or another gemcutter-compatible host)
  • deletes the gem file
  • optionally invokes the tag command

The gemspec command

  • generates an initial [gem_name].gemspec file with sane defaults (will overwrite an existing gemspec)

The bootstrap command

  • generates an initial [gem_name].gemspec file with sane defaults and scaffolds: lib/[gem_name]/version.rb, README.md, test/
  • optionally inits a git repo, creates it on github and pushes it to github (requires git config for github.user and github.token to be set)

Installation

Obviously ...

$ gem install gem-release

Usage

$ gem release your.gemspec       # builds the gem and pushes it to rubygems.org
$ gem release                    # uses the first *.gemspec in the current working directory
$ gem release --tag              # also executes gem tag
$ gem release --key KEY          # use the specified API key from ~/.gem/credentials
$ gem release --host HOST        # push to a gemcutter-compatible host other than rubygems.org
$ gem release --quiet            # suppress output status messages

$ gem tag                        # creates a git tag and pushes to the origin git repository

$ gem gemspec                    # generates a [gem_name].gemspec using  Dir["{lib/**/*,[A-Z]*}"]
$ gem gemspec --strategy git     # uses s.files = `git ls-files app lib`.split("\n")

$ gem bootstrap                  # generates a [gem_name].gemspec using the current directory name
                                 #  and scaffolds lib/[gem_name]/version.rb, README, test/
$ gem bootstrap your_gem         # creates a your_gem directory, bootstraps your_gem and inits a git repo
$ gem bootstrap --github         # inits a git repo, creates it on github and pushes it to github
                                 #  (requires git config for github.user and github.token to be set)

$ gem bump                       # Bump the gem version to the next patch or pre-release level
                                 #  (e.g. 0.0.1 to 0.0.2, 1.0.0.pre1 to 1.0.0.pre2, 1.0.0.rc1 to 1.0.0.rc2)
$ gem bump --version 1.1.1       # Bump the gem version to the given version number
$ gem bump --version major       # Bump the gem version to the next major level (e.g. 0.0.1 to 1.0.0)
$ gem bump --version minor       # Bump the gem version to the next minor level (e.g. 0.0.1 to 0.1.0)
$ gem bump --version patch       # Bump the gem version to the next patch level (e.g. 0.0.1 to 0.0.2)
$ gem bump --version pre|rc|etc  # Bump the gem version to the next pre-release level
                                 #  (e.g. `pre`: 1.0.0.pre1 to 1.0.0.pre2, 0.0.1 to 0.0.2.pre1;
                                 #        `beta`: 1.0.0.beta1 to 1.0.0.beta2, 0.0.1 to 0.0.2.beta1)
$ gem bump --version release     # Remove any pre-release versioning
                                 #  (e.g. 1.0.0.pre2 to 1.0.0, 1.0.0.beta to 1.0.0)
                                 #  (if no pre-release versions are present, the patch level will be bumped)
$ gem bump --push                # Bump and push to the origin git repository
$ gem bump --tag                 # Bump and tag gem and pushes tags to the origin repository
$ gem bump --release             # Bump and release gem
$ gem bump --release --key KEY   # Bump and release the gem, using the specified API key from ~/.gem/credentials
$ gem bump --release --host HOST # Bump and release the gem to a gemcutter-compatible host other than rubygems.org
$ gem bump --release --quiet     # Bump and release the gem, suppressing output status messages
$ gem bump --tag --release       # Bump, tag, push and release gem
$ gem bump --no-commit           # Bump the gem version but don't git commit
                                 #  (will be ignored if combined with push, tag or release)

When bumping versions for a gem named foo-bar, the following paths will be searched in order for version.rb:

`lib/foo-bar/version.rb`
`lib/foo/bar/version.rb`
`lib/foo_bar/version.rb`

The first version.rb file encountered will be considered definitive for the gem and will be bumped.

If the current directory (and subdirectories) contain multiple *.gemspec files, then each of these gems will be bumped to the same version. gem-release will search the above paths, relative to the directory of the gemspec file, for matching version.rb files and bump the version in each of them. The version will either be the version specified with the --version option or the next patch level for the first version.rb file encountered.

Configuration file

Configuration options can be stored in a .gemrelease file in the root of your project. This configuration file should be in YAML format, and should group options according to command.

For instance, the following entries will ensure that the tag option is used with the bump command, and will also use a custom host name with release:

bump:
  tag: true

release:
  host: https://example.com

The defaults specified in .gemrelease can be overridden when issuing gem commands.

License

MIT License

gem-release's People

Contributors

bmaland avatar charleseff avatar dgeb avatar edmellum avatar huerlisi avatar kubum avatar martikaljuve avatar nono avatar pboling avatar pietia avatar shaiguitar avatar unifiedpost-pullreview avatar zph avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.