github-pages-deploy-action/lib/worktree.js

70 lines
3.4 KiB
JavaScript
Raw Normal View History

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateWorktree = exports.GitCheckout = void 0;
const core_1 = require("@actions/core");
const execute_1 = require("./execute");
const util_1 = require("./util");
class GitCheckout {
constructor(branch) {
this.orphan = false;
this.commitish = null;
this.branch = branch;
}
toString() {
return [
'git',
'checkout',
this.orphan ? '--orphan' : '-B',
this.branch,
this.commitish || ''
].join(' ');
}
}
exports.GitCheckout = GitCheckout;
/* Generate the worktree and set initial content if it exists */
function generateWorktree(action, worktreedir, branchExists) {
return __awaiter(this, void 0, void 0, function* () {
try {
(0, core_1.info)('Creating worktree…');
if (branchExists) {
yield (0, execute_1.execute)(`git fetch --no-recurse-submodules --depth=1 origin ${action.branch}`, action.workspace, action.silent);
}
yield (0, execute_1.execute)(`git worktree add --no-checkout --detach ${worktreedir}`, action.workspace, action.silent);
const checkout = new GitCheckout(action.branch);
if (branchExists) {
// There's existing data on the branch to check out
checkout.commitish = `origin/${action.branch}`;
}
if (!branchExists ||
(action.singleCommit && action.branch !== process.env.GITHUB_REF_NAME)) {
/* Create a new history if we don't have the branch, or if we want to reset it.
If the ref name is the same as the branch name, do not attempt to create an orphan of it. */
checkout.orphan = true;
}
yield (0, execute_1.execute)(checkout.toString(), `${action.workspace}/${worktreedir}`, action.silent);
if (!branchExists) {
(0, core_1.info)(`Created the ${action.branch} branch… 🔧`);
// Our index is in HEAD state, reset
yield (0, execute_1.execute)('git reset --hard', `${action.workspace}/${worktreedir}`, action.silent);
if (!action.singleCommit) {
// New history isn't singleCommit, create empty initial commit
yield (0, execute_1.execute)(`git commit --no-verify --allow-empty -m "Initial ${action.branch} commit"`, `${action.workspace}/${worktreedir}`, action.silent);
}
}
}
catch (error) {
throw new Error(`There was an error creating the worktree: ${(0, util_1.suppressSensitiveInformation)((0, util_1.extractErrorMessage)(error), action)}`);
}
});
}
exports.generateWorktree = generateWorktree;