Commit f3771bed authored by Mikael Karon's avatar Mikael Karon Committed by Pierre Smeyers
Browse files

feat: add support for additional release configuration file formats

- Extends existing support with `.releaserc.(cjs|mjs)` and `release.config.(js|cjs|mjs)`
- Fixes an existing error with `.releaserc.js`
parent fbea176c
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -77,7 +77,9 @@ The semantic-release template automatically handles GitLab authentication using

This job runs `semantic-release` in `ci` mode.

:warning: This template supports all [semantic-release configuration files](https://semantic-release.gitbook.io/semantic-release/usage/configuration#configuration-file) __except for__ `release.config.js` and custom CLI arguments.
:information_source: This template supports all [semantic-release configuration files](https://semantic-release.gitbook.io/semantic-release/usage/configuration#configuration-file), including JavaScript variants (`.releaserc.js|cjs|mjs` and `release.config.js|cjs|mjs`), which are serialized to JSON at detection time. Custom CLI arguments are not supported.

:warning: `.mjs` configuration files require Node.js ≥ 22.12.0 (the default `node:lts-slim` image satisfies this). On older Node versions, `.mjs` configs will fail to load.

If no configuration is found, the template will generate one with the following options:

+24 −1
Original line number Diff line number Diff line
@@ -536,7 +536,22 @@ stages:
      semrelConfigFile=".releaserc.json"
    elif [[ -f ".releaserc.js" ]]; then
      log_info "\\e[33;1m.releaserc.js\\e[0m file found"
      semrelConfigFile=".releaserc.js"
      semrelJsConfigFile=".releaserc.js"
    elif [[ -f ".releaserc.cjs" ]]; then
      log_info "\\e[33;1m.releaserc.cjs\\e[0m file found"
      semrelJsConfigFile=".releaserc.cjs"
    elif [[ -f ".releaserc.mjs" ]]; then
      log_info "\\e[33;1m.releaserc.mjs\\e[0m file found"
      semrelJsConfigFile=".releaserc.mjs"
    elif [[ -f "release.config.js" ]]; then
      log_info "\\e[33;1mrelease.config.js\\e[0m file found"
      semrelJsConfigFile="release.config.js"
    elif [[ -f "release.config.cjs" ]]; then
      log_info "\\e[33;1mrelease.config.cjs\\e[0m file found"
      semrelJsConfigFile="release.config.cjs"
    elif [[ -f "release.config.mjs" ]]; then
      log_info "\\e[33;1mrelease.config.mjs\\e[0m file found"
      semrelJsConfigFile="release.config.mjs"
    else
      releaseConfig="$(extract_release_config_from_package_json)"
      if [[ -n "${releaseConfig}" ]]; then
@@ -588,6 +603,14 @@ stages:
        cat "${semrelConfigFile}"
      fi
    fi
    if [[ -n "${semrelJsConfigFile:-}" ]]; then
      if [[ "${semrelJsConfigFile}" == *.mjs ]]; then
        node -pe "JSON.stringify(require('./${semrelJsConfigFile}').default, null, 2)" > ".releaserc.json"
      else
        node -pe "JSON.stringify(require('./${semrelJsConfigFile}'), null, 2)" > ".releaserc.json"
      fi
      semrelConfigFile=".releaserc.json"
    fi
  }

  function install_semantic_release_plugins() {