Contributing

Bug reports and pull requests are welcome on GitHub at gitlab.com/oauth-xx/version_gem . This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

To submit a patch, please fork the project and create a patch with tests. Once you're happy with it send a pull request and post a message to the google group or on the gitter chat.

We so if you make changes, remember to update it.

You can help!

Simply follow these instructions:

  1. Fork the repository

  2. Create your feature branch (git checkout -b my-new-feature)

  3. Make some fixes.

  4. Commit your changes (git commit -am 'Added some feature')

  5. Push to the branch (git push origin my-new-feature)

  6. Make sure to add tests for it. This is important, so it doesn't break in a future release.

  7. Create new Pull Request.

Appraisals

From time to time the appraisal gemfiles in gemfiles/ will need to be updated. They are created and updated with the commands:

NOTE: We run on a fork of Appraisal.

Please upvote the PR for eval_gemfile support

BUNDLE_GEMFILE=Appraisal.root.gemfile bundle
BUNDLE_GEMFILE=Appraisal.root.gemfile bundle exec appraisal update

When adding an appraisal to CI check the runner tool cache to see which runner to use.

The Reek List

Take a look at the reek list which is the file called REEK and find something to improve.

To refresh the reek list:

bundle exec reek > REEK

Run Tests

To run all tests

bundle exec rake test

Lint It

Run all the default tasks, which includes running the gradually autocorrecting linter, rubocop-gradual.

bundle exec rake

Or just run the linter.

bundle exec rake rubocop_gradual:autocorrect

Contributors

Your picture could be here!

Made with contributors-img.

Also see GitLab Contributors: gitlab.com/oauth-xx/version_gem/-/graphs/main

For Maintainers

One-time, Per-maintainer, Setup

IMPORTANT: If you want to sign the build you create, your public key for signing gems will need to be picked up by the line in the gemspec defining the spec.cert_chain (check the relevant ENV variables there). All releases to RubyGems.org will be signed. See: RubyGems Security Guide

NOTE: To build without signing the gem you must set SKIP_GEM_SIGNING to some value in your environment.

To release a new version:

  1. Run bin/setup && bin/rake as a tests, coverage, & linting sanity check

  2. Update the version number in version.rb, and ensure CHANGELOG.md reflects changes

  3. Run bin/setup && bin/rake again as a secondary check, and to update Gemfile.lock

  4. Run git commit -am "🔖 Prepare release v<VERSION>" to commit the changes

  5. Run git push to trigger the final CI pipeline before release, & merge PRs

  6. NOTE: Remember to check the build!

  7. Run export GIT_TRUNK_BRANCH_NAME="$(git remote show origin | grep 'HEAD branch' | cut -d ' ' -f5)" && echo $GIT_TRUNK_BRANCH_NAME

  8. Run git checkout $GIT_TRUNK_BRANCH_NAME

  9. Run git pull origin $GIT_TRUNK_BRANCH_NAME to ensure you will release the latest trunk code

  10. Set SOURCE_DATE_EPOCH so rake build and rake release use same timestamp, and generate same checksums

  11. Run export SOURCE_DATE_EPOCH=$EPOCHSECONDS && echo $SOURCE_DATE_EPOCH

  12. If the echo above has no output, then it didn't work.

  13. Note that you'll need the zsh/datetime module, if running zsh.

  14. In bash you can use date +%s instead, i.e. export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH

  15. Run bundle exec rake build

  16. Run bin/gem_checksums (more context 1 and 2) to create SHA-256 and SHA-512 checksums

    • Checksums will be committed automatically by the script, but not pushed

  17. 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