Compare commits

..

10 Commits

5 changed files with 41 additions and 21 deletions

4
changelog.md Normal file
View File

@ -0,0 +1,4 @@
# Changelog
## 1.1.41
- fix(aidoc_classes): Improve commit message generation by handling empty diffs and updating changelog instructions

View File

@ -1,6 +1,6 @@
{
"name": "@git.zone/tsdoc",
"version": "1.1.37",
"version": "1.1.42",
"private": false,
"description": "An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.",
"type": "module",

View File

@ -29,9 +29,10 @@ tap.test('should build commit object', async () => {
const commitObject = await aidocs.buildNextCommitObject('./');
console.log(commitObject);
expect(commitObject).not.toBeUndefined();
expect(commitObject).toHaveProperty('message');
expect(commitObject).toHaveProperty('recommendedNextVersion');
expect(commitObject).toHaveProperty('recommendedNextVersionLevel');
expect(commitObject).toHaveProperty('recommendedNextVersionScope');
expect(commitObject).toHaveProperty('recommendedNextVersionMessage');
})

View File

@ -1,8 +1,8 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
* autocreated commitinfo by @push.rocks/commitinfo
*/
export const commitinfo = {
name: '@git.zone/tsdoc',
version: '1.1.37',
version: '1.1.42',
description: 'An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.'
}

View File

@ -4,10 +4,10 @@ import { ProjectContext } from './projectcontext.js';
export interface INextCommitObject {
recommendedNextVersionLevel: 'fix' | 'feat' | 'BREAKING CHANGE'; // the recommended next version level of the project
recommendedScope: string; // the recommended scope name of the next version, like "core" or "cli", or specific class names.
recommendedNextVersion: string; // the recommended next version of the project
message: string; // the commit message. use conventional commits format
changelog?: string; // the changelog
recommendedNextVersionScope: string; // the recommended scope name of the next version, like "core" or "cli", or specific class names.
recommendedNextVersionMessage: string; // the commit message. Don't put fix() feat() or BREAKING CHANGE in the message. Please just the message itself.
recommendedNextVersion: string; // the recommended next version of the project, x.x.x
changelog?: string; // the changelog for the next version
}
export class Commit {
@ -22,16 +22,20 @@ export class Commit {
public async buildNextCommitObject(): Promise<INextCommitObject> {
const smartgitInstance = new plugins.smartgit.Smartgit();
await smartgitInstance.init();
const gitRepo = await plugins.smartgit.GitRepo.fromOpeningRepoDir(smartgitInstance, this.projectDir);
const gitRepo = await plugins.smartgit.GitRepo.fromOpeningRepoDir(
smartgitInstance,
this.projectDir
);
const diffString = await gitRepo.getUncommittedDiff();
const projectContext = new ProjectContext(this.projectDir);
let contextString = await projectContext.update();
contextString = `
${contextString}
Here is the diff:
${diffString}
`
Below is the diff of the uncommitted changes. If nothing is changed, there are no changes:
${diffString || 'No changes.'}
`;
let result = await this.aiDocsRef.openaiInstance.chat({
systemMessage: `
@ -47,9 +51,9 @@ Your answer should be parseable with JSON.parse() without modifying anything.
Here is the structure of the JSON you should return:
{
recommendedNextVersionLevel: 'fix' | 'feat' | 'BREAKING CHANGE'; // the recommended next version level of the project
recommendedScope: string; // the recommended scope name of the next version, like "core" or "cli", or specific class names.
recommendedNextVersion: string; // the recommended next version of the project
message: string; // the commit message. Don't put fix() feat() or BREAKING CHANGE in the message. Please just the message itself.
recommendedNextVersionScope: string; // the recommended scope name of the next version, like "core" or "cli", or specific class names.
recommendedNextVersionMessage: string; // the commit message. Don't put fix() feat() or BREAKING CHANGE in the message. Please just the message itself.
recommendedNextVersion: string; // the recommended next version of the project, x.x.x
}
You are being given the files of the project. You should use them to create the commit message.
@ -61,7 +65,9 @@ Also you are given a diff
});
// console.log(result.message);
const resultObject: INextCommitObject = JSON.parse(result.message.replace('```json', '').replace('```', ''));
const resultObject: INextCommitObject = JSON.parse(
result.message.replace('```json', '').replace('```', '')
);
// lets build the changelog based on that
const commitMessages = await gitRepo.getAllCommitMessages();
@ -82,18 +88,27 @@ You are given
Only return the changelog file, so it can be written directly to changelog.md
For the latest version, that is not yet part of the commit messages, use {{nextVersion}} and {{nextDescription}} placeholders.
For the latest version, that is not yet part of the commit messages, add a placeholder entry that uses {{nextVersion}} and {{nextVersionMessage}} as variables to filled later.
Only output newer versions and their changes compared to ones already mentioned. We take of appending your output later.
`,
userMessage: `
The previous changelog file is:
${(!previousChangelog) ? 'No previous changelog file found' : previousChangelog.contents.toString()}
${!previousChangelog ? 'No previous changelog file found' : previousChangelog.contents.toString()}
Here are the commit messages so far:
${commitMessages.join('\n\n')}
`
})
resultObject.changelog = result2.message;
`,
});
if (previousChangelog) {
let newChangelog = result2.message;
newChangelog = newChangelog.replace('# Changelog\n\n', '');
let oldChangelog = previousChangelog.contents.toString().replace('# Changelog\n\n', '');
newChangelog = `# Changelog\n\n${newChangelog}\n\n${oldChangelog}`;
resultObject.changelog = newChangelog;
} else {
resultObject.changelog = result2.message;
}
return resultObject;
}
}