7.7 KiB
Contributing
Your contributions are always welcome!
Process
Environment
Before starting make sure you have:
- git
- bash
- bundler
- docker
- gawk
- gnupg (or gnupg2)
- ruby
- sha256sum
- shellcheck
- test-kitchen
Only required if dealing with manuals, gh-pages
or releases:
- ruby, ruby-dev
Environment MacOS
- install Docker for Mac
- install Chef Developer Kit
- install Homebrew
- install ruby2.4 and kitchen dependencies with
brew install rbenv ruby-build rbenv-vars; rbenv install 2.4.4; rbenv rehash; rbenv global 2.4.4 ;gem install bundler kitchen-ansible serverspec kitchen-docker kitchen-verifier-serverspec
Getting started
- Create your own or pick an opened issue from the tracker. Take a look at the
help-wanted
tag - Fork and clone your repository:
git clone https://github.com/${YOUR_NAME}/git-secret.git
- Make sure that everything works on the current platform by running
make test
- Run local CI tests to verify functionality on supported platforms
bundle exec kitchen verify --test-base-path="$PWD/.ci/integration"
.
Development Process
- Firstly, you will need to setup development hooks with
make install-hooks
- Make changes to the files that need to be changed
- When making changes to any files inside
src/
you will need to rebuild the binarygit-secret
withmake clean && make build
command - Run
shellcheck
against all your changes withmake lint
- Now, add all your files to the commit with
git add --all
and commit changes withgit commit
, make sure you write a good message, which will explain your work - When running
git commit
the tests will run automatically, your commit will be canceled if they fail - 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
, develop
and gh-pages
for static site.
It basically looks like that:
your-branch
->develop
->master
master
branch is protected. So only fully tested code goes there. It is also used to create a newgit
tag and agithub
releasedevelop
is where the development is done and the branch you should send your pull-requests to
Continuous integration
Local CI is done with the help test-kitchen
. test-kitchen
handles multiple test-suites on various platforms.
bundle exec kitchen list
will output the list of test suites to be run against supported platforms.
Cloud 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 checksOSX
jobs, which handle basic unit-tests onOSX
- Native
travis
jobs, which handle basic unit-tests and style checks
Running local ci-tests
- Install required gems with
bundle install
. - Run ci-tests with
bundle exec kitchen verify --test-base-path="$PWD/.ci/integration"
Release process
The release process is defined in the git
-hooks and .travis.yml
.
When creating a commit inside the master
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
About GnuPG
Here are some links to gnupg documentation that might be useful for those working with git-secret:
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
.
Financial contributions
We also welcome financial contributions in full transparency on our open collective. Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
Credits
Contributors
Thank you to all the people who have already contributed to git-secret!
Backers
Thank you to all our backers! [Become a backer]
Sponsors
Thank you to all our sponsors! (please ask your company to also support this open source project by becoming a sponsor)