The current plugin system aims to make every step of semantic-release customizeable. There is a lot of overhead to this though.
- Remove
verifyConditions
. - Hardcode one check that implements every CI server out there. (Mappings for each service are trivial to add, much like in https://github.com/auchenberg/volkswagen)
- Add an option to surpass this check.
With this it would "just work™" on any CI server.
If there is custom behavior required this can simply be run before the semantic-release
command: e.g. verify-unicorns && semantic-release pre && npm publish && semantic-release post
.
This custom check could also set an env var read by semantic-release, so the internal CI check is surpassed.
Offers same flexibility, less to no config.
Remove verifyRelease
.
The verification can be performed with custom scripts outside of semantic-release: semantic-release pre && verify-release && npm publish && semantic-release post
Implement a post step that works for GitHub, GitLab and BitBucket, and automatically performs the right thing based on auth exposed, and repository URL.
If this needs to be customized: semantic-release pre && npm publish && custom-release-notes
If this needs to be left out: semantic-release pre && npm publish
Implement a commit analyzer that works for all commit message styles available in conventional-changelog: https://github.com/ajoslin/conventional-changelog/tree/master/conventions Defaults to Angular, chosing another style means passing one config flag. Passing a custom parser works like it's working right now.
If semantic-release could make extracted metadata (commits, version details, etc.) available in the environment or in a temp file, then the custom scripts could simply pick it up again without the need to extract or parse them again.
I would move away from JSON config and just have something similar to gulpfile.js or webpack.config.js - then the implementation logic is very simple to have, even yourself