From 7cccbd30650c21d2d254ee7e04881f774b243c66 Mon Sep 17 00:00:00 2001 From: shimataro Date: Tue, 20 Dec 2022 08:06:55 +0900 Subject: [PATCH] add cleanup process (#224) * add cleanup process * save state * update README/CHANGELOG * fix message * `getSshDirectory()` should not be exported --- .eslintrc.yml | 2 +- CHANGELOG.md | 4 ++++ README.md | 5 ++++- action.yml | 1 + lib/index.js | 55 ++++++++++++++++++++++++++++++++++++++++++++-- src/main.ts | 61 +++++++++++++++++++++++++++++++++++++++++++++++++-- 6 files changed, 122 insertions(+), 6 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index c4a349d..dab2ab9 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -161,7 +161,7 @@ rules: # https://eslint.org/docs/rules/ - error - max: 1 no-native-reassign: error - no-negated-condition: error + no-negated-condition: 'off' no-negated-in-lhs: error no-nested-ternary: error no-new: error diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf73c7..6bbab9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Added + +* reomve SSH directory at the end of workflow + ## [2.4.0] - 2022-11-03 ### Added diff --git a/README.md b/README.md index ce0c39b..97672f0 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,10 @@ steps: See [Workflow syntax for GitHub Actions](https://help.github.com/en/articles/workflow-syntax-for-github-actions) for details. -**NOTE:** Server key of `github.com` will be always set to `known_hosts`. +**NOTE:** + +* Server key of `github.com` will be always set to `known_hosts`. +* SSH keys will be removed at the end of workflow. ### Install multiple keys diff --git a/action.yml b/action.yml index 79d2cfa..7c9fd9e 100644 --- a/action.yml +++ b/action.yml @@ -28,3 +28,4 @@ inputs: runs: using: "node16" main: "lib/index.js" + post: "lib/index.js" diff --git a/lib/index.js b/lib/index.js index 54a1263..a3d78c6 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2738,6 +2738,31 @@ catch (err) { * main function */ function main() { + if (!isPost()) { + setup(); + setPost(); + } + else { + cleanup(); + } +} +/** + * is post process? + * @returns Yes/No + */ +function isPost() { + return Boolean(core.getState("isPost")); +} +/** + * update post state + */ +function setPost() { + core.saveState("isPost", "true"); +} +/** + * setup function + */ +function setup() { // parameters const key = core.getInput("key", { required: true, @@ -2788,19 +2813,45 @@ function main() { } console.log(`SSH key has been stored to ${sshDirName} successfully.`); } +/** + * cleanup function + */ +function cleanup() { + // remove ".ssh" directory + const sshDirName = removeSshDirectory(); + console.log(`SSH key in ${sshDirName} has been removed successfully.`); +} /** * create ".ssh" directory * @returns directory name */ function createSshDirectory() { - const home = getHomeDirectory(); - const dirName = path_1.default.resolve(home, ".ssh"); + const dirName = getSshDirectory(); fs_1.default.mkdirSync(dirName, { recursive: true, mode: 0o700, }); return dirName; } +/** + * remove ".ssh" directory + * @returns removed directory name + */ +function removeSshDirectory() { + const dirName = getSshDirectory(); + fs_1.default.rmSync(dirName, { + recursive: true, + force: true, + }); + return dirName; +} +/** + * get SSH directory + * @returns SSH directory name + */ +function getSshDirectory() { + return path_1.default.resolve(getHomeDirectory(), ".ssh"); +} /** * get home directory * @returns home directory name diff --git a/src/main.ts b/src/main.ts index 34a4536..40443e9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -25,6 +25,33 @@ try { * main function */ function main(): void { + if (!isPost()) { + setup(); + setPost(); + } else { + cleanup(); + } +} + +/** + * is post process? + * @returns Yes/No + */ +function isPost(): boolean { + return Boolean(core.getState("isPost")); +} + +/** + * update post state + */ +function setPost(): void { + core.saveState("isPost", "true"); +} + +/** + * setup function + */ +function setup(): void { // parameters const key = core.getInput("key", { required: true, @@ -80,13 +107,22 @@ function main(): void { console.log(`SSH key has been stored to ${sshDirName} successfully.`); } +/** + * cleanup function + */ +function cleanup(): void { + // remove ".ssh" directory + const sshDirName = removeSshDirectory(); + + console.log(`SSH key in ${sshDirName} has been removed successfully.`); +} + /** * create ".ssh" directory * @returns directory name */ function createSshDirectory(): string { - const home = getHomeDirectory(); - const dirName = path.resolve(home, ".ssh"); + const dirName = getSshDirectory(); fs.mkdirSync(dirName, { recursive: true, mode: 0o700, @@ -94,6 +130,27 @@ function createSshDirectory(): string { return dirName; } +/** + * remove ".ssh" directory + * @returns removed directory name + */ +function removeSshDirectory(): string { + const dirName = getSshDirectory(); + fs.rmSync(dirName, { + recursive: true, + force: true, + }); + return dirName; +} + +/** + * get SSH directory + * @returns SSH directory name + */ +function getSshDirectory(): string { + return path.resolve(getHomeDirectory(), ".ssh"); +} + /** * get home directory * @returns home directory name