fix: copyAssets and deleteExcludedAssets (#528)

This commit is contained in:
Shohei Ueda 2020-10-20 23:57:59 +09:00 committed by GitHub
parent cf805b9457
commit e93eed3ba7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 151 additions and 8 deletions

View File

@ -0,0 +1 @@
/* CSS */

View File

@ -0,0 +1 @@
// JavaScript

View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1 @@
/* CSS */

View File

@ -0,0 +1 @@
// JavaScript

View File

@ -0,0 +1 @@
# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners

View File

@ -0,0 +1 @@
<!-- issue template -->

View File

@ -0,0 +1,7 @@
# dependabot config
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily

View File

@ -0,0 +1 @@
name: 'Test'

View File

@ -0,0 +1 @@
/* CSS */

View File

@ -0,0 +1 @@
// JavaScript

View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1 @@
/* CSS */

View File

@ -0,0 +1 @@
// JavaScript

View File

@ -1,4 +1,5 @@
import { import {
copyAssets,
setRepo, setRepo,
getUserName, getUserName,
getUserEmail, getUserEmail,
@ -10,6 +11,17 @@ import {Inputs} from '../src/interfaces';
import {getWorkDirName, createDir} from '../src/utils'; import {getWorkDirName, createDir} from '../src/utils';
import {CmdResult} from '../src/interfaces'; import {CmdResult} from '../src/interfaces';
import * as exec from '@actions/exec'; import * as exec from '@actions/exec';
import {cp, rm} from 'shelljs';
import path from 'path';
import fs from 'fs';
const testRoot = path.resolve(__dirname);
async function createTestDir(name: string): Promise<string> {
const date = new Date();
const unixTime = date.getTime();
return await getWorkDirName(`${unixTime}_${name}`);
}
beforeEach(() => { beforeEach(() => {
jest.resetModules(); jest.resetModules();
@ -22,6 +34,96 @@ afterEach(() => {
delete process.env['GITHUB_REPOSITORY']; delete process.env['GITHUB_REPOSITORY'];
}); });
describe('copyAssets', () => {
let gitTempDir = '';
(async (): Promise<void> => {
const date = new Date();
const unixTime = date.getTime();
gitTempDir = await getWorkDirName(`${unixTime}_git`);
})();
beforeAll(async () => {
await createDir(gitTempDir);
process.chdir(gitTempDir);
await exec.exec('git', ['init']);
});
test('copy assets from publish_dir to root, delete .github', async () => {
const publishDir = await createTestDir('src');
const destDir = await createTestDir('dst');
cp('-Rf', path.resolve(testRoot, 'fixtures/publish_dir_1'), publishDir);
cp('-Rf', gitTempDir, destDir);
await copyAssets(publishDir, destDir, '.github');
expect(fs.existsSync(path.resolve(destDir, '.github'))).toBeFalsy();
expect(fs.existsSync(path.resolve(destDir, 'index.html'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'assets/lib.css'))).toBeTruthy();
rm('-rf', publishDir, destDir);
});
test('copy assets from publish_dir to root, delete .github,main.js', async () => {
const publishDir = await createTestDir('src');
const destDir = await createTestDir('dst');
cp('-Rf', path.resolve(testRoot, 'fixtures/publish_dir_1'), publishDir);
cp('-Rf', gitTempDir, destDir);
await copyAssets(publishDir, destDir, '.github,main.js');
expect(fs.existsSync(path.resolve(destDir, '.github'))).toBeFalsy();
expect(fs.existsSync(path.resolve(destDir, 'index.html'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'main.js'))).toBeFalsy();
expect(fs.existsSync(path.resolve(destDir, 'assets/lib.css'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'assets/lib.js'))).toBeTruthy();
rm('-rf', publishDir, destDir);
});
test('copy assets from publish_dir to root, delete nothing', async () => {
const publishDir = await createTestDir('src');
const destDir = await createTestDir('dst');
cp('-Rf', path.resolve(testRoot, 'fixtures/publish_dir_root'), publishDir);
cp('-Rf', gitTempDir, destDir);
await copyAssets(publishDir, destDir, '');
expect(fs.existsSync(path.resolve(destDir, '.github'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'index.html'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'main.js'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'assets/lib.css'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'assets/lib.js'))).toBeTruthy();
rm('-rf', publishDir, destDir);
});
test('copy assets from root to root, delete .github', async () => {
const publishDir = await createTestDir('src');
const destDir = await createTestDir('dst');
cp('-Rf', path.resolve(testRoot, 'fixtures/publish_dir_root'), publishDir);
cp('-Rf', gitTempDir, destDir);
cp('-Rf', gitTempDir, publishDir);
await copyAssets(publishDir, destDir, '.github');
expect(fs.existsSync(path.resolve(destDir, '.github'))).toBeFalsy();
expect(fs.existsSync(path.resolve(destDir, 'index.html'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'assets/lib.css'))).toBeTruthy();
rm('-rf', publishDir, destDir);
});
test('copy assets from root to root, delete nothing', async () => {
const publishDir = await createTestDir('src');
const destDir = await createTestDir('dst');
cp('-Rf', path.resolve(testRoot, 'fixtures/publish_dir_root'), publishDir);
cp('-Rf', gitTempDir, destDir);
cp('-Rf', gitTempDir, publishDir);
await copyAssets(publishDir, destDir, '');
expect(fs.existsSync(path.resolve(destDir, '.github'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'index.html'))).toBeTruthy();
expect(fs.existsSync(path.resolve(destDir, 'assets/lib.css'))).toBeTruthy();
rm('-rf', publishDir, destDir);
});
test.todo('copy assets from root to subdir, delete .github');
test.todo('copy assets from root to subdir, delete .github,main.js');
test.todo('copy assets from root to subdir, delete nothing');
});
describe('setRepo()', () => { describe('setRepo()', () => {
test('throw error destination_dir should be a relative path', async () => { test('throw error destination_dir should be a relative path', async () => {
process.env['INPUT_GITHUB_TOKEN'] = 'test_github_token'; process.env['INPUT_GITHUB_TOKEN'] = 'test_github_token';

View File

@ -1,12 +1,11 @@
import * as core from '@actions/core'; import * as core from '@actions/core';
import * as exec from '@actions/exec'; import * as exec from '@actions/exec';
import * as io from '@actions/io';
import * as glob from '@actions/glob'; import * as glob from '@actions/glob';
import path from 'path'; import path from 'path';
import fs from 'fs'; import fs from 'fs';
import {Inputs, CmdResult} from './interfaces'; import {Inputs, CmdResult} from './interfaces';
import {createDir} from './utils'; import {createDir} from './utils';
import {cp} from 'shelljs'; import {cp, rm} from 'shelljs';
export async function createBranchForce(branch: string): Promise<void> { export async function createBranchForce(branch: string): Promise<void> {
await exec.exec('git', ['init']); await exec.exec('git', ['init']);
@ -15,6 +14,7 @@ export async function createBranchForce(branch: string): Promise<void> {
} }
export async function deleteExcludedAssets(destDir: string, excludeAssets: string): Promise<void> { export async function deleteExcludedAssets(destDir: string, excludeAssets: string): Promise<void> {
if (excludeAssets === '') return;
core.info(`[INFO] delete excluded assets`); core.info(`[INFO] delete excluded assets`);
const excludedAssetNames: Array<string> = excludeAssets.split(','); const excludedAssetNames: Array<string> = excludeAssets.split(',');
const excludedAssetPaths = ((): Array<string> => { const excludedAssetPaths = ((): Array<string> => {
@ -25,10 +25,11 @@ export async function deleteExcludedAssets(destDir: string, excludeAssets: strin
return paths; return paths;
})(); })();
const globber = await glob.create(excludedAssetPaths.join('\n')); const globber = await glob.create(excludedAssetPaths.join('\n'));
for await (const asset of globber.globGenerator()) { const files = await globber.glob();
core.info(`[INFO] delete ${asset}`); for await (const file of globber.globGenerator()) {
io.rmRF(asset); core.info(`[INFO] delete ${file}`);
} }
rm('-rf', files);
return; return;
} }
@ -39,15 +40,15 @@ export async function copyAssets(
): Promise<void> { ): Promise<void> {
core.info(`[INFO] prepare publishing assets`); core.info(`[INFO] prepare publishing assets`);
if (fs.existsSync(destDir) === false) { if (!fs.existsSync(destDir)) {
core.info(`[INFO] create ${destDir}`); core.info(`[INFO] create ${destDir}`);
await createDir(destDir); await createDir(destDir);
} }
const dotGitPath = path.join(publishDir, '.git'); const dotGitPath = path.join(publishDir, '.git');
if (fs.existsSync(dotGitPath)) { if (fs.existsSync(dotGitPath)) {
core.info(`[INFO] delete .git`); core.info(`[INFO] delete ${dotGitPath}`);
io.rmRF(dotGitPath); rm('-rf', dotGitPath);
} }
core.info(`[INFO] copy ${publishDir} to ${destDir}`); core.info(`[INFO] copy ${publishDir} to ${destDir}`);