mirror of
https://github.com/peaceiris/actions-gh-pages.git
synced 2025-07-14 22:29:17 +08:00
test: Add testing for set-tokens.ts (#126)
* test: remove main * test: add getPublishRepo() * test: Add setPersonalToken() * test: Add setGithubToken() * test: add showInputs() * test: .nojekyll already exists * test: ignore jest/expect-expect * refactor: squash inputs log * fix: throw error message
This commit is contained in:
parent
acd0462710
commit
fd6e5fc7ce
@ -1,6 +1,7 @@
|
|||||||
// import * as main from '../src/main';
|
// import * as main from '../src/main';
|
||||||
import {Inputs} from '../src/interfaces';
|
import {Inputs} from '../src/interfaces';
|
||||||
import {getInputs} from '../src/get-inputs';
|
import {showInputs, getInputs} from '../src/get-inputs';
|
||||||
|
import os from 'os';
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
jest.resetModules();
|
||||||
@ -25,6 +26,96 @@ afterEach(() => {
|
|||||||
delete process.env['INPUT_CNAME'];
|
delete process.env['INPUT_CNAME'];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Assert that process.stdout.write calls called only with the given arguments.
|
||||||
|
// cf. https://github.com/actions/toolkit/blob/8b0300129f08728419263b016de8630f1d426d5f/packages/core/__tests__/core.test.ts
|
||||||
|
function assertWriteCalls(calls: string[]): void {
|
||||||
|
expect(process.stdout.write).toHaveBeenCalledTimes(calls.length);
|
||||||
|
|
||||||
|
for (let i = 0; i < calls.length; i++) {
|
||||||
|
expect(process.stdout.write).toHaveBeenNthCalledWith(i + 1, calls[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTestInputs(): void {
|
||||||
|
process.env['INPUT_PUBLISH_BRANCH'] = 'master';
|
||||||
|
process.env['INPUT_PUBLISH_DIR'] = 'out';
|
||||||
|
process.env['INPUT_EXTERNAL_REPOSITORY'] = 'user/repo';
|
||||||
|
process.env['INPUT_ALLOW_EMPTY_COMMIT'] = 'true';
|
||||||
|
process.env['INPUT_KEEP_FILES'] = 'true';
|
||||||
|
process.env['INPUT_FORCE_ORPHAN'] = 'true';
|
||||||
|
process.env['INPUT_USER_NAME'] = 'username';
|
||||||
|
process.env['INPUT_USER_EMAIL'] = 'github@github.com';
|
||||||
|
process.env['INPUT_COMMIT_MESSAGE'] = 'feat: Add new feature';
|
||||||
|
process.env['INPUT_TAG_NAME'] = 'deploy-v1.2.3';
|
||||||
|
process.env['INPUT_TAG_MESSAGE'] = 'Deployment v1.2.3';
|
||||||
|
process.env['INPUT_DISABLE_NOJEKYLL'] = 'true';
|
||||||
|
process.env['INPUT_CNAME'] = 'github.com';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInputsLog(authMethod: string, inps: Inputs): string {
|
||||||
|
return `\
|
||||||
|
[INFO] ${authMethod}: true
|
||||||
|
[INFO] PublishBranch: ${inps.PublishBranch}
|
||||||
|
[INFO] PublishDir: ${inps.PublishDir}
|
||||||
|
[INFO] ExternalRepository: ${inps.ExternalRepository}
|
||||||
|
[INFO] AllowEmptyCommit: ${inps.AllowEmptyCommit}
|
||||||
|
[INFO] KeepFiles: ${inps.KeepFiles}
|
||||||
|
[INFO] ForceOrphan: ${inps.ForceOrphan}
|
||||||
|
[INFO] UserName: ${inps.UserName}
|
||||||
|
[INFO] UserEmail: ${inps.UserEmail}
|
||||||
|
[INFO] CommitMessage: ${inps.CommitMessage}
|
||||||
|
[INFO] TagName: ${inps.TagName}
|
||||||
|
[INFO] TagMessage: ${inps.TagMessage}
|
||||||
|
[INFO] DisableNoJekyll: ${inps.DisableNoJekyll}
|
||||||
|
[INFO] CNAME: ${inps.CNAME}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('showInputs()', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
process.stdout.write = jest.fn();
|
||||||
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line jest/expect-expect
|
||||||
|
test('print all inputs DeployKey', () => {
|
||||||
|
process.env['INPUT_DEPLOY_KEY'] = 'test_deploy_key';
|
||||||
|
setTestInputs();
|
||||||
|
|
||||||
|
const inps: Inputs = getInputs();
|
||||||
|
showInputs(inps);
|
||||||
|
|
||||||
|
const authMethod = 'DeployKey';
|
||||||
|
const test = getInputsLog(authMethod, inps);
|
||||||
|
assertWriteCalls([`${test}${os.EOL}`]);
|
||||||
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line jest/expect-expect
|
||||||
|
test('print all inputs GithubToken', () => {
|
||||||
|
process.env['INPUT_GITHUB_TOKEN'] = 'test_github_token';
|
||||||
|
setTestInputs();
|
||||||
|
|
||||||
|
const inps: Inputs = getInputs();
|
||||||
|
showInputs(inps);
|
||||||
|
|
||||||
|
const authMethod = 'GithubToken';
|
||||||
|
const test = getInputsLog(authMethod, inps);
|
||||||
|
assertWriteCalls([`${test}${os.EOL}`]);
|
||||||
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line jest/expect-expect
|
||||||
|
test('print all inputs PersonalToken', () => {
|
||||||
|
process.env['INPUT_PERSONAL_TOKEN'] = 'test_personal_token';
|
||||||
|
setTestInputs();
|
||||||
|
|
||||||
|
const inps: Inputs = getInputs();
|
||||||
|
showInputs(inps);
|
||||||
|
|
||||||
|
const authMethod = 'PersonalToken';
|
||||||
|
const test = getInputsLog(authMethod, inps);
|
||||||
|
assertWriteCalls([`${test}${os.EOL}`]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('getInputs()', () => {
|
describe('getInputs()', () => {
|
||||||
test('get default inputs', () => {
|
test('get default inputs', () => {
|
||||||
process.env['INPUT_DEPLOY_KEY'] = 'test_deploy_key';
|
process.env['INPUT_DEPLOY_KEY'] = 'test_deploy_key';
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
// import {run} from '../src/main';
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
jest.resetModules();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
delete process.env['INPUT_DEPLOY_KEY'];
|
|
||||||
delete process.env['INPUT_GITHUB_TOKEN'];
|
|
||||||
delete process.env['INPUT_PERSONAL_TOKEN'];
|
|
||||||
delete process.env['INPUT_PUBLISH_BRANCH'];
|
|
||||||
delete process.env['INPUT_PUBLISH_DIR'];
|
|
||||||
delete process.env['INPUT_EXTERNAL_REPOSITORY'];
|
|
||||||
delete process.env['INPUT_ALLOW_EMPTY_COMMIT'];
|
|
||||||
delete process.env['INPUT_KEEP_FILES'];
|
|
||||||
delete process.env['INPUT_FORCE_ORPHAN'];
|
|
||||||
delete process.env['INPUT_USER_NAME'];
|
|
||||||
delete process.env['INPUT_USER_EMAIL'];
|
|
||||||
delete process.env['INPUT_COMMIT_MESSAGE'];
|
|
||||||
delete process.env['INPUT_TAG_NAME'];
|
|
||||||
delete process.env['INPUT_TAG_MESSAGE'];
|
|
||||||
delete process.env['INPUT_TAG_OVERWRITE'];
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Integration testing run()', () => {
|
|
||||||
test('succeed in pushing using deploy key', async () => {
|
|
||||||
// process.env['INPUT_DEPLOY_KEY'] = 'test_deploy_key';
|
|
||||||
// process.env['GITHUB_REPOSITORY'] = 'owner/repo';
|
|
||||||
// const exitcode = await run();
|
|
||||||
expect(0).toBe(0);
|
|
||||||
});
|
|
||||||
});
|
|
105
__tests__/set-tokens.test.ts
Normal file
105
__tests__/set-tokens.test.ts
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
import {
|
||||||
|
getPublishRepo,
|
||||||
|
setPersonalToken,
|
||||||
|
setGithubToken
|
||||||
|
} from '../src/set-tokens';
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetModules();
|
||||||
|
});
|
||||||
|
|
||||||
|
// afterEach(() => {
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
describe('getPublishRepo()', () => {
|
||||||
|
test('return repository name', () => {
|
||||||
|
const test = getPublishRepo('', 'owner', 'repo');
|
||||||
|
expect(test).toMatch('owner/repo');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('return external repository name', () => {
|
||||||
|
const test = getPublishRepo('extOwner/extRepo', 'owner', 'repo');
|
||||||
|
expect(test).toMatch('extOwner/extRepo');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('setGithubToken()', () => {
|
||||||
|
test('return remote url with GITHUB_TOKEN gh-pages', () => {
|
||||||
|
const expected =
|
||||||
|
'https://x-access-token:GITHUB_TOKEN@github.com/owner/repo.git';
|
||||||
|
const test = setGithubToken(
|
||||||
|
'GITHUB_TOKEN',
|
||||||
|
'owner/repo',
|
||||||
|
'gh-pages',
|
||||||
|
'',
|
||||||
|
'refs/heads/master',
|
||||||
|
'push'
|
||||||
|
);
|
||||||
|
expect(test).toMatch(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('return remote url with GITHUB_TOKEN master', () => {
|
||||||
|
const expected =
|
||||||
|
'https://x-access-token:GITHUB_TOKEN@github.com/owner/repo.git';
|
||||||
|
const test = setGithubToken(
|
||||||
|
'GITHUB_TOKEN',
|
||||||
|
'owner/repo',
|
||||||
|
'master',
|
||||||
|
'',
|
||||||
|
'refs/heads/source',
|
||||||
|
'push'
|
||||||
|
);
|
||||||
|
expect(test).toMatch(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('throw error master to master', () => {
|
||||||
|
expect(() => {
|
||||||
|
setGithubToken(
|
||||||
|
'GITHUB_TOKEN',
|
||||||
|
'owner/repo',
|
||||||
|
'master',
|
||||||
|
'',
|
||||||
|
'refs/heads/master',
|
||||||
|
'push'
|
||||||
|
);
|
||||||
|
}).toThrowError('You deploy from master to master');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('throw error external repository with GITHUB_TOKEN', () => {
|
||||||
|
expect(() => {
|
||||||
|
setGithubToken(
|
||||||
|
'GITHUB_TOKEN',
|
||||||
|
'owner/repo',
|
||||||
|
'gh-pages',
|
||||||
|
'extOwner/extRepo',
|
||||||
|
'refs/heads/master',
|
||||||
|
'push'
|
||||||
|
);
|
||||||
|
}).toThrowError(
|
||||||
|
'GITHUB_TOKEN does not support to push to an external repository'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('return remote url with GITHUB_TOKEN pull_request', () => {
|
||||||
|
const expected =
|
||||||
|
'https://x-access-token:GITHUB_TOKEN@github.com/owner/repo.git';
|
||||||
|
const test = setGithubToken(
|
||||||
|
'GITHUB_TOKEN',
|
||||||
|
'owner/repo',
|
||||||
|
'gh-pages',
|
||||||
|
'',
|
||||||
|
'refs/pull/29/merge',
|
||||||
|
'pull_request'
|
||||||
|
);
|
||||||
|
expect(test).toMatch(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('setPersonalToken()', () => {
|
||||||
|
test('return remote url with personal access token', () => {
|
||||||
|
const expected = 'https://x-access-token:pat@github.com/owner/repo.git';
|
||||||
|
const test = setPersonalToken('pat', 'owner/repo');
|
||||||
|
expect(test).toMatch(expected);
|
||||||
|
});
|
||||||
|
});
|
@ -77,8 +77,8 @@ describe('addNoJekyll()', () => {
|
|||||||
const filepath = path.join(workDir, '.nojekyll');
|
const filepath = path.join(workDir, '.nojekyll');
|
||||||
|
|
||||||
await addNoJekyll(workDir, false, 'gh-pages');
|
await addNoJekyll(workDir, false, 'gh-pages');
|
||||||
const test1 = fs.existsSync(filepath);
|
const test = fs.existsSync(filepath);
|
||||||
expect(test1).toBe(true);
|
expect(test).toBe(true);
|
||||||
|
|
||||||
fs.unlinkSync(filepath);
|
fs.unlinkSync(filepath);
|
||||||
});
|
});
|
||||||
@ -91,8 +91,23 @@ describe('addNoJekyll()', () => {
|
|||||||
const filepath = path.join(workDir, '.nojekyll');
|
const filepath = path.join(workDir, '.nojekyll');
|
||||||
|
|
||||||
await addNoJekyll(workDir, false, 'master');
|
await addNoJekyll(workDir, false, 'master');
|
||||||
const test2 = fs.existsSync(filepath);
|
const test = fs.existsSync(filepath);
|
||||||
expect(test2).toBe(true);
|
expect(test).toBe(true);
|
||||||
|
|
||||||
|
fs.unlinkSync(filepath);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('.nojekyll already exists', async () => {
|
||||||
|
let workDir = '';
|
||||||
|
(async (): Promise<void> => {
|
||||||
|
workDir = await getWorkDir();
|
||||||
|
})();
|
||||||
|
const filepath = path.join(workDir, '.nojekyll');
|
||||||
|
fs.closeSync(fs.openSync(filepath, 'w'));
|
||||||
|
|
||||||
|
await addNoJekyll(workDir, false, 'master');
|
||||||
|
const test = fs.existsSync(filepath);
|
||||||
|
expect(test).toBe(true);
|
||||||
|
|
||||||
fs.unlinkSync(filepath);
|
fs.unlinkSync(filepath);
|
||||||
});
|
});
|
||||||
@ -105,8 +120,8 @@ describe('addNoJekyll()', () => {
|
|||||||
const filepath = path.join(workDir, '.nojekyll');
|
const filepath = path.join(workDir, '.nojekyll');
|
||||||
|
|
||||||
await addNoJekyll(workDir, true, 'gh-pages');
|
await addNoJekyll(workDir, true, 'gh-pages');
|
||||||
const test3 = fs.existsSync(filepath);
|
const test = fs.existsSync(filepath);
|
||||||
expect(test3).toBe(false);
|
expect(test).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('not add .nojekyll disable_nojekyll master', async () => {
|
test('not add .nojekyll disable_nojekyll master', async () => {
|
||||||
@ -117,8 +132,8 @@ describe('addNoJekyll()', () => {
|
|||||||
const filepath = path.join(workDir, '.nojekyll');
|
const filepath = path.join(workDir, '.nojekyll');
|
||||||
|
|
||||||
await addNoJekyll(workDir, true, 'master');
|
await addNoJekyll(workDir, true, 'master');
|
||||||
const test4 = fs.existsSync(filepath);
|
const test = fs.existsSync(filepath);
|
||||||
expect(test4).toBe(false);
|
expect(test).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('not add .nojekyll other-branch', async () => {
|
test('not add .nojekyll other-branch', async () => {
|
||||||
@ -129,8 +144,8 @@ describe('addNoJekyll()', () => {
|
|||||||
const filepath = path.join(workDir, '.nojekyll');
|
const filepath = path.join(workDir, '.nojekyll');
|
||||||
|
|
||||||
await addNoJekyll(workDir, false, 'other-branch');
|
await addNoJekyll(workDir, false, 'other-branch');
|
||||||
const test5 = fs.existsSync(filepath);
|
const test = fs.existsSync(filepath);
|
||||||
expect(test5).toBe(false);
|
expect(test).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('not add .nojekyll disable_nojekyll other-branch', async () => {
|
test('not add .nojekyll disable_nojekyll other-branch', async () => {
|
||||||
@ -141,8 +156,8 @@ describe('addNoJekyll()', () => {
|
|||||||
const filepath = path.join(workDir, '.nojekyll');
|
const filepath = path.join(workDir, '.nojekyll');
|
||||||
|
|
||||||
await addNoJekyll(workDir, true, 'other-branch');
|
await addNoJekyll(workDir, true, 'other-branch');
|
||||||
const test6 = fs.existsSync(filepath);
|
const test = fs.existsSync(filepath);
|
||||||
expect(test6).toBe(false);
|
expect(test).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -155,8 +170,8 @@ describe('addCNAME()', () => {
|
|||||||
const filepath = path.join(workDir, 'CNAME');
|
const filepath = path.join(workDir, 'CNAME');
|
||||||
|
|
||||||
await addCNAME(workDir, 'github.com');
|
await addCNAME(workDir, 'github.com');
|
||||||
const test1 = fs.readFileSync(filepath, 'utf8');
|
const test = fs.readFileSync(filepath, 'utf8');
|
||||||
expect(test1).toMatch('github.com');
|
expect(test).toMatch('github.com');
|
||||||
|
|
||||||
fs.unlinkSync(filepath);
|
fs.unlinkSync(filepath);
|
||||||
});
|
});
|
||||||
@ -169,8 +184,8 @@ describe('addCNAME()', () => {
|
|||||||
const filepath = path.join(workDir, 'CNAME');
|
const filepath = path.join(workDir, 'CNAME');
|
||||||
|
|
||||||
await addCNAME(workDir, '');
|
await addCNAME(workDir, '');
|
||||||
const test2 = fs.existsSync(filepath);
|
const test = fs.existsSync(filepath);
|
||||||
expect(test2).toBe(false);
|
expect(test).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('CNAME already exists', async () => {
|
test('CNAME already exists', async () => {
|
||||||
@ -182,8 +197,8 @@ describe('addCNAME()', () => {
|
|||||||
|
|
||||||
await addCNAME(workDir, 'github.io');
|
await addCNAME(workDir, 'github.io');
|
||||||
await addCNAME(workDir, 'github.com');
|
await addCNAME(workDir, 'github.com');
|
||||||
const test3 = fs.readFileSync(filepath, 'utf8');
|
const test = fs.readFileSync(filepath, 'utf8');
|
||||||
expect(test3).toMatch('github.io');
|
expect(test).toMatch('github.io');
|
||||||
|
|
||||||
fs.unlinkSync(filepath);
|
fs.unlinkSync(filepath);
|
||||||
});
|
});
|
||||||
|
@ -1,28 +1,32 @@
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import {Inputs} from './interfaces';
|
import {Inputs} from './interfaces';
|
||||||
|
|
||||||
function showInputs(inps: Inputs): void {
|
export function showInputs(inps: Inputs): void {
|
||||||
|
let authMethod = '';
|
||||||
if (inps.DeployKey) {
|
if (inps.DeployKey) {
|
||||||
core.info(`[INFO] DeployKey: true`);
|
authMethod = 'DeployKey';
|
||||||
} else if (inps.GithubToken) {
|
} else if (inps.GithubToken) {
|
||||||
core.info(`[INFO] GithubToken: true`);
|
authMethod = 'GithubToken';
|
||||||
} else if (inps.PersonalToken) {
|
} else if (inps.PersonalToken) {
|
||||||
core.info(`[INFO] PersonalToken: true`);
|
authMethod = 'PersonalToken';
|
||||||
}
|
}
|
||||||
|
|
||||||
core.info(`[INFO] PublishBranch: ${inps.PublishBranch}`);
|
core.info(`\
|
||||||
core.info(`[INFO] PublishDir: ${inps.PublishDir}`);
|
[INFO] ${authMethod}: true
|
||||||
core.info(`[INFO] ExternalRepository: ${inps.ExternalRepository}`);
|
[INFO] PublishBranch: ${inps.PublishBranch}
|
||||||
core.info(`[INFO] AllowEmptyCommit: ${inps.AllowEmptyCommit}`);
|
[INFO] PublishDir: ${inps.PublishDir}
|
||||||
core.info(`[INFO] KeepFiles: ${inps.KeepFiles}`);
|
[INFO] ExternalRepository: ${inps.ExternalRepository}
|
||||||
core.info(`[INFO] ForceOrphan: ${inps.ForceOrphan}`);
|
[INFO] AllowEmptyCommit: ${inps.AllowEmptyCommit}
|
||||||
core.info(`[INFO] UserName: ${inps.UserName}`);
|
[INFO] KeepFiles: ${inps.KeepFiles}
|
||||||
core.info(`[INFO] UserEmail: ${inps.UserEmail}`);
|
[INFO] ForceOrphan: ${inps.ForceOrphan}
|
||||||
core.info(`[INFO] CommitMessage: ${inps.CommitMessage}`);
|
[INFO] UserName: ${inps.UserName}
|
||||||
core.info(`[INFO] TagName: ${inps.TagName}`);
|
[INFO] UserEmail: ${inps.UserEmail}
|
||||||
core.info(`[INFO] TagMessage: ${inps.TagMessage}`);
|
[INFO] CommitMessage: ${inps.CommitMessage}
|
||||||
core.info(`[INFO] DisableNoJekyll: ${inps.DisableNoJekyll}`);
|
[INFO] TagName: ${inps.TagName}
|
||||||
core.info(`[INFO] CNAME: ${inps.CNAME}`);
|
[INFO] TagMessage: ${inps.TagMessage}
|
||||||
|
[INFO] DisableNoJekyll: ${inps.DisableNoJekyll}
|
||||||
|
[INFO] CNAME: ${inps.CNAME}
|
||||||
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getInputs(): Inputs {
|
export function getInputs(): Inputs {
|
||||||
@ -49,7 +53,5 @@ export function getInputs(): Inputs {
|
|||||||
CNAME: core.getInput('cname')
|
CNAME: core.getInput('cname')
|
||||||
};
|
};
|
||||||
|
|
||||||
showInputs(inps);
|
|
||||||
|
|
||||||
return inps;
|
return inps;
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ export async function setRepo(
|
|||||||
core.info(
|
core.info(
|
||||||
`[INFO] first deployment, create new branch ${inps.PublishBranch}`
|
`[INFO] first deployment, create new branch ${inps.PublishBranch}`
|
||||||
);
|
);
|
||||||
core.info(e);
|
core.info(e.message);
|
||||||
await createWorkDir(workDir);
|
await createWorkDir(workDir);
|
||||||
process.chdir(workDir);
|
process.chdir(workDir);
|
||||||
await createBranchForce(inps.PublishBranch);
|
await createBranchForce(inps.PublishBranch);
|
||||||
@ -156,7 +156,7 @@ export async function commit(
|
|||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
core.info('[INFO] skip commit');
|
core.info('[INFO] skip commit');
|
||||||
core.debug(`[INFO] skip commit ${e}`);
|
core.debug(`[INFO] skip commit ${e.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,6 @@ import * as main from './main';
|
|||||||
try {
|
try {
|
||||||
await main.run();
|
await main.run();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
core.setFailed(`Action failed with "${e}"`);
|
core.setFailed(`Action failed with "${e.message}"`);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
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 {Inputs} from './interfaces';
|
import {Inputs} from './interfaces';
|
||||||
import {getInputs} from './get-inputs';
|
import {showInputs, getInputs} from './get-inputs';
|
||||||
import {setTokens} from './set-tokens';
|
import {setTokens} from './set-tokens';
|
||||||
import * as git from './git-utils';
|
import * as git from './git-utils';
|
||||||
import {getWorkDirName, addNoJekyll, addCNAME} from './utils';
|
import {getWorkDirName, addNoJekyll, addCNAME} from './utils';
|
||||||
@ -9,6 +9,7 @@ import {getWorkDirName, addNoJekyll, addCNAME} from './utils';
|
|||||||
export async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const inps: Inputs = getInputs();
|
const inps: Inputs = getInputs();
|
||||||
|
showInputs(inps);
|
||||||
|
|
||||||
await git.setConfig(inps.UserName, inps.UserEmail);
|
await git.setConfig(inps.UserName, inps.UserEmail);
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ export async function run(): Promise<void> {
|
|||||||
try {
|
try {
|
||||||
await exec.exec('git', ['remote', 'rm', 'origin']);
|
await exec.exec('git', ['remote', 'rm', 'origin']);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
core.info(`[INFO] ${e}`);
|
core.info(`[INFO] ${e.message}`);
|
||||||
}
|
}
|
||||||
await exec.exec('git', ['remote', 'add', 'origin', remoteURL]);
|
await exec.exec('git', ['remote', 'add', 'origin', remoteURL]);
|
||||||
await exec.exec('git', ['add', '--all']);
|
await exec.exec('git', ['add', '--all']);
|
||||||
@ -43,6 +44,6 @@ export async function run(): Promise<void> {
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(e);
|
throw new Error(e.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,13 +9,6 @@ const cpexec = require('child_process').execFileSync;
|
|||||||
import {Inputs} from './interfaces';
|
import {Inputs} from './interfaces';
|
||||||
import {getHomeDir} from './utils';
|
import {getHomeDir} from './utils';
|
||||||
|
|
||||||
export function setPublishRepo(insp: Inputs): string {
|
|
||||||
if (insp.ExternalRepository) {
|
|
||||||
return insp.ExternalRepository;
|
|
||||||
}
|
|
||||||
return `${github.context.repo.owner}/${github.context.repo.repo}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function setSSHKey(
|
export async function setSSHKey(
|
||||||
inps: Inputs,
|
inps: Inputs,
|
||||||
publishRepo: string
|
publishRepo: string
|
||||||
@ -66,57 +59,82 @@ Host github
|
|||||||
return `git@github.com:${publishRepo}.git`;
|
return `git@github.com:${publishRepo}.git`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function setGithubToken(
|
export function setGithubToken(
|
||||||
inps: Inputs,
|
githubToken: string,
|
||||||
publishRepo: string
|
publishRepo: string,
|
||||||
): Promise<string> {
|
publishBranch: string,
|
||||||
|
externalRepository: string,
|
||||||
|
ref: string,
|
||||||
|
eventName: string
|
||||||
|
): string {
|
||||||
core.info('[INFO] setup GITHUB_TOKEN');
|
core.info('[INFO] setup GITHUB_TOKEN');
|
||||||
|
|
||||||
const context = github.context;
|
core.debug(`ref: ${ref}`);
|
||||||
core.debug(`ref: ${context.ref}`);
|
core.debug(`eventName: ${eventName}`);
|
||||||
core.debug(`eventName: ${context.eventName}`);
|
|
||||||
let isProhibitedBranch = false;
|
let isProhibitedBranch = false;
|
||||||
|
|
||||||
const ref = context.ref;
|
if (eventName === 'push') {
|
||||||
if (context.eventName === 'push') {
|
isProhibitedBranch = ref.includes(`refs/heads/${publishBranch}`);
|
||||||
isProhibitedBranch = ref.includes(`refs/heads/${inps.PublishBranch}`);
|
|
||||||
if (isProhibitedBranch) {
|
if (isProhibitedBranch) {
|
||||||
throw new Error(
|
throw new Error(`You deploy from ${publishBranch} to ${publishBranch}`);
|
||||||
`You deploy from ${inps.PublishBranch} to ${inps.PublishBranch}`
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inps.ExternalRepository) {
|
if (externalRepository) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'GITHUB_TOKEN does not support to push to an external repository'
|
'GITHUB_TOKEN does not support to push to an external repository'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return `https://x-access-token:${inps.GithubToken}@github.com/${publishRepo}.git`;
|
return `https://x-access-token:${githubToken}@github.com/${publishRepo}.git`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function setPersonalToken(
|
export function setPersonalToken(
|
||||||
inps: Inputs,
|
personalToken: string,
|
||||||
publishRepo: string
|
publishRepo: string
|
||||||
): Promise<string> {
|
): string {
|
||||||
core.info('[INFO] setup personal access token');
|
core.info('[INFO] setup personal access token');
|
||||||
return `https://x-access-token:${inps.PersonalToken}@github.com/${publishRepo}.git`;
|
return `https://x-access-token:${personalToken}@github.com/${publishRepo}.git`;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPublishRepo(
|
||||||
|
externalRepository: string,
|
||||||
|
owner: string,
|
||||||
|
repo: string
|
||||||
|
): string {
|
||||||
|
if (externalRepository) {
|
||||||
|
return externalRepository;
|
||||||
|
}
|
||||||
|
return `${owner}/${repo}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function setTokens(inps: Inputs): Promise<string> {
|
export async function setTokens(inps: Inputs): Promise<string> {
|
||||||
try {
|
try {
|
||||||
const publishRepo = setPublishRepo(inps);
|
const publishRepo = getPublishRepo(
|
||||||
|
inps.ExternalRepository,
|
||||||
|
github.context.repo.owner,
|
||||||
|
github.context.repo.repo
|
||||||
|
);
|
||||||
if (inps.DeployKey) {
|
if (inps.DeployKey) {
|
||||||
return setSSHKey(inps, publishRepo);
|
return setSSHKey(inps, publishRepo);
|
||||||
} else if (inps.GithubToken) {
|
} else if (inps.GithubToken) {
|
||||||
return setGithubToken(inps, publishRepo);
|
const context = github.context;
|
||||||
|
const ref = context.ref;
|
||||||
|
const eventName = context.eventName;
|
||||||
|
return setGithubToken(
|
||||||
|
inps.GithubToken,
|
||||||
|
publishRepo,
|
||||||
|
inps.PublishBranch,
|
||||||
|
inps.ExternalRepository,
|
||||||
|
ref,
|
||||||
|
eventName
|
||||||
|
);
|
||||||
} else if (inps.PersonalToken) {
|
} else if (inps.PersonalToken) {
|
||||||
return setPersonalToken(inps, publishRepo);
|
return setPersonalToken(inps.PersonalToken, publishRepo);
|
||||||
} else {
|
} else {
|
||||||
throw new Error('not found deploy key or tokens');
|
throw new Error('not found deploy key or tokens');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(e);
|
throw new Error(e.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user