156 lines
12 KiB
JavaScript
156 lines
12 KiB
JavaScript
import * as path from 'path';
|
|
import { simpleGit } from 'simple-git';
|
|
import { sync as exists } from '@polymech/fs/exists';
|
|
import { substitute } from '@polymech/commons';
|
|
import { logger } from '../../index.js';
|
|
import { toolLogger } from '../../index.js';
|
|
import { findUpSync } from 'find-up';
|
|
const commitFiles = async (filePaths, commitMessage, targetDirectory, variables = {}) => {
|
|
try {
|
|
if (!filePaths || !filePaths.length) {
|
|
logger.warn(`No files to commit`);
|
|
return;
|
|
}
|
|
if (!exists(path.join(targetDirectory, '.git'))) {
|
|
try {
|
|
logger.info(`Initializing repository at ${targetDirectory}`);
|
|
await initRepository(targetDirectory);
|
|
}
|
|
catch (e) {
|
|
logger.error(`Error initializing repository at ${targetDirectory} `, e.message, filePaths);
|
|
}
|
|
}
|
|
const git = simpleGit(targetDirectory);
|
|
try {
|
|
await git.add(filePaths);
|
|
}
|
|
catch (e) {
|
|
logger.error('Error adding files:', e.message, filePaths);
|
|
}
|
|
await git.commit(commitMessage);
|
|
try {
|
|
await git.raw(['branch', '-M', 'master']);
|
|
const repo = substitute(false, "${GIT_REPO}/${GIT_USER}/${REPO_NAME}.git", {
|
|
REPO_NAME: path.basename(targetDirectory),
|
|
...variables
|
|
});
|
|
await git.raw(['remote', 'add', 'origin', repo]);
|
|
await git.push(['--set-upstream', 'origin', 'master']);
|
|
return true;
|
|
}
|
|
catch (e) {
|
|
if (e.message.includes('remote origin already exists')) {
|
|
await git.push(['--set-upstream', 'origin', 'master']);
|
|
}
|
|
else {
|
|
logger.error('Tools::GIT : Error pushing files:', e.message, filePaths);
|
|
}
|
|
}
|
|
}
|
|
catch (error) {
|
|
logger.error('Error committing files:', error.message, filePaths);
|
|
throw error;
|
|
}
|
|
};
|
|
const initRepository = async (targetDirectory, variables = {}) => {
|
|
try {
|
|
const git = simpleGit(targetDirectory);
|
|
if (!exists(path.join(targetDirectory, '.git'))) {
|
|
await git.init();
|
|
logger.info('Git repository initialized successfully!');
|
|
return true;
|
|
}
|
|
logger.info('Git repository already exists');
|
|
return false;
|
|
}
|
|
catch (error) {
|
|
logger.error('Error initializing git repository:', error.message);
|
|
return false;
|
|
}
|
|
};
|
|
export const tools = (target, options) => {
|
|
const logger = toolLogger('git', options);
|
|
if (!target) {
|
|
logger.warn(`Tools:GIT : Target is required`);
|
|
return [];
|
|
}
|
|
if (!exists(target)) {
|
|
logger.warn(`Tools:GIT : Project path doesnt exists ${target}`);
|
|
return [];
|
|
}
|
|
return [
|
|
{
|
|
type: 'function',
|
|
function: {
|
|
name: "init_repository",
|
|
description: "Initialize a new git repository",
|
|
parameters: {
|
|
type: "object",
|
|
properties: {},
|
|
required: []
|
|
},
|
|
function: async (params) => {
|
|
logger.info(`Tool::init_repository Init Repository in ${target}`);
|
|
const gitDir = findUpSync('.git', { type: 'directory', cwd: target });
|
|
if (gitDir && exists(gitDir)) {
|
|
logger.info(`Repository already exists at ${gitDir}`);
|
|
return true;
|
|
}
|
|
try {
|
|
const ret = await initRepository(target, options.variables);
|
|
return true;
|
|
}
|
|
catch (error) {
|
|
logger.error(`Error initializing repository`, error);
|
|
return false;
|
|
}
|
|
},
|
|
parse: JSON.parse,
|
|
}
|
|
},
|
|
{
|
|
type: 'function',
|
|
function: {
|
|
name: "commit_files_git",
|
|
description: "Commit files using git",
|
|
parameters: {
|
|
type: "object",
|
|
properties: {
|
|
files: {
|
|
type: "array",
|
|
items: {
|
|
type: "string"
|
|
}
|
|
},
|
|
message: {
|
|
type: "string"
|
|
}
|
|
},
|
|
required: ["files"],
|
|
},
|
|
function: async (ret) => {
|
|
debugger;
|
|
try {
|
|
const { files, message } = ret;
|
|
logger.info(`Tool::GIT Commit files ${files} in ${target}`);
|
|
if (!target) {
|
|
logger.error(`Tool::Git Commit : Target is required`);
|
|
return;
|
|
}
|
|
if (!exists(target)) {
|
|
logger.error(`Project doesnt path exists ${target}`);
|
|
return;
|
|
}
|
|
await commitFiles(files, message, target, options.variables);
|
|
}
|
|
catch (error) {
|
|
logger.error(`Error committing dependencies : ${error.message}`);
|
|
}
|
|
return true;
|
|
},
|
|
parse: JSON.parse,
|
|
},
|
|
}
|
|
];
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b29scy9naXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFPLFlBQVksQ0FBQTtBQUV2QyxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFFcEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLFNBQW1CLEVBQUUsYUFBcUIsRUFBRSxlQUF1QixFQUFFLFlBQW9DLEVBQUUsRUFBRSxFQUFFO0lBQ3RJLElBQUk7UUFDQSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7WUFDakMsT0FBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQzdDLElBQUk7Z0JBQ0EsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsZUFBZSxFQUFFLENBQUMsQ0FBQTtnQkFDNUQsTUFBTSxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUE7YUFDeEM7WUFBQyxPQUFPLENBQU0sRUFBRTtnQkFDYixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxlQUFlLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFB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
|