diff --git a/jest.config.js b/jest.config.js index 95817b8d..c08948fe 100644 --- a/jest.config.js +++ b/jest.config.js @@ -15,11 +15,11 @@ module.exports = { '^@actions/http-client/lib/interfaces$': '/packages/http-client/lib/interfaces.js', '^@actions/github$': '/packages/github/lib/github.js', '^@actions/github/lib/utils$': '/packages/github/lib/utils.js', - '^@actions/glob$': '/packages/glob/lib/glob.js' + '^@actions/glob$': '/packages/glob/lib/glob.js', + '^@actions/tool-cache$': '/packages/tool-cache/lib/tool-cache.js' }, transform: { '^.+\\.(ts|js)$': ['ts-jest', { - isolatedModules: true, diagnostics: {warnOnly: true}, tsconfig: { allowJs: true, @@ -30,7 +30,7 @@ module.exports = { }] }, transformIgnorePatterns: [ - '/node_modules/(?!(@octokit|@actions/github|@actions/http-client|@actions/io|@actions/exec|@actions/core|@actions/glob|universal-user-agent|before-after-hook)/)' + '/node_modules/(?!(@octokit|@actions/github|@actions/http-client|@actions/io|@actions/exec|@actions/core|@actions/glob|@actions/tool-cache|universal-user-agent|before-after-hook)/)' ], verbose: true } diff --git a/packages/tool-cache/RELEASES.md b/packages/tool-cache/RELEASES.md index 48955865..3e9de325 100644 --- a/packages/tool-cache/RELEASES.md +++ b/packages/tool-cache/RELEASES.md @@ -1,5 +1,10 @@ # @actions/tool-cache Releases +## 4.0.0 + +- **Breaking change**: Package is now ESM-only + - CommonJS consumers must use dynamic `import()` instead of `require()` + ### 3.0.1 - Bump `@actions/http-client` to `3.0.2` @@ -17,29 +22,36 @@ - Remove dependency on `uuid` package [#1824](https://github.com/actions/toolkit/pull/1824), [#1842](https://github.com/actions/toolkit/pull/1842) ### 2.0.1 + - Update to v2.0.1 of `@actions/http-client` [#1087](https://github.com/actions/toolkit/pull/1087) ### 2.0.0 + - Update to v2.0.0 of `@actions/http-client` - The type of the `headers` parameter in the exported function `downloadTool` has been narrowed from `{ [header: string]: any }` to `{ [header: string]: number | string | string[] | undefined; }` (that is, `http.OutgoingHttpHeaders`). This is strictly a compile-time change for TypeScript consumers. Previous attempts to use a header value of a type other than those now accepted would have resulted in an error at run time. ### 1.7.2 -- Update `lockfileVersion` to `v2` in `package-lock.json [#1025](https://github.com/actions/toolkit/pull/1025) + +- Update `lockfileVersion` to `v2` in `package-lock.json` [#1025](https://github.com/actions/toolkit/pull/1025) ### 1.7.1 + - [Fallback to os-releases file to get linux version](https://github.com/actions/toolkit/pull/594) - [Update to latest @actions/io verison](https://github.com/actions/toolkit/pull/838) ### 1.7.0 + - [Allow arbirtary headers when downloading tools to the tc](https://github.com/actions/toolkit/pull/530) -- [Export `isExplicitVersion` and `evaluateVersions` functions](https://github.com/actions/toolkit/pull/796) +- [Export `isExplicitVersion` and `evaluateVersions` functions](https://github.com/actions/toolkit/pull/796) - [Force overwrite on default when extracted compressed files](https://github.com/actions/toolkit/pull/807) ### 1.6.1 + - [Update @actions/core version](https://github.com/actions/toolkit/pull/636) ### 1.6.0 + - [Add extractXar function to extract XAR files](https://github.com/actions/toolkit/pull/207) ### 1.3.5 @@ -82,4 +94,4 @@ Here is [the security issue](https://github.com/actions/http-client/pull/27) tha ### 1.0.0 -- Initial release \ No newline at end of file +- Initial release diff --git a/packages/tool-cache/__tests__/manifest.test.ts b/packages/tool-cache/__tests__/manifest.test.ts index 37146b89..cf393fb9 100644 --- a/packages/tool-cache/__tests__/manifest.test.ts +++ b/packages/tool-cache/__tests__/manifest.test.ts @@ -1,5 +1,5 @@ -import * as tc from '../src/tool-cache' -import * as mm from '../src/manifest' // --> OFF +import * as tc from '../src/tool-cache.js' +import * as mm from '../src/manifest.js' // needs to be require for core node modules to be mocked // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -36,7 +36,7 @@ describe('@actions/tool-cache-manifest', () => { archSpy.mockImplementation(() => os.arch) execSpy = jest.spyOn(cp, 'execSync') - readLsbSpy = jest.spyOn(mm, '_readLinuxVersionFile') + readLsbSpy = jest.spyOn(mm._internal, 'readLinuxVersionFile') getSpy = jest.spyOn(tc, 'getManifestFromRepo') getSpy.mockImplementation(() => manifestData) diff --git a/packages/tool-cache/__tests__/retry-helper.test.ts b/packages/tool-cache/__tests__/retry-helper.test.ts index 7b110db3..813f1c01 100644 --- a/packages/tool-cache/__tests__/retry-helper.test.ts +++ b/packages/tool-cache/__tests__/retry-helper.test.ts @@ -1,5 +1,5 @@ import * as core from '@actions/core' -import {RetryHelper} from '../src/retry-helper' +import {RetryHelper} from '../src/retry-helper.js' let info: string[] let retryHelper: RetryHelper diff --git a/packages/tool-cache/__tests__/tool-cache.test.ts b/packages/tool-cache/__tests__/tool-cache.test.ts index 4712ab5f..07a3e23d 100644 --- a/packages/tool-cache/__tests__/tool-cache.test.ts +++ b/packages/tool-cache/__tests__/tool-cache.test.ts @@ -12,7 +12,7 @@ process.env['RUNNER_TEMP'] = tempPath process.env['RUNNER_TOOL_CACHE'] = cachePath // eslint-disable-next-line import/first -import * as tc from '../src/tool-cache' +import * as tc from '../src/tool-cache.js' const IS_WINDOWS = process.platform === 'win32' const IS_MAC = process.platform === 'darwin' diff --git a/packages/tool-cache/package-lock.json b/packages/tool-cache/package-lock.json index 16b13f06..f49680ce 100644 --- a/packages/tool-cache/package-lock.json +++ b/packages/tool-cache/package-lock.json @@ -1,49 +1,48 @@ { "name": "@actions/tool-cache", - "version": "3.0.1", + "version": "4.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@actions/tool-cache", - "version": "3.0.1", + "version": "4.0.0", "license": "MIT", "dependencies": { - "@actions/core": "^2.0.1", - "@actions/exec": "^2.0.0", - "@actions/http-client": "^3.0.2", - "@actions/io": "^2.0.0", - "semver": "^6.1.0" + "@actions/core": "^3.0.0", + "@actions/exec": "^3.0.0", + "@actions/http-client": "^4.0.0", + "@actions/io": "^3.0.0", + "semver": "^7.7.3" }, "devDependencies": { - "@types/nock": "^11.1.0", - "@types/semver": "^6.0.0", - "nock": "^13.2.9" + "@types/semver": "^7.7.1", + "nock": "^13.5.1" } }, "node_modules/@actions/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-2.0.1.tgz", - "integrity": "sha512-oBfqT3GwkvLlo1fjvhQLQxuwZCGTarTE5OuZ2Wg10hvhBj7LRIlF611WT4aZS6fDhO5ZKlY7lCAZTlpmyaHaeg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-3.0.0.tgz", + "integrity": "sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==", "license": "MIT", "dependencies": { - "@actions/exec": "^2.0.0", - "@actions/http-client": "^3.0.0" + "@actions/exec": "^3.0.0", + "@actions/http-client": "^4.0.0" } }, "node_modules/@actions/exec": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-2.0.0.tgz", - "integrity": "sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-3.0.0.tgz", + "integrity": "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==", "license": "MIT", "dependencies": { - "@actions/io": "^2.0.0" + "@actions/io": "^3.0.2" } }, "node_modules/@actions/http-client": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-3.0.2.tgz", - "integrity": "sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-4.0.0.tgz", + "integrity": "sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==", "license": "MIT", "dependencies": { "tunnel": "^0.0.6", @@ -51,26 +50,15 @@ } }, "node_modules/@actions/io": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@actions/io/-/io-2.0.0.tgz", - "integrity": "sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-3.0.2.tgz", + "integrity": "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==", "license": "MIT" }, - "node_modules/@types/nock": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@types/nock/-/nock-11.1.0.tgz", - "integrity": "sha512-jI/ewavBQ7X5178262JQR0ewicPAcJhXS/iFaNJl0VHLfyosZ/kwSrsa6VNQNSO8i9d8SqdRgOtZSOKJ/+iNMw==", - "deprecated": "This is a stub types definition. nock provides its own type definitions, so you do not need this installed.", - "dev": true, - "license": "MIT", - "dependencies": { - "nock": "*" - } - }, "node_modules/@types/semver": { - "version": "6.2.7", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.7.tgz", - "integrity": "sha512-blctEWbzUFzQx799RZjzzIdBJOXmE37YYEyDtKkx5Dg+V7o/zyyAxLPiI98A2jdTtDgxZleMdfV+7p8WbRJ1OQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT" }, @@ -132,12 +120,15 @@ } }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/tunnel": { diff --git a/packages/tool-cache/package.json b/packages/tool-cache/package.json index 48acac04..4f65484f 100644 --- a/packages/tool-cache/package.json +++ b/packages/tool-cache/package.json @@ -1,6 +1,6 @@ { "name": "@actions/tool-cache", - "version": "3.0.1", + "version": "4.0.0", "description": "Actions tool-cache lib", "keywords": [ "github", @@ -9,8 +9,15 @@ ], "homepage": "https://github.com/actions/toolkit/tree/main/packages/tool-cache", "license": "MIT", + "type": "module", "main": "lib/tool-cache.js", "types": "lib/tool-cache.d.ts", + "exports": { + ".": { + "types": "./lib/tool-cache.d.ts", + "import": "./lib/tool-cache.js" + } + }, "directories": { "lib": "lib", "test": "__tests__" @@ -36,15 +43,14 @@ "url": "https://github.com/actions/toolkit/issues" }, "dependencies": { - "@actions/core": "^2.0.1", - "@actions/exec": "^2.0.0", - "@actions/http-client": "^3.0.2", - "@actions/io": "^2.0.0", - "semver": "^6.1.0" + "@actions/core": "^3.0.0", + "@actions/exec": "^3.0.0", + "@actions/http-client": "^4.0.0", + "@actions/io": "^3.0.0", + "semver": "^7.7.3" }, "devDependencies": { - "@types/nock": "^11.1.0", - "@types/semver": "^6.0.0", - "nock": "^13.2.9" + "@types/semver": "^7.7.1", + "nock": "^13.5.1" } } diff --git a/packages/tool-cache/src/manifest.ts b/packages/tool-cache/src/manifest.ts index 7e0808f1..57d8e257 100644 --- a/packages/tool-cache/src/manifest.ts +++ b/packages/tool-cache/src/manifest.ts @@ -1,12 +1,25 @@ import * as semver from 'semver' import {debug} from '@actions/core' +import * as os from 'os' +import * as cp from 'child_process' +import * as fs from 'fs' -// needs to be require for core node modules to be mocked -/* eslint @typescript-eslint/no-require-imports: 0 */ +// Internal object for testability (allows mocking in ESM) +export const _internal = { + readLinuxVersionFile(): string { + const lsbReleaseFile = '/etc/lsb-release' + const osReleaseFile = '/etc/os-release' + let contents = '' -import os = require('os') -import cp = require('child_process') -import fs = require('fs') + if (fs.existsSync(lsbReleaseFile)) { + contents = fs.readFileSync(lsbReleaseFile).toString() + } else if (fs.existsSync(osReleaseFile)) { + contents = fs.readFileSync(osReleaseFile).toString() + } + + return contents + } +} /* NOTE: versions must be sorted descending by version in the manifest @@ -86,7 +99,7 @@ export async function _findMatch( let chk = item.arch === archFilter && item.platform === platFilter if (chk && item.platform_version) { - const osVersion = module.exports._getOsVersion() + const osVersion = _getOsVersion() if (osVersion === item.platform_version) { chk = true @@ -130,7 +143,7 @@ export function _getOsVersion(): string { // DISTRIB_RELEASE=18.04 // DISTRIB_CODENAME=bionic // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" - const lsbContents = module.exports._readLinuxVersionFile() + const lsbContents = _internal.readLinuxVersionFile() if (lsbContents) { const lines = lsbContents.split('\n') for (const line of lines) { @@ -150,16 +163,7 @@ export function _getOsVersion(): string { return version } +// Alias for backwards compatibility export function _readLinuxVersionFile(): string { - const lsbReleaseFile = '/etc/lsb-release' - const osReleaseFile = '/etc/os-release' - let contents = '' - - if (fs.existsSync(lsbReleaseFile)) { - contents = fs.readFileSync(lsbReleaseFile).toString() - } else if (fs.existsSync(osReleaseFile)) { - contents = fs.readFileSync(osReleaseFile).toString() - } - - return contents + return _internal.readLinuxVersionFile() } diff --git a/packages/tool-cache/src/tool-cache.ts b/packages/tool-cache/src/tool-cache.ts index 961c26b8..91b415e1 100644 --- a/packages/tool-cache/src/tool-cache.ts +++ b/packages/tool-cache/src/tool-cache.ts @@ -2,7 +2,7 @@ import * as core from '@actions/core' import * as io from '@actions/io' import * as crypto from 'crypto' import * as fs from 'fs' -import * as mm from './manifest' +import * as mm from './manifest.js' import * as os from 'os' import * as path from 'path' import * as httpm from '@actions/http-client' @@ -11,9 +11,8 @@ import * as stream from 'stream' import * as util from 'util' import {ok} from 'assert' import {OutgoingHttpHeaders} from 'http' -import {exec} from '@actions/exec/lib/exec' -import {ExecOptions} from '@actions/exec/lib/interfaces' -import {RetryHelper} from './retry-helper' +import {exec, ExecOptions} from '@actions/exec' +import {RetryHelper} from './retry-helper.js' export class HTTPError extends Error { constructor(readonly httpStatusCode: number | undefined) { diff --git a/packages/tool-cache/tsconfig.json b/packages/tool-cache/tsconfig.json index a8b812a6..c440cd7f 100644 --- a/packages/tool-cache/tsconfig.json +++ b/packages/tool-cache/tsconfig.json @@ -3,7 +3,9 @@ "compilerOptions": { "baseUrl": "./", "outDir": "./lib", - "rootDir": "./src" + "rootDir": "./src", + "module": "node16", + "moduleResolution": "node16" }, "include": [ "./src"