@docupace/pipeline 1.0.39-newrelease.8 → 1.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,134 +0,0 @@
1
- import defaultChangeLog from '@changesets/cli/changelog';
2
- import { loadChangesetOutput } from './version.js';
3
- import path from 'path';
4
- import yaml from 'js-yaml';
5
- import { getJiraReleaseNotes, updateJiraReleaseNotes } from '../next/jira.js';
6
- import { uploadToCanny } from './canny.js';
7
- import fs from 'fs';
8
- import semver from 'semver';
9
- import { componentConfig, labelIDMap } from './config.js';
10
-
11
- async function updateDetailsLinkInText(text, processDetailsLink, params) {
12
- const detailsLinkRegex = /\[\[details\]\]\((.*?)\)/;
13
-
14
- const match = text.match(detailsLinkRegex);
15
- if (!match) {
16
- return text; // No details link found
17
- }
18
-
19
- const originalLink = match[1];
20
- const newLink = await processDetailsLink(originalLink, params);
21
-
22
- const updatedText = text.replace(detailsLinkRegex, `[[details]](${newLink})`);
23
- return updatedText;
24
- }
25
-
26
- function getChanges(params) {
27
- const changes = params.changeset.releases.map((release) => {
28
- const matchingRelease = params.output.releases.find(
29
- (r) => r.name === release.name,
30
- );
31
-
32
- const version = matchingRelease ? matchingRelease.newVersion : null;
33
- const parsed = version ? semver.parse(version) : null;
34
-
35
- return {
36
- name: release.name,
37
- type: release.type,
38
- version,
39
- majorMinor: parsed ? `${parsed.major}.${parsed.minor}` : null,
40
- };
41
- });
42
- return changes;
43
- }
44
-
45
- function getLabels(changes) {
46
- const labels = [];
47
- for (const change of changes) {
48
- const componentName = componentConfig[change.name];
49
- if (componentName) {
50
- const labelName = componentName;
51
- if (!labels.includes(labelName)) {
52
- labels.push(labelName);
53
- }
54
- }
55
- }
56
- return labels;
57
- }
58
-
59
- function getJiraVersions(changes) {
60
- const versions = [];
61
- for (const change of changes) {
62
- const componentName = componentConfig[change.name];
63
- if (componentName) {
64
- const labelName = `${componentName} - ${change.majorMinor}`;
65
- if (!versions.includes(labelName)) {
66
- versions.push(labelName);
67
- }
68
- }
69
- }
70
- return versions;
71
- }
72
-
73
- function getLabelIDs(labels) {
74
- return labels.map((label) => labelIDMap[label]);
75
- }
76
-
77
- async function fetchNewLink(oldLink, params) {
78
- if (oldLink.includes('.yaml')) {
79
- const yamlPath = path.resolve(process.cwd(), '.changeset', oldLink);
80
- const releaseNote = yaml.load(fs.readFileSync(yamlPath, 'utf-8'));
81
- const jiraReleaseInfo = await getJiraReleaseNotes(releaseNote.ticketId);
82
- if (jiraReleaseInfo?.url) {
83
- return jiraReleaseInfo.url;
84
- } else {
85
- const changes = getChanges(params);
86
- const labels = getLabels(changes);
87
- const labelIDs = getLabelIDs(labels);
88
- const jiraVersions = getJiraVersions(changes);
89
- const data = await uploadToCanny(releaseNote, labelIDs);
90
- await updateJiraReleaseNotes(
91
- releaseNote.ticketId,
92
- releaseNote.summary,
93
- data.url,
94
- jiraVersions,
95
- );
96
- return data.url;
97
- }
98
- } else {
99
- return oldLink;
100
- }
101
- }
102
-
103
- async function uploadChangeset(changeset) {
104
- const output = await loadChangesetOutput();
105
- const summary = await updateDetailsLinkInText(
106
- changeset.summary,
107
- fetchNewLink,
108
- { changeset, output },
109
- );
110
- return { ...changeset, summary };
111
- }
112
-
113
- async function getReleaseLine(changeset, type, changelogOpts) {
114
- const newChangeset = await uploadChangeset(changeset);
115
- return await defaultChangeLog.getReleaseLine(
116
- newChangeset,
117
- type,
118
- changelogOpts,
119
- );
120
- }
121
-
122
- async function getDependenciesReleaseLine(
123
- changesets,
124
- dependenciesUpdated,
125
- changelogOpts,
126
- ) {
127
- return await defaultChangeLog.getDependencyReleaseLine(
128
- changesets,
129
- dependenciesUpdated,
130
- changelogOpts,
131
- );
132
- }
133
-
134
- export default { getReleaseLine, getDependenciesReleaseLine };
@@ -1,11 +0,0 @@
1
- export const componentConfig = {
2
- '@docupace/enterprise-ui-app': 'Enterprise',
3
- '@docupace/cc-ui-app': 'C & C',
4
- '@docupace/core': 'Enterprise Core',
5
- '@docupace/graphql-server': 'Enterprise',
6
- };
7
-
8
- export const labelIDMap = {
9
- Enterprise: '6836d53ad8622b2abab1fbd9',
10
- 'Enterprise Core': '6836d532716bbe32f53661fb',
11
- };
@@ -1,171 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import inquirer from 'inquirer';
4
- import { getMainPackage, getPackage, findJiraTicketId } from './util.js';
5
- import { getPackageNames } from './package-util.js';
6
- import { execSync } from 'child_process';
7
- import { getReleaseNotes, JIRA_BASE_URL } from './openai.js';
8
-
9
- async function createChangesetDirectory() {
10
- try {
11
- // Use path.join to build a safe path to `.changeset`
12
- const targetDir = path.join(process.cwd(), '.changeset');
13
-
14
- // Create the directory recursively if it doesn't exist
15
- await fs.promises.mkdir(targetDir, { recursive: true });
16
- } catch (error) {
17
- console.error('Error creating .changeset directory:', error);
18
- }
19
- }
20
-
21
- /**
22
- * Gets the current git branch name
23
- */
24
- async function getCurrentBranch() {
25
- try {
26
- const branchName = execSync('git branch --show-current', {
27
- encoding: 'utf8',
28
- shell: true,
29
- }).trim();
30
- console.log(`Current branch: ${branchName}`);
31
- return branchName;
32
- } catch (error) {
33
- console.error('Error getting current branch:', error.message);
34
- throw error;
35
- }
36
- }
37
- /**
38
- * Extracts a Jira ticket ID from a branch name
39
- */
40
- function extractJiraTicketId(branchName) {
41
- const jiraTicketId = findJiraTicketId(branchName);
42
- if (!jiraTicketId) {
43
- throw new Error('No Jira ticket found in the branch name.');
44
- }
45
- return jiraTicketId;
46
- }
47
-
48
- /**
49
- * Writes the changeset file
50
- */
51
- async function writeChangesetFile(
52
- packages,
53
- jiraTicketId,
54
- changeType,
55
- summary,
56
- yamlFilePath,
57
- ) {
58
- // Generate the YAML frontmatter for multiple packages
59
- const packageEntries = packages
60
- .map((pkg) => `'${pkg.name}': ${changeType}`)
61
- .join('\n');
62
-
63
- const relYamlFilePath = path.relative(
64
- path.resolve(process.cwd(), '.changeset'),
65
- yamlFilePath,
66
- );
67
-
68
- const changesetContent = `---
69
- ${packageEntries}
70
- ---
71
-
72
- ${summary}
73
- [[${jiraTicketId}]](${JIRA_BASE_URL}/browse/${jiraTicketId}) [[details]](${relYamlFilePath})`;
74
-
75
- const changesetFile = `./.changeset/${jiraTicketId}.md`;
76
-
77
- await createChangesetDirectory();
78
- await fs.promises.writeFile(changesetFile, changesetContent);
79
- console.log(`Created changeset file at ${changesetFile}`);
80
- }
81
-
82
- /**
83
- * Main function to create a changeset
84
- */
85
-
86
- export async function createChangeset(selectedJiraIssueKey) {
87
- const packages = getPackageNames();
88
-
89
- if (packages.length > 1) {
90
- const allPackages = packages;
91
- const response = await inquirer.prompt([
92
- {
93
- type: 'checkbox',
94
- name: 'packages',
95
- message: 'Which packages do you want to generate changesets for?',
96
- choices: allPackages.map((appPackage) => ({
97
- name: appPackage.name,
98
- value: appPackage.name,
99
- })),
100
- validate: (input) => {
101
- if (input.length === 0) {
102
- return 'Please select at least one package.';
103
- }
104
- return true;
105
- },
106
- },
107
- ]);
108
-
109
- const selectedPackages = allPackages.filter((appPackage) =>
110
- response.packages.includes(appPackage.name),
111
- );
112
-
113
- // Get package contents for all selected packages
114
- const selectedPackageContents = await Promise.all(
115
- selectedPackages.map(async (selectedPackage) => {
116
- return await getPackage(selectedPackage.path);
117
- }),
118
- );
119
-
120
- await createChangesetForPackage(
121
- selectedPackageContents,
122
- selectedJiraIssueKey,
123
- );
124
- } else {
125
- const mainPackage = await getMainPackage();
126
- await createChangesetForPackage([mainPackage], selectedJiraIssueKey);
127
- }
128
- }
129
-
130
- export async function createChangesetForPackage(
131
- packages,
132
- selectedJiraIssueKey,
133
- ) {
134
- try {
135
- let jiraTicketId;
136
-
137
- if (selectedJiraIssueKey) {
138
- jiraTicketId = selectedJiraIssueKey;
139
- } else {
140
- const branchName = await getCurrentBranch();
141
-
142
- jiraTicketId = extractJiraTicketId(branchName);
143
- }
144
-
145
- console.log(`Generating release notes for ${jiraTicketId}`);
146
-
147
- const { enhancedNotes, yamlFilePath, mainTicketId } =
148
- await getReleaseNotes(jiraTicketId);
149
-
150
- const { summary, changeType } = enhancedNotes;
151
- const change_type = changeType == 'Fixed' ? 'patch' : 'minor';
152
-
153
- // Step 4: Generate release notes using OpenAI
154
- console.log(`Change type: ${change_type}`);
155
- console.log(`Release note: ${summary}`);
156
-
157
- // Step 5: Create a changeset .md file for all packages
158
- await writeChangesetFile(
159
- packages,
160
- mainTicketId,
161
- change_type,
162
- summary,
163
- yamlFilePath,
164
- );
165
-
166
- console.log('Changeset created successfully!');
167
- } catch (err) {
168
- console.error(`Error: ${err.message}`);
169
- process.exit(1);
170
- }
171
- }