diff --git a/README.md b/README.md index 2e9b1cc..fe064b3 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,20 @@ available: } } ``` + If you want to use full semantic versioning for the `engines` field, you can enable the `updaters.engines.fullVersion` input. + ```yaml + - uses: hongaar/update-node-versions@v2 + with: + updaters.engines.fullVersion: true + ``` + This will update the `engines` field to include the full version. + ```json + { + "engines": { + "node": ">=18.0.0" + } + } + ``` - **Files** This will update arbitrary files in your repository. You can specify a glob pattern of files to update, a regex to match and a replacement template to @@ -112,6 +126,7 @@ available: | `updaters.workflows` | `true` | Update GitHub workflows. | | `updaters.workflows.variable` | `"node-version"` | Use this name as the matrix strategy variable to update the Node versions in. | | `updaters.engines` | `true` | Update package.json `engines`. | +| `updaters.engines.fullVersion`| `false` | Use full semantic versioning for engines. | | `updaters.files` | `false` | Update arbitrary files. | | `updaters.files.glob` | | Glob pattern for files to update. | | `updaters.files.regex` | | Matches will be replaced with the template. | diff --git a/action.yml b/action.yml index b2e75b2..9257bf7 100644 --- a/action.yml +++ b/action.yml @@ -28,6 +28,10 @@ inputs: description: Update package.json `engines` required: false default: true + updaters.engines.fullVersion: + description: Use full semantic versioning for engines + required: false + default: false updaters.files: description: Update arbitrary files required: false diff --git a/src/index.ts b/src/index.ts index 699da48..bd7dfcb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,6 +17,7 @@ const updatersFiles = getBooleanInput("updaters.files"); const updatersFilesGlob = getMultilineInput("updaters.files.glob"); const updatersFilesRegex = getMultilineInput("updaters.files.regex"); const updatersFilesTemplate = getMultilineInput("updaters.files.template"); +const updatersEnginesFullVersion = getBooleanInput("updaters.engines.fullVersion"); const inputs = { versions, @@ -28,6 +29,7 @@ const inputs = { updatersFilesGlob, updatersFilesRegex, updatersFilesTemplate, + updatersEnginesFullVersion, }; updateNodeVersions(inputs) diff --git a/src/updateNodeVersions.ts b/src/updateNodeVersions.ts index 4f9b02b..e7b0647 100644 --- a/src/updateNodeVersions.ts +++ b/src/updateNodeVersions.ts @@ -17,6 +17,7 @@ type Inputs = { updatersFilesGlob: string[]; updatersFilesRegex: string[]; updatersFilesTemplate: string[]; + updatersEnginesFullVersion: boolean; }; type Outputs = { @@ -47,7 +48,7 @@ export async function updateNodeVersions(inputs: Inputs) { } if (inputs.updatersEngines) { - await engines(outputs.versions); + await engines(outputs.versions, process.cwd(), inputs.updatersEnginesFullVersion); } if (inputs.updatersFiles) { diff --git a/src/updaters/engines.ts b/src/updaters/engines.ts index 0e6d55a..cd20f96 100644 --- a/src/updaters/engines.ts +++ b/src/updaters/engines.ts @@ -16,7 +16,7 @@ async function getPackageJson(cwd = process.cwd()) { return; } -export async function engines(versions: number[], cwd = process.cwd()) { +export async function engines(versions: number[], cwd = process.cwd(), fullVersion = false) { const packageJson = await getPackageJson(cwd); if (!packageJson) { @@ -25,7 +25,7 @@ export async function engines(versions: number[], cwd = process.cwd()) { if (packageJson.engines && packageJson.engines["node"]) { info(`Updating engines.node in package.json`); - packageJson.engines["node"] = `>=${versions[0]}`; + packageJson.engines["node"] = `>=${fullVersion ? versions.join(".") : versions[0]}`; await writeFile( join(cwd, PACKAGE_PATH),