1
0
Fork 0
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:
shimataro 2023-10-11 16:20:54 +09:00 committed by GitHub
parent ab731d2fcd
commit ccfb951a8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 127 additions and 75 deletions

View file

@ -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

File diff suppressed because one or more lines are too long

6
dist/main.js.map vendored

File diff suppressed because one or more lines are too long

44
dist/post.js vendored

File diff suppressed because one or more lines are too long

6
dist/post.js.map vendored

File diff suppressed because one or more lines are too long

View file

@ -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

View file

@ -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

View file

@ -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;
} }