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.
Though I prefer code over configuration, I also agree with @boennemann's statement about avoiding additional files. My projects typically have 6 hidden config files just to support the various tools already in use (jscs, jshint, git, etc.). It's become a little burdensome. The practice of leveraging
package.jsonis perfect.I agree that
verify-conditionsneeds to be significantly changed. At one point I was usingsnap-ci, and I ended up just disabling the CI verification step so I could move forward with my work. A simple package that just verifies the existence of the required env keys should be sufficient. We shouldn't otherwise care what CI they're on.I'm a little concerned about the post step idea. My concern is that once a developer needs to support another SCM platform besides those listed, they'll need to write functionality that will eventually resemble
semantic-release, such as commit extraction, parsing, authentication, posting to an API, etc. Eventually, they will have a standalone tool that does everythingsemantic-release'sposttask does, but only for one SCM. That person can't share that work with others. Each new SCM will require the duplication of much of the same code or workflow.