mirror of
https://github.com/shimataro/ssh-key-action.git
synced 2025-06-19 22:52:10 +10:00
fix; files that didn't backed up is not removed in "post" phase (#256)
* fix; files that didn't backed up is not removed in "post" phase * output logs * output log in main phase * update log text * update log text * create directory only if not exist * amend step name
This commit is contained in:
parent
ab731d2fcd
commit
ccfb951a8e
8 changed files with 127 additions and 75 deletions
18
.github/workflows/reusable-verify.yml
vendored
18
.github/workflows/reusable-verify.yml
vendored
|
@ -162,7 +162,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
key: "dummy" # replaced
|
key: "dummy" # replaced
|
||||||
known_hosts: unnecessary
|
known_hosts: unnecessary
|
||||||
- name: Install SSH key (replace)
|
- name: Install SSH key (replaces existing key)
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: ${{ secrets.SSH_KEY_PEM }}
|
key: ${{ secrets.SSH_KEY_PEM }}
|
||||||
|
@ -181,7 +181,7 @@ jobs:
|
||||||
if: ${{ inputs.package_installation_command != '' }}
|
if: ${{ inputs.package_installation_command != '' }}
|
||||||
- name: Checkout source codes
|
- name: Checkout source codes
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Install SSH key (replace)
|
- name: Install SSH key
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: ${{ secrets.SSH_KEY_PEM }}
|
key: ${{ secrets.SSH_KEY_PEM }}
|
||||||
|
@ -200,12 +200,12 @@ jobs:
|
||||||
if: ${{ inputs.package_installation_command != '' }}
|
if: ${{ inputs.package_installation_command != '' }}
|
||||||
- name: Checkout source codes
|
- name: Checkout source codes
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Install SSH key (dummy)
|
- name: Install SSH key
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: ${{ secrets.SSH_KEY_PEM }}
|
key: ${{ secrets.SSH_KEY_PEM }}
|
||||||
known_hosts: unnecessary
|
known_hosts: unnecessary
|
||||||
- name: Install SSH key (replace)
|
- name: Install SSH key (does nothing)
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: "dummy" # ignored
|
key: "dummy" # ignored
|
||||||
|
@ -224,7 +224,7 @@ jobs:
|
||||||
if: ${{ inputs.package_installation_command != '' }}
|
if: ${{ inputs.package_installation_command != '' }}
|
||||||
- name: Checkout source codes
|
- name: Checkout source codes
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Install SSH key (replace)
|
- name: Install SSH key
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: ${{ secrets.SSH_KEY_PEM }}
|
key: ${{ secrets.SSH_KEY_PEM }}
|
||||||
|
@ -243,15 +243,15 @@ jobs:
|
||||||
if: ${{ inputs.package_installation_command != '' }}
|
if: ${{ inputs.package_installation_command != '' }}
|
||||||
- name: Checkout source codes
|
- name: Checkout source codes
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Install SSH key (dummy)
|
- name: Install SSH key
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: ${{ secrets.SSH_KEY_PEM }}
|
key: ${{ secrets.SSH_KEY_PEM }}
|
||||||
known_hosts: unnecessary
|
known_hosts: unnecessary
|
||||||
- name: Install SSH key (replace)
|
- name: Install SSH key (fails)
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: "dummy" # ignored
|
key: "dummy" # fails
|
||||||
known_hosts: unnecessary
|
known_hosts: unnecessary
|
||||||
if_key_exists: fail
|
if_key_exists: fail
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
@ -268,7 +268,7 @@ jobs:
|
||||||
if: ${{ inputs.package_installation_command != '' }}
|
if: ${{ inputs.package_installation_command != '' }}
|
||||||
- name: Checkout source codes
|
- name: Checkout source codes
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Install SSH key (replace)
|
- name: Install SSH key
|
||||||
uses: ./.
|
uses: ./.
|
||||||
with:
|
with:
|
||||||
key: ${{ secrets.SSH_KEY_PEM }}
|
key: ${{ secrets.SSH_KEY_PEM }}
|
||||||
|
|
42
dist/main.js
vendored
42
dist/main.js
vendored
File diff suppressed because one or more lines are too long
6
dist/main.js.map
vendored
6
dist/main.js.map
vendored
File diff suppressed because one or more lines are too long
44
dist/post.js
vendored
44
dist/post.js
vendored
File diff suppressed because one or more lines are too long
6
dist/post.js.map
vendored
6
dist/post.js.map
vendored
File diff suppressed because one or more lines are too long
|
@ -6,6 +6,7 @@ import * as core from "@actions/core";
|
||||||
|
|
||||||
/** state name of backup suffix */
|
/** state name of backup suffix */
|
||||||
const STATE_BACKUP_SUFFIX = "backup-suffix";
|
const STATE_BACKUP_SUFFIX = "backup-suffix";
|
||||||
|
const STATE_CREATED_FILES = "created-files";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create backup suffix name
|
* create backup suffix name
|
||||||
|
@ -31,6 +32,24 @@ export function getBackupSuffix(): string {
|
||||||
return core.getState(STATE_BACKUP_SUFFIX);
|
return core.getState(STATE_BACKUP_SUFFIX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* save created file names
|
||||||
|
* @param fileNames array of file names
|
||||||
|
*/
|
||||||
|
export function saveCreatedFileNames(fileNames: string[]): void {
|
||||||
|
const json = JSON.stringify(fileNames);
|
||||||
|
core.saveState(STATE_CREATED_FILES, json);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* save created file names
|
||||||
|
* @returns saved array of file names
|
||||||
|
*/
|
||||||
|
export function loadCreatedFileNames(): string[] {
|
||||||
|
const json = core.getState(STATE_CREATED_FILES);
|
||||||
|
return JSON.parse(json) as string[];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get SSH directory
|
* get SSH directory
|
||||||
* @returns SSH directory name
|
* @returns SSH directory name
|
||||||
|
|
26
src/main.ts
26
src/main.ts
|
@ -48,10 +48,10 @@ export function main(): void {
|
||||||
// create ".ssh" directory
|
// create ".ssh" directory
|
||||||
const sshDirName = common.getSshDirectory();
|
const sshDirName = common.getSshDirectory();
|
||||||
const backupSuffix = common.createBackupSuffix(sshDirName);
|
const backupSuffix = common.createBackupSuffix(sshDirName);
|
||||||
fs.mkdirSync(sshDirName, {
|
if (backupSuffix === "") {
|
||||||
recursive: true,
|
createDirectory(sshDirName);
|
||||||
mode: 0o700,
|
console.log(`✅SSH directory "${sshDirName}" has been created successfully.`);
|
||||||
});
|
}
|
||||||
|
|
||||||
// files to be created
|
// files to be created
|
||||||
const files: FileInfo[] = [
|
const files: FileInfo[] = [
|
||||||
|
@ -89,6 +89,7 @@ export function main(): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
// create files
|
// create files
|
||||||
|
const createdFileNames: string[] = [];
|
||||||
const backedUpFileNames: string[] = [];
|
const backedUpFileNames: string[] = [];
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
const fileName = path.join(sshDirName, file.name);
|
const fileName = path.join(sshDirName, file.name);
|
||||||
|
@ -97,14 +98,27 @@ export function main(): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.writeFileSync(fileName, file.contents, file.options);
|
fs.writeFileSync(fileName, file.contents, file.options);
|
||||||
|
createdFileNames.push(file.name);
|
||||||
}
|
}
|
||||||
|
common.saveCreatedFileNames(createdFileNames);
|
||||||
|
|
||||||
console.log(`SSH key has been stored to ${sshDirName} successfully.`);
|
console.log(`✅Following files have been created in "${sshDirName}" successfully; ${createdFileNames.join(", ")}`);
|
||||||
if (backedUpFileNames.length > 0) {
|
if (backedUpFileNames.length > 0) {
|
||||||
console.log(`Following files are backed up in suffix "${backupSuffix}"; ${backedUpFileNames.join(", ")}`);
|
console.log(`✅Following files have been backed up in suffix "${backupSuffix}" successfully; ${backedUpFileNames.join(", ")}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create directory
|
||||||
|
* @param dirName directory name to remove
|
||||||
|
*/
|
||||||
|
function createDirectory(dirName: string): void {
|
||||||
|
fs.mkdirSync(dirName, {
|
||||||
|
recursive: true,
|
||||||
|
mode: 0o700,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* back up file
|
* back up file
|
||||||
* @param fileName file to back up
|
* @param fileName file to back up
|
||||||
|
|
41
src/post.ts
41
src/post.ts
|
@ -17,35 +17,55 @@ try {
|
||||||
* cleanup function
|
* cleanup function
|
||||||
*/
|
*/
|
||||||
export function post(): void {
|
export function post(): void {
|
||||||
|
const sshDirName = common.getSshDirectory();
|
||||||
const backupSuffix = common.getBackupSuffix();
|
const backupSuffix = common.getBackupSuffix();
|
||||||
if (backupSuffix === "") {
|
if (backupSuffix === "") {
|
||||||
// remove ".ssh" directory if suffix is not set
|
// remove ".ssh" directory if suffix is not set
|
||||||
removeSshDirectory();
|
removeDirectory(sshDirName);
|
||||||
|
console.log(`✅SSH directory "${sshDirName}" has been removed successfully.`);
|
||||||
} else {
|
} else {
|
||||||
// restore files from backup suffix
|
// remove created files and restore from backup
|
||||||
restore(backupSuffix);
|
const removedFileNames = removeCreatedFiles(sshDirName);
|
||||||
|
console.log(`✅Following files have been removed successfully; ${removedFileNames.join(", ")}`);
|
||||||
|
|
||||||
|
const restoredFileNames = restoreFiles(sshDirName, backupSuffix);
|
||||||
|
console.log(`✅Following files in suffix "${backupSuffix}" have been restored successfully; ${restoredFileNames.join(", ")}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remove ".ssh" directory
|
* remove directory
|
||||||
|
* @param dirName directory name to remove
|
||||||
*/
|
*/
|
||||||
function removeSshDirectory(): void {
|
function removeDirectory(dirName: string): void {
|
||||||
const dirName = common.getSshDirectory();
|
|
||||||
fs.rmSync(dirName, {
|
fs.rmSync(dirName, {
|
||||||
recursive: true,
|
recursive: true,
|
||||||
force: true,
|
force: true,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
console.log(`SSH key in ${dirName} has been removed successfully.`);
|
/**
|
||||||
|
* remove created files in main phase
|
||||||
|
* @param dirName directory name
|
||||||
|
* @returns removed file names
|
||||||
|
*/
|
||||||
|
function removeCreatedFiles(dirName: string): string[] {
|
||||||
|
const createdFileNames = common.loadCreatedFileNames();
|
||||||
|
for (const fileName of createdFileNames) {
|
||||||
|
const pathName = path.join(dirName, fileName);
|
||||||
|
|
||||||
|
fs.rmSync(pathName);
|
||||||
|
}
|
||||||
|
return createdFileNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* restore files from backups
|
* restore files from backups
|
||||||
|
* @param dirName directory name
|
||||||
* @param backupSuffix suffix of backup directory
|
* @param backupSuffix suffix of backup directory
|
||||||
|
* @returns restored file names
|
||||||
*/
|
*/
|
||||||
function restore(backupSuffix: string): void {
|
function restoreFiles(dirName: string, backupSuffix: string): string[] {
|
||||||
const dirName = common.getSshDirectory();
|
|
||||||
const restoredFileNames: string[] = [];
|
const restoredFileNames: string[] = [];
|
||||||
const entries = fs.readdirSync(dirName)
|
const entries = fs.readdirSync(dirName)
|
||||||
.filter((entry) => {
|
.filter((entry) => {
|
||||||
|
@ -58,9 +78,8 @@ function restore(backupSuffix: string): void {
|
||||||
const pathNameOrg = path.join(dirName, entryOrg);
|
const pathNameOrg = path.join(dirName, entryOrg);
|
||||||
const pathNameBak = path.join(dirName, entry);
|
const pathNameBak = path.join(dirName, entry);
|
||||||
|
|
||||||
fs.rmSync(pathNameOrg);
|
|
||||||
fs.renameSync(pathNameBak, pathNameOrg);
|
fs.renameSync(pathNameBak, pathNameOrg);
|
||||||
restoredFileNames.push(entryOrg);
|
restoredFileNames.push(entryOrg);
|
||||||
}
|
}
|
||||||
console.log(`Following files in suffix "${backupSuffix}" are restored; ${restoredFileNames.join(", ")}`);
|
return restoredFileNames;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue