gpt4 book ai didi

javascript - 从 Azure DevOps 获取已通过 JavaScript 合并到分支中的所有工作项

转载 作者:行者123 更新时间:2023-12-04 13:50:59 25 4
gpt4 key购买 nike

想法

我目前正在使用 NodeJS 开发一个“发行说明”应用程序,该应用程序调用各种 Azure DevOps REST API 端点来获取基于特定标签的工作项。

我现在拥有的

我现在的工作原理是这样的;

  • Azure DevOps 上的一些工作项(自定义)标记有 v1.1
  • 我编写的 JS 函数会获取与给定 v1.1 标记匹配的所有工作项。
  • 使用生成的 markdown 创建 wiki 条目,显示每个工作项的分割(格式对问题并不重要)。
/**
* Function used to fetch initial work items from Azure DevOps that match the provided release number
* @param {String} releaseNumber - the given release number
* @returns {Array} workItems - the initial work items fetched from Azure DevOps
*/
async function fetchWorkItems(releaseNumber) {
console.log('\nFetching work items for given release number...');
let response;
try {
response = await axios.post('https://dev.azure.com/myTestOrg/myTestProject/_apis/wit/wiql?api-version=6', {
query: `SELECT [State], [Title] FROM WorkItems WHERE [Tags] CONTAINS '${releaseNumber}'`
}, {
headers: {
Authorization: getAuthToken()
}
});
console.log(`Found ${response.data.workItems.length} work item(s).`);
} catch (e) {
console.error('\nUnable to fetch work items. See below error message');
console.error(e.message);
process.exit(1);
}

return response.data.workItems;
}

/**
* Function used to fetch the details for a given array of work items
* @param {Array} givenWorkItems - given array of work items to fetch the details for
* @returns {Array} details - the initial work items fetched from Azure DevOps
*/
async function fetchWorkItemDetails(givenWorkItems) {
console.log('\nFetching further details for the given work item(s)...');
const returnData = [];
let response;

for (const item of givenWorkItems) {
try {
// eslint-disable-next-line no-await-in-loop
response = await axios.get(item.url, {
headers: {
Authorization: getAuthToken()
}
});
} catch (e) {
console.error('\nUnable to fetch details for given work items. See below error message');
console.error(e.message);
process.exit(1);
} finally {
returnData.push({
type: response.data.fields['System.WorkItemType'],
title: response.data.fields['System.Title'],
url: response.data._links.html.href
});
}
}

console.log(`Found details for ${returnData.length} work item(s).`);
return returnData;
}

...

/**
* Function used to create the wiki entry based on a given markup string
* @param {String} releaseNumber - the given release number
* @param {String} givenMarkdown - given array of work items to fetch the details for
* @returns {undefined} nothing
*/
async function createWiki(releaseNumber, givenMarkdown) {
console.log('\nCreating wiki entry...');
try {
await axios.put(`https://dev.azure.com/myTestOrg/myTestProject/_apis/wiki/wikis/myTestProject.wiki/pages?path=/Releases/Release%20${releaseNumber}&api-version=6.0`, {
content: givenMarkdown
}, {
headers: {
Authorization: getAuthToken()
}
});
} catch (e) {
console.error('\nUnable to create wiki entry for given markdown. See below error message');
console.error(e.message);
process.exit(1);
} finally {
console.log('Successfully created wiki entry.');
}
}

...

const workItems = await fetchWorkItems(releaseNumber);
const workItemDetails = await fetchWorkItemDetails(workItems);
const formattedDetails = formatWorkItemDetails(workItemDetails);
const generatedMarkup = generateMarkdown(formattedDetails);
await createWiki(releaseNumber, generatedMarkup);
...

// creates the wiki based on the given `releaseNumber` variable
// (which is the workitem tag of `v1.1` in our case)

为什么我现在拥有的还不够好

如果我记得使用正确的 v1.1 标记来标记工作项,则此应用程序可以正常工作 - 但如果我不这样做,则该程序将不会识别特定票证(和相关的分支/代码)已被合并并已经/正在等待发布 - 我希望这有意义吗?

问题

有没有办法让我获取已通过 REST api 合并到分支(或 git 标签)中的所有工作项(无论标签)?

我注意到还有一个 azure-devops-node-api npm 包可能合适,但我不知道我想要实现的目标是否可能。

为什么我不能使用 XYZ

我看到了这个项目https://marketplace.visualstudio.com/items?itemName=richardfennellBM.BM-VSTS-XplatGenerateReleaseNotes当我尝试时,似乎工作正常,但不适合我的需求;

  1. 我不使用 DevOps 中的专用 release 部分,我只有几个应用程序管道,其中包含用于将各种应用程序部署到 QA/Staging/生产环境的门控步骤
  2. 我在多个 Azure DevOps 管道中共享相同的版本号(并且上述解决方案(我发现)最适合单个管道)
  3. 我不想将多个应用程序管道合并为一个主管道,除非我确实需要。

最佳答案

注意:我不会编写如何执行 java 脚本,因为我不是 js 专家...这个想法是 Rest api,所以语言并不重要。

  1. 获取您想要检查的所有工作项,您可以使用当前的 api 来完成,只需在查询中删除标签即可。 (您可以通过指定日期等缩小结果范围)

  2. 您还需要获取链接到工作项的 PR,此数据无法通过 WIQL api 获得。 ,因此 - 获得需要的工作项 ID 后,请调用 Work Items - Get Work Items Batch api (或循环每个并执行 Work Items - Get Work Itemapi) 并在 body/url 中添加 $expandrelations/all 值以获取链接的 PR。

  3. 当您拥有带有链接 PR 的工作项后(在上面的 api 响应中,您将看到 relations 部分,如果在其中,url 带有 vstfs:///Git/PullRequestId 所以是 PR),您需要检查 PR 是否合并到 master 分支。如何?与 Pull Requests - Get Pull Request api,现在,检查此 PR 的目标分支并检查是否已完成(合并)。

关于javascript - 从 Azure DevOps 获取已通过 JavaScript 合并到分支中的所有工作项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69450487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com