mirror of
https://github.com/JamesIves/github-pages-deploy-action.git
synced 2023-12-15 20:03:39 +08:00
More Test Coverage / Imps
This commit is contained in:
parent
109bba8860
commit
4e8c644240
@ -183,7 +183,7 @@ describe("git", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("deploy", () => {
|
describe("deploy", () => {
|
||||||
it("should execute five commands", async () => {
|
it("should execute commands", async () => {
|
||||||
Object.assign(action, {
|
Object.assign(action, {
|
||||||
build: "build",
|
build: "build",
|
||||||
branch: "branch",
|
branch: "branch",
|
||||||
@ -197,11 +197,11 @@ describe("git", () => {
|
|||||||
const call = await deploy();
|
const call = await deploy();
|
||||||
|
|
||||||
// Includes the call to generateBranch
|
// Includes the call to generateBranch
|
||||||
expect(execute).toBeCalledTimes(18);
|
expect(execute).toBeCalledTimes(12);
|
||||||
expect(call).toBe("Commit step complete...");
|
expect(call).toBe("Commit step complete...");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should execute five commands with clean options", async () => {
|
it("should execute commands with clean options", async () => {
|
||||||
Object.assign(action, {
|
Object.assign(action, {
|
||||||
build: "build",
|
build: "build",
|
||||||
branch: "branch",
|
branch: "branch",
|
||||||
@ -217,27 +217,26 @@ describe("git", () => {
|
|||||||
const call = await deploy();
|
const call = await deploy();
|
||||||
|
|
||||||
// Includes the call to generateBranch
|
// Includes the call to generateBranch
|
||||||
expect(execute).toBeCalledTimes(18);
|
expect(execute).toBeCalledTimes(12);
|
||||||
expect(call).toBe("Commit step complete...");
|
expect(call).toBe("Commit step complete...");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should gracefully handle incorrectly formatted clean exclude items", async () => {
|
it("should gracefully handle incorrectly formatted clean exclude items", async () => {
|
||||||
Object.assign(action, {
|
Object.assign(action, {
|
||||||
build: "build",
|
build: ".",
|
||||||
branch: "branch",
|
branch: "branch",
|
||||||
gitHubToken: "123",
|
gitHubToken: "123",
|
||||||
pusher: {
|
pusher: {},
|
||||||
name: "asd",
|
|
||||||
email: "as@cat"
|
|
||||||
},
|
|
||||||
clean: true,
|
clean: true,
|
||||||
|
targetFolder: "new_folder",
|
||||||
|
commitMessage: "Hello!",
|
||||||
|
isTest: true,
|
||||||
cleanExclude: '["cat, "montezuma"]' // There is a syntax errror in the string.
|
cleanExclude: '["cat, "montezuma"]' // There is a syntax errror in the string.
|
||||||
});
|
});
|
||||||
|
|
||||||
const call = await deploy();
|
const call = await deploy();
|
||||||
|
|
||||||
// Includes the call to generateBranch
|
expect(execute).toBeCalledTimes(12);
|
||||||
expect(execute).toBeCalledTimes(18);
|
|
||||||
expect(call).toBe("Commit step complete...");
|
expect(call).toBe("Commit step complete...");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
59
__tests__/main.test.ts
Normal file
59
__tests__/main.test.ts
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
// Initial env variable setup for tests.
|
||||||
|
process.env["INPUT_FOLDER"] = "build";
|
||||||
|
process.env["GITHUB_SHA"] = "123";
|
||||||
|
|
||||||
|
import { action } from "../src/constants";
|
||||||
|
import main from "../src/main";
|
||||||
|
import { execute } from "../src/execute";
|
||||||
|
import { setFailed } from "@actions/core";
|
||||||
|
|
||||||
|
const originalAction = JSON.stringify(action);
|
||||||
|
|
||||||
|
jest.mock("../src/execute", () => ({
|
||||||
|
execute: jest.fn()
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock("@actions/core", () => ({
|
||||||
|
setFailed: jest.fn(),
|
||||||
|
getInput: jest.fn()
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe("main", () => {
|
||||||
|
afterEach(() => {
|
||||||
|
Object.assign(action, JSON.parse(originalAction));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should run through the commands", async () => {
|
||||||
|
Object.assign(action, {
|
||||||
|
build: "build",
|
||||||
|
branch: "branch",
|
||||||
|
gitHubToken: "123",
|
||||||
|
pusher: {
|
||||||
|
name: "asd",
|
||||||
|
email: "as@cat"
|
||||||
|
},
|
||||||
|
isTest: true
|
||||||
|
});
|
||||||
|
await main();
|
||||||
|
expect(execute).toBeCalledTimes(30);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should throw if an error is encountered", async () => {
|
||||||
|
Object.assign(action, {
|
||||||
|
build: "build",
|
||||||
|
branch: "branch",
|
||||||
|
baseBranch: "master",
|
||||||
|
gitHubToken: null,
|
||||||
|
ssh: null,
|
||||||
|
accessToken: null,
|
||||||
|
pusher: {
|
||||||
|
name: "asd",
|
||||||
|
email: "as@cat"
|
||||||
|
},
|
||||||
|
isTest: true
|
||||||
|
});
|
||||||
|
await main();
|
||||||
|
expect(execute).toBeCalledTimes(12);
|
||||||
|
expect(setFailed).toBeCalledTimes(1);
|
||||||
|
});
|
||||||
|
});
|
@ -9,5 +9,6 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
verbose: true,
|
verbose: true,
|
||||||
setupFiles: ["<rootDir>/__tests__/env.js"],
|
setupFiles: ["<rootDir>/__tests__/env.js"],
|
||||||
collectCoverage: true
|
collectCoverage: true,
|
||||||
|
collectCoverageFrom: ['src/*.ts','!src/constants.ts']
|
||||||
}
|
}
|
@ -42,7 +42,7 @@ exports.action = {
|
|||||||
};
|
};
|
||||||
// Token Types
|
// Token Types
|
||||||
exports.tokenType = exports.action.ssh
|
exports.tokenType = exports.action.ssh
|
||||||
? "SSH"
|
? "SSH Deploy Key"
|
||||||
: exports.action.accessToken
|
: exports.action.accessToken
|
||||||
? "Access Token"
|
? "Access Token"
|
||||||
: exports.action.gitHubToken
|
: exports.action.gitHubToken
|
||||||
|
@ -23,11 +23,11 @@ function init() {
|
|||||||
util_1.isNullOrUndefined(constants_1.action.gitHubToken) &&
|
util_1.isNullOrUndefined(constants_1.action.gitHubToken) &&
|
||||||
util_1.isNullOrUndefined(constants_1.action.ssh)) {
|
util_1.isNullOrUndefined(constants_1.action.ssh)) {
|
||||||
core_1.setFailed("You must provide the action with either a Personal Access Token or the GitHub Token secret in order to deploy. If you wish to use an ssh deploy token then you must set SSH to true.");
|
core_1.setFailed("You must provide the action with either a Personal Access Token or the GitHub Token secret in order to deploy. If you wish to use an ssh deploy token then you must set SSH to true.");
|
||||||
throw "No deployment token/method was provided.";
|
throw Error("No deployment token/method was provided.");
|
||||||
}
|
}
|
||||||
if (constants_1.action.build.startsWith("/") || constants_1.action.build.startsWith("./")) {
|
if (constants_1.action.build.startsWith("/") || constants_1.action.build.startsWith("./")) {
|
||||||
core_1.setFailed(`The deployment folder cannot be prefixed with '/' or './'. Instead reference the folder name directly.`);
|
core_1.setFailed(`The deployment folder cannot be prefixed with '/' or './'. Instead reference the folder name directly.`);
|
||||||
throw "Incorrectly formatted build folder.";
|
throw Error("Incorrectly formatted build folder.");
|
||||||
}
|
}
|
||||||
console.log(`Deploying using ${constants_1.tokenType}... 🔑`);
|
console.log(`Deploying using ${constants_1.tokenType}... 🔑`);
|
||||||
yield execute_1.execute(`git init`, constants_1.workspace);
|
yield execute_1.execute(`git init`, constants_1.workspace);
|
||||||
@ -63,7 +63,7 @@ function generateBranch() {
|
|||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
if (util_1.isNullOrUndefined(constants_1.action.branch)) {
|
if (util_1.isNullOrUndefined(constants_1.action.branch)) {
|
||||||
throw "Branch is required.";
|
throw Error("Branch is required.");
|
||||||
}
|
}
|
||||||
console.log(`Creating ${constants_1.action.branch} branch... 🔧`);
|
console.log(`Creating ${constants_1.action.branch} branch... 🔧`);
|
||||||
yield switchToBaseBranch();
|
yield switchToBaseBranch();
|
||||||
@ -94,7 +94,7 @@ function deploy() {
|
|||||||
If the branch doesn't exist it gets created here as an orphan.
|
If the branch doesn't exist it gets created here as an orphan.
|
||||||
*/
|
*/
|
||||||
const branchExists = yield execute_1.execute(`git ls-remote --heads ${constants_1.repositoryPath} ${constants_1.action.branch} | wc -l`, constants_1.workspace);
|
const branchExists = yield execute_1.execute(`git ls-remote --heads ${constants_1.repositoryPath} ${constants_1.action.branch} | wc -l`, constants_1.workspace);
|
||||||
if (!branchExists) {
|
if (!branchExists && !constants_1.action.isTest) {
|
||||||
console.log("Deployment branch does not exist. Creating....");
|
console.log("Deployment branch does not exist. Creating....");
|
||||||
yield generateBranch();
|
yield generateBranch();
|
||||||
}
|
}
|
||||||
|
20
lib/main.js
20
lib/main.js
@ -8,29 +8,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
||||||
result["default"] = mod;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const core = __importStar(require("@actions/core"));
|
const core_1 = require("@actions/core");
|
||||||
const git_1 = require("./git");
|
const git_1 = require("./git");
|
||||||
/** Initializes and runs the action. */
|
/** Initializes and runs the action. */
|
||||||
(function () {
|
function main() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
yield git_1.init();
|
yield git_1.init();
|
||||||
yield git_1.deploy();
|
yield git_1.deploy();
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
|
/* istanbul ignore next */
|
||||||
console.log("The deployment encountered an error. ❌");
|
console.log("The deployment encountered an error. ❌");
|
||||||
core.setFailed(error.message);
|
/* istanbul ignore next */
|
||||||
|
core_1.setFailed(error);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
console.log("Completed Deployment ✅");
|
console.log("Completed Deployment ✅");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})();
|
}
|
||||||
|
exports.default = main;
|
||||||
|
// Init
|
||||||
|
main();
|
||||||
|
@ -40,7 +40,7 @@ export const action = {
|
|||||||
|
|
||||||
// Token Types
|
// Token Types
|
||||||
export const tokenType = action.ssh
|
export const tokenType = action.ssh
|
||||||
? "SSH"
|
? "SSH Deploy Key"
|
||||||
: action.accessToken
|
: action.accessToken
|
||||||
? "Access Token"
|
? "Access Token"
|
||||||
: action.gitHubToken
|
: action.gitHubToken
|
||||||
|
@ -23,7 +23,7 @@ export async function init(): Promise<any> {
|
|||||||
"You must provide the action with either a Personal Access Token or the GitHub Token secret in order to deploy. If you wish to use an ssh deploy token then you must set SSH to true."
|
"You must provide the action with either a Personal Access Token or the GitHub Token secret in order to deploy. If you wish to use an ssh deploy token then you must set SSH to true."
|
||||||
);
|
);
|
||||||
|
|
||||||
throw "No deployment token/method was provided.";
|
throw Error("No deployment token/method was provided.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action.build.startsWith("/") || action.build.startsWith("./")) {
|
if (action.build.startsWith("/") || action.build.startsWith("./")) {
|
||||||
@ -31,7 +31,7 @@ export async function init(): Promise<any> {
|
|||||||
`The deployment folder cannot be prefixed with '/' or './'. Instead reference the folder name directly.`
|
`The deployment folder cannot be prefixed with '/' or './'. Instead reference the folder name directly.`
|
||||||
);
|
);
|
||||||
|
|
||||||
throw "Incorrectly formatted build folder.";
|
throw Error("Incorrectly formatted build folder.");
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`Deploying using ${tokenType}... 🔑`);
|
console.log(`Deploying using ${tokenType}... 🔑`);
|
||||||
@ -68,7 +68,7 @@ export async function switchToBaseBranch(): Promise<any> {
|
|||||||
export async function generateBranch(): Promise<any> {
|
export async function generateBranch(): Promise<any> {
|
||||||
try {
|
try {
|
||||||
if (isNullOrUndefined(action.branch)) {
|
if (isNullOrUndefined(action.branch)) {
|
||||||
throw "Branch is required.";
|
throw Error("Branch is required.");
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`Creating ${action.branch} branch... 🔧`);
|
console.log(`Creating ${action.branch} branch... 🔧`);
|
||||||
@ -102,7 +102,7 @@ export async function deploy(): Promise<any> {
|
|||||||
`git ls-remote --heads ${repositoryPath} ${action.branch} | wc -l`,
|
`git ls-remote --heads ${repositoryPath} ${action.branch} | wc -l`,
|
||||||
workspace
|
workspace
|
||||||
);
|
);
|
||||||
if (!branchExists) {
|
if (!branchExists && !action.isTest) {
|
||||||
console.log("Deployment branch does not exist. Creating....");
|
console.log("Deployment branch does not exist. Creating....");
|
||||||
await generateBranch();
|
await generateBranch();
|
||||||
}
|
}
|
||||||
|
13
src/main.ts
13
src/main.ts
@ -1,15 +1,20 @@
|
|||||||
import * as core from "@actions/core";
|
import { setFailed } from "@actions/core";
|
||||||
import { init, deploy } from "./git";
|
import { init, deploy } from "./git";
|
||||||
|
|
||||||
/** Initializes and runs the action. */
|
/** Initializes and runs the action. */
|
||||||
(async function() {
|
export default async function main() {
|
||||||
try {
|
try {
|
||||||
await init();
|
await init();
|
||||||
await deploy();
|
await deploy();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
/* istanbul ignore next */
|
||||||
console.log("The deployment encountered an error. ❌");
|
console.log("The deployment encountered an error. ❌");
|
||||||
core.setFailed(error.message);
|
/* istanbul ignore next */
|
||||||
|
setFailed(error);
|
||||||
} finally {
|
} finally {
|
||||||
console.log("Completed Deployment ✅");
|
console.log("Completed Deployment ✅");
|
||||||
}
|
}
|
||||||
})();
|
}
|
||||||
|
|
||||||
|
// Init
|
||||||
|
main();
|
||||||
|
Loading…
Reference in New Issue
Block a user