make it into a JavaScript action

This is a huge step back IMO, but I needed to be able to restore the
original PATH back as a "post" step.  Currently, composite actions don't
support post-actions, but JavaScript ones do.  I needed this due to a
bug: actions/cache wouldn't find Git's tar on windows-2016 (the one in
System32 would get used on windows-2019) if the PATH was cleaned up.
This commit is contained in:
Egor Tensin 2021-03-14 03:42:14 +03:00
parent 1520e0658b
commit 203b15ee12
4 changed files with 79 additions and 32 deletions

View file

@ -11,38 +11,9 @@ inputs:
default: 1
runs:
using: composite
steps:
- run: |
New-Variable os -Value ('${{ runner.os }}') -Option Constant
New-Variable windows_host -Value ($os -eq 'Windows') -Option Constant
New-Variable dirs -Value ('${{ inputs.dirs }}') -Option Constant
New-Variable default -Value ('${{ inputs.default }}' -eq '1') -Option Constant
if ($windows_host) {
$sep = [IO.Path]::PathSeparator
$new_path = $dirs.Split($sep, [System.StringSplitOptions]::RemoveEmptyEntries)
if ($default) {
# This seems to be the default on new installations.
# Also, MSYS2 does this.
$new_path += @(
'C:\Windows\system32',
'C:\Windows',
'C:\Windows\System32\Wbem',
'C:\Windows\System32\WindowsPowerShell\v1.0\'
)
}
$new_path = $new_path -join $sep
echo "PATH=$new_path" >> $env:GITHUB_ENV
} else {
echo "::warning ::Not going to clean up PATH variable on $os"
}
shell: pwsh
using: node12
main: clean.js
post: restore.js
branding:
icon: star

39
clean.js Normal file
View file

@ -0,0 +1,39 @@
const os = require('os');
const path = require('path');
const process = require('process');
const core = require('@actions/core');
try {
if (os.platform != 'win32') {
core.warning('Not going to clean up PATH variable on ${os.platform}');
process.exit();
}
let custom_paths = core.getInput('dirs');
custom_paths = custom_paths.split(path.delimiter).filter(function(p) {
return p.length != 0;
});
// This seems to be the default on new installations.
// Also, MSYS2 does this.
const default_paths = [
'C:\\Windows\\system32',
'C:\\Windows',
'C:\\Windows\\System32\\Wbem',
'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\',
];
const add_default = core.getInput('default') == '1';
let new_path = custom_paths;
if (add_default) {
new_path = new_path.concat(default_paths);
}
new_path = new_path.join(path.delimiter);
core.exportVariable('ORIG_PATH', process.env.PATH);
core.exportVariable('PATH', new_path);
} catch (error) {
core.setFailed(error.message);
}

22
package.json Normal file
View file

@ -0,0 +1,22 @@
{
"name": "cleanup-path",
"version": "2.0.0",
"description": "Clean up PATH on Windows workers",
"main": "clean.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/egor-tensin/cleanup-path.git"
},
"author": "Egor Tensin <Egor.Tensin@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/egor-tensin/cleanup-path/issues"
},
"homepage": "https://github.com/egor-tensin/cleanup-path",
"dependencies": {
"@actions/core": "^1.2.6"
}
}

15
restore.js Normal file
View file

@ -0,0 +1,15 @@
const os = require('os');
const process = require('process');
const core = require('@actions/core');
try {
if (os.platform != 'win32') {
core.warning('Not going to restore PATH variable on ${os.platform}');
process.exit();
}
core.exportVariable('PATH', process.env.ORIG_PATH);
} catch (error) {
core.setFailed(error.message);
}