From 1fe9179886058abf320d4bc3e6c5bbfbe786b94b Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Thu, 3 Jul 2025 17:35:06 +0100 Subject: [PATCH] Handle `.tool-versions`' line break on Windows (#357) * Test .tool-version on top of Windows * Parse .tool-version with Windows-style line endings --- .github/workflows/action.yml | 8 ++++++++ dist/index.js | 2 +- src/setup-beam.js | 2 +- test/setup-beam.test.js | 14 +++++++++----- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index 3b13952..86748e5 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -90,6 +90,14 @@ jobs: node-version: '20' - run: npm install --production - run: npm test + - name: .tool-versions test + id: setup-beam + uses: ./ + with: + install-rebar: false + install-hex: false + version-file: test/.tool-versions + version-type: strict unit_tests_macos: name: Unit tests (macOS) diff --git a/dist/index.js b/dist/index.js index 34ce9c0..5c11ebc 100644 --- a/dist/index.js +++ b/dist/index.js @@ -26680,7 +26680,7 @@ function parseVersionFile(versionFilePath0) { // For the time being we parse .tool-versions // If we ever start parsing something else, this should // become default in a new option named e.g. version-file-type - versions.split('\n').forEach((line) => { + versions.split(/\r?\n/).forEach((line) => { const appVersion = line.match(/^([^ ]+)[ ]+(ref:v?)?([^ #]+)/) if (appVersion) { const app = appVersion[1] diff --git a/src/setup-beam.js b/src/setup-beam.js index a8214c3..fdb8d4b 100644 --- a/src/setup-beam.js +++ b/src/setup-beam.js @@ -805,7 +805,7 @@ function parseVersionFile(versionFilePath0) { // For the time being we parse .tool-versions // If we ever start parsing something else, this should // become default in a new option named e.g. version-file-type - versions.split('\n').forEach((line) => { + versions.split(/\r?\n/).forEach((line) => { const appVersion = line.match(/^([^ ]+)[ ]+(ref:v?)?([^ #]+)/) if (appVersion) { const app = appVersion[1] diff --git a/test/setup-beam.test.js b/test/setup-beam.test.js index 89b3daa..ac0733b 100644 --- a/test/setup-beam.test.js +++ b/test/setup-beam.test.js @@ -938,15 +938,19 @@ describe('version file', () => { const gleamVersion = unsimulateInput('gleam-version') it('is parsed correctly', async () => { - const erlang = '27' - const elixir = '1.17.0' - const gleam = '0.23.0' - const toolVersions = `# a comment -erlang ref:v${erlang}# comment, no space, and ref:v + const erlang = '27.3.4.1' + const elixir = '1.18.4' + const gleam = '1.9.1' + let toolVersions = `# a comment +erlang ref:v${erlang} elixir ref:${elixir} # comment, with space and ref: not-gleam 0.23 # not picked up gleam ${gleam} \n` const filename = 'test/.tool-versions' + if (process.platform === 'win32') { + // Force \r\n to test in Windows + toolVersions = toolVersions.replace(/\n/g, '\r\n') + } fs.writeFileSync(filename, toolVersions) process.env.GITHUB_WORKSPACE = '' const appVersions = setupBeam.parseVersionFile(filename)