Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mvaldesdeleon/pre-push-valid
Checks the upstream refs during a pre-push githook
https://github.com/mvaldesdeleon/pre-push-valid
Last synced: 17 days ago
JSON representation
Checks the upstream refs during a pre-push githook
- Host: GitHub
- URL: https://github.com/mvaldesdeleon/pre-push-valid
- Owner: mvaldesdeleon
- License: other
- Created: 2018-07-21T15:17:45.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-07-26T12:21:49.000Z (over 6 years ago)
- Last Synced: 2024-10-10T03:04:36.542Z (about 1 month ago)
- Language: JavaScript
- Size: 15.6 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pre-push-valid
Checks the upstream refs during a pre-push githook.
I've seen that many tools exist already which look at the branch name from the current working directory. This is a good first step, but it's not sufficient. The first issue is that you can push a local branch to a different remote branch by being explicit about this. A second issue is that this branch-based approach does not consider tags.
The [githooks docs](https://git-scm.com/docs/githooks#_pre_push) for _pre-push_ mention that `git` provides the hook with the actual upstream refs being pushed, and this includes both branches as well as tags.
This script parses this data in order to enforce [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow).
# Convention
* Branch names must use only lowercase characters, numbers and hyphens.
* Only two singleton branches are allowed: `master` and `develop`.
* Only three prefix branches are allowed: `feature`, `release`, and `hotfix`.
* Prefix branches accept an arbitrary number of sub-prefixes (i.e., `feature/dashboard/widget` is a valid branch name).
* Tags must conform to [semver](https://semver.org/), **without** the leading `v` (i.e., `1.2.3` will be valid, `v1.2.3` will be invalid).# Install
With [npm](https://npmjs.org) do:```
npm install pre-push-valid --save-dev
```The easiest way to get started with githooks is via [husky](https://github.com/typicode/husky):
```
npm install husky@next --save-dev
```Once it's installed, edit your `package.json` like so:
```
// package.json
{
"husky": {
"hooks": {
"pre-commit": "echo \"$HUSKY_GIT_STDIN\" | pre-push-valid"
}
}
}
```# Roadmap
Right now this is a proof-of-concept, with all configuration settings hardcoded to fit my needs. This includes a few subtleties, such as disallowing `v`-prefixed tags.
Ideally, all of this configuration should be externalized following the current conventions. Namely:
* A specialized section in the `package.json` file.
* A dot-rc-file in json format.
* A js file module exporting the configuration.Also, some CLI parameters could be added for debugging, coloring, accepting input from the command-line rather than stdin, to avoid the ugly `echo`, etc.
If you think this is interesting please do not hesitate to contribute!
# License
MIT