-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add platform info utilities to @actions/core (#1551)
* Introduce platform utilities into @actions/core * Add tests for the platform helper * Update README.md * Update README.md with more details
- Loading branch information
1 parent
fe3e7ce
commit 20f826b
Showing
6 changed files
with
174 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import os from 'os' | ||
import {platform} from '../src/core' | ||
|
||
describe('getInfo', () => { | ||
it('returns the platform info', async () => { | ||
const info = await platform.getDetails() | ||
expect(info).toEqual({ | ||
name: expect.any(String), | ||
platform: expect.any(String), | ||
arch: expect.any(String), | ||
version: expect.any(String), | ||
isWindows: expect.any(Boolean), | ||
isMacOS: expect.any(Boolean), | ||
isLinux: expect.any(Boolean) | ||
}) | ||
}) | ||
|
||
it('returns the platform info with the correct name', async () => { | ||
const isWindows = os.platform() === 'win32' | ||
const isMacOS = os.platform() === 'darwin' | ||
const isLinux = os.platform() === 'linux' | ||
|
||
const info = await platform.getDetails() | ||
expect(info.platform).toEqual(os.platform()) | ||
expect(info.isWindows).toEqual(isWindows) | ||
expect(info.isMacOS).toEqual(isMacOS) | ||
expect(info.isLinux).toEqual(isLinux) | ||
}) | ||
}) |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
import os from 'os' | ||
import * as exec from '@actions/exec' | ||
|
||
const getWindowsInfo = async (): Promise<{name: string; version: string}> => { | ||
const {stdout: version} = await exec.getExecOutput( | ||
'powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"', | ||
undefined, | ||
{ | ||
silent: true | ||
} | ||
) | ||
|
||
const {stdout: name} = await exec.getExecOutput( | ||
'powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', | ||
undefined, | ||
{ | ||
silent: true | ||
} | ||
) | ||
|
||
return { | ||
name: name.trim(), | ||
version: version.trim() | ||
} | ||
} | ||
|
||
const getMacOsInfo = async (): Promise<{ | ||
name: string | ||
version: string | ||
}> => { | ||
const {stdout} = await exec.getExecOutput('sw_vers', undefined, { | ||
silent: true | ||
}) | ||
|
||
const version = stdout.match(/ProductVersion:\s*(.+)/)?.[1] ?? '' | ||
const name = stdout.match(/ProductName:\s*(.+)/)?.[1] ?? '' | ||
|
||
return { | ||
name, | ||
version | ||
} | ||
} | ||
|
||
const getLinuxInfo = async (): Promise<{ | ||
name: string | ||
version: string | ||
}> => { | ||
const {stdout} = await exec.getExecOutput('lsb_release', ['-i', '-r', '-s'], { | ||
silent: true | ||
}) | ||
|
||
const [name, version] = stdout.trim().split('\n') | ||
|
||
return { | ||
name, | ||
version | ||
} | ||
} | ||
|
||
export const platform = os.platform() | ||
export const arch = os.arch() | ||
export const isWindows = platform === 'win32' | ||
export const isMacOS = platform === 'darwin' | ||
export const isLinux = platform === 'linux' | ||
|
||
export async function getDetails(): Promise<{ | ||
name: string | ||
platform: string | ||
arch: string | ||
version: string | ||
isWindows: boolean | ||
isMacOS: boolean | ||
isLinux: boolean | ||
}> { | ||
return { | ||
...(await (isWindows | ||
? getWindowsInfo() | ||
: isMacOS | ||
? getMacOsInfo() | ||
: getLinuxInfo())), | ||
platform, | ||
arch, | ||
isWindows, | ||
isMacOS, | ||
isLinux | ||
} | ||
} |