Skip to content

Commit

Permalink
Add support for asdf format as Node.js version file
Browse files Browse the repository at this point in the history
  • Loading branch information
ganta committed Dec 5, 2021
1 parent 6bf4384 commit 9f993b9
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 22 deletions.
9 changes: 5 additions & 4 deletions .github/workflows/versions.yml
Expand Up @@ -3,14 +3,14 @@ name: versions
on:
pull_request:
paths-ignore:
- '**.md'
push:
- '**.md'
push:
branches:
- main
- releases/*
paths-ignore:
- '**.md'

jobs:
local-cache:
runs-on: ${{ matrix.os }}
Expand Down Expand Up @@ -84,12 +84,13 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version-file: [.nvmrc, .tool-versions]
steps:
- uses: actions/checkout@v2
- name: Setup node from node version file
uses: ./
with:
node-version-file: '__tests__/data/.nvmrc'
node-version-file: __tests__/data/${{ matrix.node-version-file }}
- name: Verify node
run: __tests__/verify-node.sh 14

Expand Down
1 change: 1 addition & 0 deletions __tests__/data/.tool-versions
@@ -0,0 +1 @@
nodejs 14.0.0
20 changes: 11 additions & 9 deletions __tests__/installer.test.ts
Expand Up @@ -867,15 +867,17 @@ describe('setup-node', () => {
describe('helper methods', () => {
describe('parseNodeVersionFile', () => {
each`
contents | expected
${'12'} | ${'12'}
${'12.3'} | ${'12.3'}
${'12.3.4'} | ${'12.3.4'}
${'v12.3.4'} | ${'12.3.4'}
${'lts/erbium'} | ${'lts/erbium'}
${'lts/*'} | ${'lts/*'}
${''} | ${''}
${'unknown format'} | ${'unknown format'}
contents | expected
${'12'} | ${'12'}
${'12.3'} | ${'12.3'}
${'12.3.4'} | ${'12.3.4'}
${'v12.3.4'} | ${'12.3.4'}
${'lts/erbium'} | ${'lts/erbium'}
${'lts/*'} | ${'lts/*'}
${'nodejs 12.3.4'} | ${'12.3.4'}
${'ruby 2.3.4\nnodejs 12.3.4\npython 3.4.5'} | ${'12.3.4'}
${''} | ${''}
${'unknown format'} | ${'unknown format'}
`.it('parses "$contents"', ({contents, expected}) => {
expect(im.parseNodeVersionFile(contents)).toBe(expected);
});
Expand Down
8 changes: 4 additions & 4 deletions action.yml
Expand Up @@ -8,7 +8,7 @@ inputs:
node-version:
description: 'Version Spec of the version to use. Examples: 12.x, 10.15.1, >=10.15.0'
node-version-file:
description: 'File containing the version Spec of the version to use. Examples: .nvmrc, .node-version'
description: 'File containing the version Spec of the version to use. Examples: .nvmrc, .node-version, .tool-versions'
architecture:
description: 'Target architecture for Node to use. Examples: x86, x64. Will use system architecture by default.'
check-latest:
Expand All @@ -25,17 +25,17 @@ inputs:
description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm'
cache-dependency-path:
description: 'Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc. Supports wildcards or a list of file names for caching multiple dependencies.'
# TODO: add input to control forcing to pull from cloud or dist.
# TODO: add input to control forcing to pull from cloud or dist.
# escape valve for someone having issues or needing the absolute latest which isn't cached yet
# Deprecated option, do not use. Will not be supported after October 1, 2019
version:
description: 'Deprecated. Use node-version instead. Will not be supported after October 1, 2019'
deprecationMessage: 'The version property will not be supported after October 1, 2019. Use node-version instead'
outputs:
cache-hit:
cache-hit:
description: 'A boolean value to indicate if a cache was hit'
runs:
using: 'node12'
main: 'dist/setup/index.js'
post: 'dist/cache-save/index.js'
post-if: success()
post-if: success()
2 changes: 1 addition & 1 deletion docs/advanced-usage.md
Expand Up @@ -21,7 +21,7 @@ steps:

## Node version file

The `node-version-file` input accepts a path to a file containing the version of Node.js to be used by a project, for example `.nvmrc` or `.node-version`. If both the `node-version` and the `node-version-file` inputs are provided then the `node-version` input is used.
The `node-version-file` input accepts a path to a file containing the version of Node.js to be used by a project, for example `.nvmrc`, `.node-version` or `.tool-versions`. If both the `node-version` and the `node-version-file` inputs are provided then the `node-version` input is used.
See [supported version syntax](https://github.com/actions/setup-node#supported-version-syntax)
> The action will search for the node version file relative to the repository root.
Expand Down
12 changes: 8 additions & 4 deletions src/installer.ts
Expand Up @@ -466,10 +466,14 @@ function translateArchToDistUrl(arch: string): string {
}

export function parseNodeVersionFile(contents: string): string {
let nodeVersion = contents.trim();
const found = contents.match(/^(?:nodejs\s+)?v?(?<version>[^\s]+)$/m);
const nodeVersion = found?.groups?.version;

if (/^v\d/.test(nodeVersion)) {
nodeVersion = nodeVersion.substring(1);
if (nodeVersion) {
return nodeVersion;
}
return nodeVersion;

// In the case of an unknown format,
// return as is and evaluate the version separately.
return contents.trim();
}

0 comments on commit 9f993b9

Please sign in to comment.