mirror of
https://github.com/crazy-max/ghaction-import-gpg.git
synced 2024-12-23 19:52:09 -05:00
Drop Windows support
This commit is contained in:
parent
f71c727ad9
commit
6549c6d230
7 changed files with 22 additions and 353 deletions
1
.github/workflows/ci.yml
vendored
1
.github/workflows/ci.yml
vendored
|
@ -17,7 +17,6 @@ jobs:
|
|||
os:
|
||||
- ubuntu-latest
|
||||
- macOS-latest
|
||||
- windows-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
|
|
1
.github/workflows/test.yml
vendored
1
.github/workflows/test.yml
vendored
|
@ -17,7 +17,6 @@ jobs:
|
|||
os:
|
||||
- ubuntu-latest
|
||||
- macOS-latest
|
||||
- windows-latest
|
||||
steps:
|
||||
-
|
||||
# https://github.com/actions/checkout
|
||||
|
|
|
@ -14,7 +14,7 @@ If you are interested, [check out](https://git.io/Je09Y) my other :octocat: GitH
|
|||
|
||||
## Features
|
||||
|
||||
* Works on Linux, MacOS and Windows [virtual environments](https://help.github.com/en/articles/virtual-environments-for-github-actions#supported-virtual-environments-and-hardware-resources)
|
||||
* Works on Linux and MacOS [virtual environments](https://help.github.com/en/articles/virtual-environments-for-github-actions#supported-virtual-environments-and-hardware-resources)
|
||||
* Allow to seed the internal cache of `gpg-agent` with provided passphrase
|
||||
* Purge imported GPG key and cache information from runner (security)
|
||||
|
||||
|
|
330
dist/index.js
generated
vendored
330
dist/index.js
generated
vendored
|
@ -987,54 +987,6 @@ if (!exports.IsPost) {
|
|||
}
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 197:
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
|
||||
module.exports = isexe
|
||||
isexe.sync = sync
|
||||
|
||||
var fs = __webpack_require__(747)
|
||||
|
||||
function isexe (path, options, cb) {
|
||||
fs.stat(path, function (er, stat) {
|
||||
cb(er, er ? false : checkStat(stat, options))
|
||||
})
|
||||
}
|
||||
|
||||
function sync (path, options) {
|
||||
return checkStat(fs.statSync(path), options)
|
||||
}
|
||||
|
||||
function checkStat (stat, options) {
|
||||
return stat.isFile() && checkMode(stat, options)
|
||||
}
|
||||
|
||||
function checkMode (stat, options) {
|
||||
var mod = stat.mode
|
||||
var uid = stat.uid
|
||||
var gid = stat.gid
|
||||
|
||||
var myUid = options.uid !== undefined ?
|
||||
options.uid : process.getuid && process.getuid()
|
||||
var myGid = options.gid !== undefined ?
|
||||
options.gid : process.getgid && process.getgid()
|
||||
|
||||
var u = parseInt('100', 8)
|
||||
var g = parseInt('010', 8)
|
||||
var o = parseInt('001', 8)
|
||||
var ug = u | g
|
||||
|
||||
var ret = (mod & o) ||
|
||||
(mod & g) && gid === myGid ||
|
||||
(mod & u) && uid === myUid ||
|
||||
(mod & ug) && myUid === 0
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 198:
|
||||
|
@ -1058,15 +1010,23 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||
result["default"] = mod;
|
||||
return result;
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const core = __importStar(__webpack_require__(470));
|
||||
const gpg = __importStar(__webpack_require__(207));
|
||||
const openpgp = __importStar(__webpack_require__(781));
|
||||
const stateHelper = __importStar(__webpack_require__(153));
|
||||
const exec = __importStar(__webpack_require__(986));
|
||||
const os_1 = __importDefault(__webpack_require__(87));
|
||||
function run() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
if (os_1.default.platform() == 'win32') {
|
||||
core.setFailed('Windows platform not supported');
|
||||
return;
|
||||
}
|
||||
if (!process.env.SIGNING_KEY) {
|
||||
core.setFailed('Signing key required');
|
||||
return;
|
||||
|
@ -1156,50 +1116,27 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||
result["default"] = mod;
|
||||
return result;
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const fs = __importStar(__webpack_require__(747));
|
||||
const path = __importStar(__webpack_require__(622));
|
||||
const os = __importStar(__webpack_require__(87));
|
||||
const exec = __importStar(__webpack_require__(807));
|
||||
const which_1 = __importDefault(__webpack_require__(814));
|
||||
exports.agentConfig = `default-cache-ttl 7200
|
||||
max-cache-ttl 31536000
|
||||
allow-preset-passphrase`;
|
||||
const getGpgPresetPassphrasePath = () => __awaiter(void 0, void 0, void 0, function* () {
|
||||
let gpgPresetPassphrasePath;
|
||||
gpgPresetPassphrasePath = yield which_1.default('gpg-preset-passphrase').then(resolvedPath => {
|
||||
return resolvedPath;
|
||||
});
|
||||
if (gpgPresetPassphrasePath != '') {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
const { libexecdir: libexecdir } = yield exports.getDirs();
|
||||
gpgPresetPassphrasePath = path.join(libexecdir, 'gpg-preset-passphrase');
|
||||
let gpgPresetPassphrasePath = path.join(libexecdir, 'gpg-preset-passphrase');
|
||||
if (yield fs.existsSync(gpgPresetPassphrasePath)) {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
gpgPresetPassphrasePath = path.join(process.env.HOMEDRIVE || '', libexecdir, 'gpg-preset-passphrase.exe');
|
||||
if (yield fs.existsSync(gpgPresetPassphrasePath)) {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
gpgPresetPassphrasePath = path.join(`C:\\Program Files\\Git`, libexecdir, 'gpg-preset-passphrase.exe');
|
||||
if (yield fs.existsSync(gpgPresetPassphrasePath)) {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
throw new Error('gpg-preset-passphrase not found');
|
||||
return 'gpg-preset-passphrase';
|
||||
});
|
||||
const getGnupgHome = () => __awaiter(void 0, void 0, void 0, function* () {
|
||||
if (process.env.GNUPGHOME) {
|
||||
return process.env.GNUPGHOME;
|
||||
}
|
||||
let homedir = path.join(process.env.HOME || '', '.gnupg');
|
||||
if (os.platform() == 'win32' && !process.env.HOME) {
|
||||
homedir = path.join(process.env.USERPROFILE || '', '.gnupg');
|
||||
}
|
||||
return homedir;
|
||||
return path.join(process.env.HOME || '', '.gnupg');
|
||||
});
|
||||
exports.getVersion = () => __awaiter(void 0, void 0, void 0, function* () {
|
||||
return yield exec.exec('gpg', ['--version'], true).then(res => {
|
||||
|
@ -45624,70 +45561,6 @@ exports.default = AsyncProxy;
|
|||
});
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 742:
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
|
||||
var fs = __webpack_require__(747)
|
||||
var core
|
||||
if (process.platform === 'win32' || global.TESTING_WINDOWS) {
|
||||
core = __webpack_require__(818)
|
||||
} else {
|
||||
core = __webpack_require__(197)
|
||||
}
|
||||
|
||||
module.exports = isexe
|
||||
isexe.sync = sync
|
||||
|
||||
function isexe (path, options, cb) {
|
||||
if (typeof options === 'function') {
|
||||
cb = options
|
||||
options = {}
|
||||
}
|
||||
|
||||
if (!cb) {
|
||||
if (typeof Promise !== 'function') {
|
||||
throw new TypeError('callback not provided')
|
||||
}
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
isexe(path, options || {}, function (er, is) {
|
||||
if (er) {
|
||||
reject(er)
|
||||
} else {
|
||||
resolve(is)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
core(path, options || {}, function (er, is) {
|
||||
// ignore EACCES because that just means we aren't allowed to run it
|
||||
if (er) {
|
||||
if (er.code === 'EACCES' || options && options.ignoreErrors) {
|
||||
er = null
|
||||
is = false
|
||||
}
|
||||
}
|
||||
cb(er, is)
|
||||
})
|
||||
}
|
||||
|
||||
function sync (path, options) {
|
||||
// my kingdom for a filtered catch
|
||||
try {
|
||||
return core.sync(path, options || {})
|
||||
} catch (er) {
|
||||
if (options && options.ignoreErrors || er.code === 'EACCES') {
|
||||
return false
|
||||
} else {
|
||||
throw er
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 747:
|
||||
|
@ -45799,187 +45672,6 @@ exports.exec = (command, args = [], silent) => __awaiter(void 0, void 0, void 0,
|
|||
});
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 814:
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
|
||||
const isWindows = process.platform === 'win32' ||
|
||||
process.env.OSTYPE === 'cygwin' ||
|
||||
process.env.OSTYPE === 'msys'
|
||||
|
||||
const path = __webpack_require__(622)
|
||||
const COLON = isWindows ? ';' : ':'
|
||||
const isexe = __webpack_require__(742)
|
||||
|
||||
const getNotFoundError = (cmd) =>
|
||||
Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })
|
||||
|
||||
const getPathInfo = (cmd, opt) => {
|
||||
const colon = opt.colon || COLON
|
||||
|
||||
// If it has a slash, then we don't bother searching the pathenv.
|
||||
// just check the file itself, and that's it.
|
||||
const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? ['']
|
||||
: (
|
||||
[
|
||||
// windows always checks the cwd first
|
||||
...(isWindows ? [process.cwd()] : []),
|
||||
...(opt.path || process.env.PATH ||
|
||||
/* istanbul ignore next: very unusual */ '').split(colon),
|
||||
]
|
||||
)
|
||||
const pathExtExe = isWindows
|
||||
? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'
|
||||
: ''
|
||||
const pathExt = isWindows ? pathExtExe.split(colon) : ['']
|
||||
|
||||
if (isWindows) {
|
||||
if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
|
||||
pathExt.unshift('')
|
||||
}
|
||||
|
||||
return {
|
||||
pathEnv,
|
||||
pathExt,
|
||||
pathExtExe,
|
||||
}
|
||||
}
|
||||
|
||||
const which = (cmd, opt, cb) => {
|
||||
if (typeof opt === 'function') {
|
||||
cb = opt
|
||||
opt = {}
|
||||
}
|
||||
if (!opt)
|
||||
opt = {}
|
||||
|
||||
const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
|
||||
const found = []
|
||||
|
||||
const step = i => new Promise((resolve, reject) => {
|
||||
if (i === pathEnv.length)
|
||||
return opt.all && found.length ? resolve(found)
|
||||
: reject(getNotFoundError(cmd))
|
||||
|
||||
const ppRaw = pathEnv[i]
|
||||
const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw
|
||||
|
||||
const pCmd = path.join(pathPart, cmd)
|
||||
const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
|
||||
: pCmd
|
||||
|
||||
resolve(subStep(p, i, 0))
|
||||
})
|
||||
|
||||
const subStep = (p, i, ii) => new Promise((resolve, reject) => {
|
||||
if (ii === pathExt.length)
|
||||
return resolve(step(i + 1))
|
||||
const ext = pathExt[ii]
|
||||
isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {
|
||||
if (!er && is) {
|
||||
if (opt.all)
|
||||
found.push(p + ext)
|
||||
else
|
||||
return resolve(p + ext)
|
||||
}
|
||||
return resolve(subStep(p, i, ii + 1))
|
||||
})
|
||||
})
|
||||
|
||||
return cb ? step(0).then(res => cb(null, res), cb) : step(0)
|
||||
}
|
||||
|
||||
const whichSync = (cmd, opt) => {
|
||||
opt = opt || {}
|
||||
|
||||
const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
|
||||
const found = []
|
||||
|
||||
for (let i = 0; i < pathEnv.length; i ++) {
|
||||
const ppRaw = pathEnv[i]
|
||||
const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw
|
||||
|
||||
const pCmd = path.join(pathPart, cmd)
|
||||
const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
|
||||
: pCmd
|
||||
|
||||
for (let j = 0; j < pathExt.length; j ++) {
|
||||
const cur = p + pathExt[j]
|
||||
try {
|
||||
const is = isexe.sync(cur, { pathExt: pathExtExe })
|
||||
if (is) {
|
||||
if (opt.all)
|
||||
found.push(cur)
|
||||
else
|
||||
return cur
|
||||
}
|
||||
} catch (ex) {}
|
||||
}
|
||||
}
|
||||
|
||||
if (opt.all && found.length)
|
||||
return found
|
||||
|
||||
if (opt.nothrow)
|
||||
return null
|
||||
|
||||
throw getNotFoundError(cmd)
|
||||
}
|
||||
|
||||
module.exports = which
|
||||
which.sync = whichSync
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 818:
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
|
||||
module.exports = isexe
|
||||
isexe.sync = sync
|
||||
|
||||
var fs = __webpack_require__(747)
|
||||
|
||||
function checkPathExt (path, options) {
|
||||
var pathext = options.pathExt !== undefined ?
|
||||
options.pathExt : process.env.PATHEXT
|
||||
|
||||
if (!pathext) {
|
||||
return true
|
||||
}
|
||||
|
||||
pathext = pathext.split(';')
|
||||
if (pathext.indexOf('') !== -1) {
|
||||
return true
|
||||
}
|
||||
for (var i = 0; i < pathext.length; i++) {
|
||||
var p = pathext[i].toLowerCase()
|
||||
if (p && path.substr(-p.length).toLowerCase() === p) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
function checkStat (stat, path, options) {
|
||||
if (!stat.isSymbolicLink() && !stat.isFile()) {
|
||||
return false
|
||||
}
|
||||
return checkPathExt(path, options)
|
||||
}
|
||||
|
||||
function isexe (path, options, cb) {
|
||||
fs.stat(path, function (er, stat) {
|
||||
cb(er, er ? false : checkStat(stat, path, options))
|
||||
})
|
||||
}
|
||||
|
||||
function sync (path, options) {
|
||||
return checkStat(fs.statSync(path), path, options)
|
||||
}
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 986:
|
||||
|
|
|
@ -25,14 +25,12 @@
|
|||
"@actions/core": "^1.2.3",
|
||||
"@actions/exec": "^1.0.4",
|
||||
"@actions/github": "^2.1.1",
|
||||
"openpgp": "^4.10.4",
|
||||
"which": "^2.0.2"
|
||||
"openpgp": "^4.10.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^25.2.1",
|
||||
"@types/node": "^13.13.4",
|
||||
"@types/openpgp": "^4.4.10",
|
||||
"@types/which": "^1.3.2",
|
||||
"@zeit/ncc": "^0.22.1",
|
||||
"jest": "^25.5.4",
|
||||
"jest-circus": "^25.5.4",
|
||||
|
|
31
src/gpg.ts
31
src/gpg.ts
|
@ -2,7 +2,6 @@ import * as fs from 'fs';
|
|||
import * as path from 'path';
|
||||
import * as os from 'os';
|
||||
import * as exec from './exec';
|
||||
import which from 'which';
|
||||
|
||||
export const agentConfig = `default-cache-ttl 7200
|
||||
max-cache-ttl 31536000
|
||||
|
@ -21,43 +20,19 @@ export interface Dirs {
|
|||
}
|
||||
|
||||
const getGpgPresetPassphrasePath = async (): Promise<string> => {
|
||||
let gpgPresetPassphrasePath: string;
|
||||
|
||||
gpgPresetPassphrasePath = await which('gpg-preset-passphrase').then(resolvedPath => {
|
||||
return resolvedPath;
|
||||
});
|
||||
if (gpgPresetPassphrasePath != '') {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
|
||||
const {libexecdir: libexecdir} = await getDirs();
|
||||
gpgPresetPassphrasePath = path.join(libexecdir, 'gpg-preset-passphrase');
|
||||
let gpgPresetPassphrasePath = path.join(libexecdir, 'gpg-preset-passphrase');
|
||||
if (await fs.existsSync(gpgPresetPassphrasePath)) {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
|
||||
gpgPresetPassphrasePath = path.join(process.env.HOMEDRIVE || '', libexecdir, 'gpg-preset-passphrase.exe');
|
||||
if (await fs.existsSync(gpgPresetPassphrasePath)) {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
|
||||
gpgPresetPassphrasePath = path.join(`C:\\Program Files\\Git`, libexecdir, 'gpg-preset-passphrase.exe');
|
||||
if (await fs.existsSync(gpgPresetPassphrasePath)) {
|
||||
return gpgPresetPassphrasePath;
|
||||
}
|
||||
|
||||
throw new Error('gpg-preset-passphrase not found');
|
||||
return 'gpg-preset-passphrase';
|
||||
};
|
||||
|
||||
const getGnupgHome = async (): Promise<string> => {
|
||||
if (process.env.GNUPGHOME) {
|
||||
return process.env.GNUPGHOME;
|
||||
}
|
||||
let homedir: string = path.join(process.env.HOME || '', '.gnupg');
|
||||
if (os.platform() == 'win32' && !process.env.HOME) {
|
||||
homedir = path.join(process.env.USERPROFILE || '', '.gnupg');
|
||||
}
|
||||
return homedir;
|
||||
return path.join(process.env.HOME || '', '.gnupg');
|
||||
};
|
||||
|
||||
export const getVersion = async (): Promise<Version> => {
|
||||
|
|
|
@ -3,9 +3,15 @@ import * as gpg from './gpg';
|
|||
import * as openpgp from './openpgp';
|
||||
import * as stateHelper from './state-helper';
|
||||
import * as exec from '@actions/exec';
|
||||
import os from 'os';
|
||||
|
||||
async function run(): Promise<void> {
|
||||
try {
|
||||
if (os.platform() == 'win32') {
|
||||
core.setFailed('Windows platform not supported');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!process.env.SIGNING_KEY) {
|
||||
core.setFailed('Signing key required');
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue