Search code examples
pactsemantic-release

Handling nextRelease version in semantic release


so I have been reading the docs and kind of got a glimpse of what I should do, but no real grasp of how I can do it.

Here is my problem: - I am using semantic release to publish my package to npm - I also have contract testing in place with Pact. - I would like my Pacts published after the release, if successful, with the same version as the new version

How can I do that easily?

I have looked at the docs, and understood that I could use the exec plugin, however, I find it not clear how I should configure semantic-release to behave exactly the same as now, only exposing the version as, at the very least, an env variable, and couldn't find examples of people doing that.

I could use hooks, but I am concerned that if a npm publish does not happen for some reasons, I would still get my pact published with the next version, which wouldn't exactly exist. Any suggestions here?

It seems I could also write my own JS script (see https://github.com/semantic-release/semantic-release/blob/3cc62f0318ff8917fcdc7cebe890da9dbaa7b3f9/docs/developer-guide/js-api.md) to do this as well as handling the version, but I am not certain what this example does and what it covers regarding the current behaviour.

I guess I could also write my own pact plugin too, but that's even more next level into having to understand how the internals of semantic-release work.

So I am after some examples/experience sharing, and maybe an easy-peasy solution to have that working in less than 30 minutes :)

Thanks

PS: sorry for posting here, but it seems the issues of semantic-release are not really made for support questions.


Solution

  • You can simply use @semantic-release/exec in an extra publish step that comes after @semantic-release/npm and @semantic-release/github:

    {
      "plugins": [
        "@semantic-release/commit-analyzer",
        "@semantic-release/release-notes-generator",
        "@semantic-release/npm",
        "@semantic-release/github",
        ["@semantic-release/exec", {
          "publishCmd": "publish-pacts ${nextRelease.version}"
        }],
      ]
    }
    

    This way the script publish-pacts will be called with the release version as first parameter for each new release, only when npm and github releases are successful.