{"id":22289420,"url":"https://github.com/tf/semmy","last_synced_at":"2025-09-20T09:43:04.860Z","repository":{"id":34430599,"uuid":"38363744","full_name":"tf/semmy","owner":"tf","description":"Release gems following semantic versioning principles","archived":false,"fork":false,"pushed_at":"2019-01-24T15:37:47.000Z","size":82,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-02T03:11:19.423Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-07-01T09:58:50.000Z","updated_at":"2021-11-23T22:13:28.000Z","dependencies_parsed_at":"2022-08-17T20:40:50.680Z","dependency_job_id":null,"html_url":"https://github.com/tf/semmy","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tf%2Fsemmy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tf%2Fsemmy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tf%2Fsemmy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tf%2Fsemmy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tf","download_url":"https://codeload.github.com/tf/semmy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245543847,"owners_count":20632728,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-03T17:09:07.259Z","updated_at":"2025-09-20T09:42:59.825Z","avatar_url":"https://github.com/tf.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Semmy\n\n[![Gem Version](https://badge.fury.io/rb/semmy.svg)](http://badge.fury.io/rb/semmy)\n[![Dependency Status](https://gemnasium.com/badges/github.com/tf/semmy.svg)](https://gemnasium.com/github.com/tf/semmy)\n[![Build Status](https://travis-ci.org/tf/semmy.svg?branch=master)](https://travis-ci.org/tf/semmy)\n[![Coverage Status](https://coveralls.io/repos/github/tf/semmy/badge.svg?branch=master)](https://coveralls.io/github/tf/semmy?branch=master)\n[![Code Climate](https://codeclimate.com/github/tf/semmy/badges/gpa.svg)](https://codeclimate.com/github/tf/semmy)\n\nAn opinionated set of rake tasks to maintain gems following semantic\nversioning principles.\n\n## Assumptions\n\n### Git Branches and Tags\n\nDevelopment happens directly on `master` or by merging pull\nrequests. When a release is made, a stable branch called `x-y-stable`\nis created. Semmy relies on Bundler's `release` task to create version\ntags.\n\nPatch level versions are released via backports to the stable\nbranches.\n\n### Version Suffix\n\nThe version in the gem's version file is increased in a separate\ncommit right after release. The version always has an `dev` suffix\n(i.e. `1.1.0.dev`), which is only removed in the last commit\npreparing the release. That way it is easy to see in a project's\n`Gemfile.lock` whether an unreleased version is used.\n\nPatch level versions are expected to be released immediately after\nbackporting bug fixes. So there are never commits with a version\nsuffix on stable branches.\n\n### Doc Tags\n\nPull requests introducing new features, are expected to markup new\ncode elements with a `@since edge` doc tag. When a release is\nprepared, `edge` is replaced with the current version string. That way\npull request authors do not have to guess, which version will merge\ntheir commits.\n\n### Changelog\n\nUnreleased changes are listed in a section at the top. When preparing\na release this section is closed by placing a version heading above it\nand inserting a compare link. Changelog entries for patch level\nversions are only committed on the stable branches since they only\nbackport bug fixes from master.\n\n## Installation\n\nAdd development dependency to your gemspec:\n\n    # your.gemspec\n    s.add_development_dependency 'semmy', '~\u003e 1.0'\n\nInstall gems:\n\n    $ bundle\n\nAdd the tasks to your Rakefile:\n\n    # Rakefile\n    require 'semmy'\n\n    Semmy::Tasks.install\n\nYou can pass config options:\n\n    # Rakefile\n    require 'semmy'\n\n    Semmy::Tasks.install do |config|\n      # see Semmy::Configuration for options\n    end\n\n## Usage\n\nSemmy defines a new task to prepare a release:\n\n    $ rake release:prepare\n\nThis task:\n\n* Ensures the gem can be installed.\n* Removes the `dev` version suffix from the version file.\n* Rewrites doc tags.\n* Closes the section of the new version in the changelog.\n* Commits the changes.\n\nIt is expected that a `release` task exists. Normally this tasks is\nprovided by Bundler.\n\n    $ rake release\n\nSemmy registers additional actions which shall be\nexecuted right after the release:\n\n* Creates a stable branch.\n* Bumps the version to the next minor version with `alpha` version\n  suffix.\n* Inserts an \"Unreleased Changes\" section in the changelog.\n\nThe resulting commit graph looks like:\n\n    * (master) Bump version to 1.3.0.dev\n    * (v1.2.0, 1-2-stable) Prepare 1.2.0 release\n    * Some new feature\n\nBy default, the new stable branch and the bump commit are not pushed\nautomatically. This can be activated by setting the\n`push_branches_after_release` config option to `true`.\n\nThis will be the new default once Semmy 2.0 is released. You can opt\ninto the future default behavior globally without changing config\noptions on the project level by setting the\n`SEMMY_PUSH_BRANCHES_AFTER_RELEASE` environment variable to `on`.\n\nBranches will be pushed to the remote passed as an argument to the\n`release` task:\n\n    $ rake release[upstream]\n\nBy default, branches are pushed to `origin`.\n\n### Releasing a Patch Level Version\n\nAssume an important bug fix has been added to `master`:\n\n    * (master) Important bug fix\n    * First new feature\n    * Bump version to 1.3.0.dev\n    * (v1.0.0, 1-2-stable) Prepare 1.2.0 release\n\ncheck out the stable branch and cherry pick commits:\n\n    $ git checkout 1-2-stable\n    $ git cherry-pick master\n\nThen run:\n\n    $ rake bump:patch\n\nThis task:\n\n* Bumps the version to `1.2.1` in the version file.\n* Inserts an \"Unreleased Changes\" section in the changelog.\n\nAdd items to the new changelog section, then run:\n\n    $ rake release:prepare\n\nThis task detects that we are currently on a stable branch and\nperforms the following subset of the normal prepare tasks:\n\n* Closes the section of the new version in the changelog.\n* Commits the changes\n\nYou can now run `rake release`, leaving you with the following commit\ngraph:\n\n    * (master) Important bug fix\n    * First new feature\n    * Bump version to 1.3.0.dev\n    | * (v1.2.1, 1-2-stable) Prepare 1.2.1 release\n    | * Important bug fix\n    |/\n    * (v1.2.0) Prepare 1.2.0 release\n\n### Releasing a Major Version\n\nIf breaking changes have been merged to master, run:\n\n    $ rake bump:major\n\nAssuming the version was `1.2.0.dev` before, This bumps the major\nversion in the version file to `2.0.0.dev` and updates the changelog\nto reference `1-x-stable` for comparison.\n\nThe branch `1-x-stable` has to be created and managed manually. It\nshould always point to the same commit as the lastest minor version\nstable branch of the major version.\n\nThe rest of the release can be performed like a normal minor version\nrelease.\n\n## Development\n\nAfter checking out the repo, run `bin/setup` to install\ndependencies. You can also run `bin/console` for an interactive prompt\nthat will allow you to experiment. Run `bin/rspec` to execute the test\nsuite.\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at\nhttps://github.com/tf/semmy.\n\n## License\n\nThe gem is available as open source under the terms of the\n[MIT License](http://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftf%2Fsemmy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftf%2Fsemmy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftf%2Fsemmy/lists"}