git-secret/CONTRIBUTING.md
sobolevn 5c25233b89
Version 0.2.2 pre-release
There are a lot of changes, multiple things were refactored: tests,
some commands, building and meta.

Several critical bugs fixed.

Changes:
1. Fixed #74, when `_user_required` was not working after reimporting keys
2. Closes #73, now it is possible to provide multiple emails to the `killperson` command
3. Closes #72, now it is possible to provide multiple emails to the `tell` command
4. Closes #71, now every doc in this project refer to `git-secret.io` instead of old `gh-pages` website
5. Closes #70, now installation section is removed from main `man` file
6. Closes #69, now "See also" section in the `man`s are clickable
7. Closes #61, added "Manual" section to the manuals
8. Refs #38, added `centos` Dockerfile, but `ci` testing is still failing
9. Refs #52, tests are refactored. Added `clean` command tests, removed a lot of hardcoded things, moved tests execution from `./temp` folder to `/tmp`, added a lot of new check in old tests, and some new test cases
10. Refactored `hide` and `clean` commands to be shorter
11. `shellcheck` is now supported with `make lint`

Additional features are not comming to 0.2.2 after this commit.
2017-02-26 18:19:08 +03:00

4.0 KiB

Contributing

Your contributions are always welcome!

Process

Environment

Before starting make sure you have:

Only required if dealing with manuals, gh-pages or releases:

  • ruby, ruby-dev

Getting started

  1. Create your own or pick an opened issue from the tracker. Take a look at the help-wanted tag
  2. Fork and clone your repository: git clone https://github.com/${YOUR_NAME}/git-secret.git
  3. Make sure that everything works fine by running make test

Development Process

  1. Firstly, you will need to setup development hooks with make install-hooks
  2. Make changes to the files that need to be changed
  3. When making changes to any files inside src/ you will need to rebuild the binary git-secret with make clean && make build command
  4. Run shellcheck against all your changes with make lint
  5. Now, add all your files to the commit with git add --all and commit changes with git commit, make sure you write a good message, which will explain your work
  6. When running git commit the tests will run automatically, your commit will be canceled if they fail
  7. Push to your repository, make a pull-request against develop branch. Please, make sure you have one commit per pull-request, it will be merge into one anyways

Branches

We have three long-live branches: master, staging and develop (and gh-pages for static site).

It basically looks like that:

your-branch -> develop -> staging -> master

  • master branch is protected, since antigen and tools like it install the app from the main branch directly. So only fully tested code goes there
  • staging - this branch is used to create a new git tag and a github release, then it gets merged into master
  • develop is where the development is done and the branch you should send your pull-requests to

Continuous integration

CI is done with the help of travis. travis handles multiple environments:

  • Docker-based jobs or so-called 'integration tests', these tests create a local release, install it with the package manager and then run unit-tests and system checks
  • OSX jobs, which handle basic unit-tests on OSX
  • Native travis jobs, which handle basic unit-tests and stylechecks

Release process

The release process is defined in the git-hooks and .travis.yml.

When creating a commit inside the staging branch (it is usually a documentation and changelog update with the version bump inside src/version.sh) it will trigger two main events.

Firstly, new manuals will be created and added to the current commit with make build-man on pre-commit hook.

Secondly, after the commit is successfully created it will also trigger make build-gh-pages target on post-commit hook, which will push new manuals to the git-secret site. And the new git tag will be automatically created if the version is changed:

if [[ "$NEWEST_TAG" != "v${SCRIPT_VERSION}" ]]; then
  git tag -a "v${SCRIPT_VERSION}" -m "version $SCRIPT_VERSION"
fi

Then it will be merged inside master when ready.

Travis releases

When creating a commit inside master branch, travis on successful build will publish new deb and rpm packages to bintray.

If you wish to override a previous release (be careful) you will need to add "override": 1 into matrixParams, see deb-deploy.sh and rpm-deploy.sh

Manual releases

Releases to brew are made manually.

Dockerhub releases

Dockerhub contains Docker images with different OS'es used for testing. It is updated via a github webhook on commit into master.