Commit 5b5e37fd authored by Pierre Smeyers's avatar Pierre Smeyers
Browse files

Merge branch 'mikaelkaron/js-cjs-mjs-config' into 'main'

feat: add support for additional release configuration file formats

Closes #69

See merge request to-be-continuous/semantic-release!84
parents 477571b8 f3771bed
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -78,7 +78,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
@@ -591,6 +606,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() {