Skip to content

Commit e0c0d0d

Browse files
authored
Merge pull request #11 from infinitaslearning/feature/GetDotNetVersionInfo
Add extra info from GitHub using Tags
2 parents 030c126 + 012011b commit e0c0d0d

2 files changed

Lines changed: 112 additions & 3 deletions

File tree

src/github.js

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,109 @@ const getRepos = async () => {
4848
}
4949
}
5050

51+
const getLanguages = async (repo) => {
52+
try {
53+
const { data } = await octokit.request('GET /repos/{owner}/{repo}/languages', {
54+
owner: repo.full_name.split('/')[0],
55+
repo: repo.name,
56+
})
57+
const languages = Object.keys(data);
58+
return languages
59+
} catch (ex) {
60+
throw ex
61+
}
62+
}
63+
64+
const getTeams = async (repo) => {
65+
try {
66+
const { data } = await octokit.request('GET /repos/{owner}/{repo}/teams', {
67+
owner: repo.full_name.split('/')[0],
68+
repo: repo.name,
69+
})
70+
const teams = data.map((t) => t.name);
71+
return teams
72+
} catch (ex) {
73+
throw ex
74+
}
75+
}
76+
77+
const getTree = async (repo) => {
78+
try {
79+
const { data } = await octokit.request('GET /repos/{owner}/{repo}/git/trees/{default_branch}?recursive=1', {
80+
owner: repo.full_name.split('/')[0],
81+
repo: repo.name,
82+
default_branch: repo.default_branch
83+
})
84+
return data
85+
} catch (ex) {
86+
throw ex
87+
}
88+
}
89+
90+
91+
const getFileContent = async (url) => {
92+
try {
93+
const { data } = await octokit.request('GET {url}', {
94+
url: url
95+
})
96+
const base64content = Buffer.from(data.content, 'base64')
97+
const fileContent = base64content.toString('utf8')
98+
return fileContent
99+
} catch (ex) {
100+
throw ex
101+
}
102+
}
103+
104+
function getStringBetween(str, start, end) {
105+
const result = str.match(new RegExp(start + "(.*)" + end));
106+
107+
if (result === undefined || result === null)
108+
{
109+
return '';
110+
}
111+
112+
return result[1];
113+
}
114+
115+
const getDotNetVersions = async (fileTree) => {
116+
const csprojBlobUrls = fileTree.tree.filter((n) => n.path.endsWith('.csproj')).map((n) => n.url);
117+
118+
const csprojContentsPromises = csprojBlobUrls.map((u) => getFileContent(u));
119+
120+
const csprojContents = await Promise.all(csprojContentsPromises)
121+
122+
const targetFrameworks = csprojContents.map((c) => getStringBetween(c, '<TargetFramework>', '</TargetFramework>'));
123+
const targetFrameworkVersions = csprojContents.map((c) => getStringBetween(c, '<TargetFrameworkVersion>', '</TargetFrameworkVersion>'));
124+
targetFrameworks.push(...targetFrameworkVersions);
125+
//unique values + not empty + prefix with C#
126+
const versions = targetFrameworks.filter((x, i, a) => a.indexOf(x) == i).filter((v) => v != '').map((v) => 'C# ' + v);
127+
128+
return versions;
129+
}
130+
131+
const enrichTags = async (serviceDefinition) => {
132+
if (serviceDefinition.metadata.tags === undefined || serviceDefinition.metadata.tags === null)
133+
{
134+
serviceDefinition.metadata.tags = [];
135+
}
136+
137+
const languages = await getLanguages(serviceDefinition._repo);
138+
serviceDefinition.metadata.tags.push(...languages);
139+
140+
const teams = await getTeams(serviceDefinition._repo);
141+
serviceDefinition.metadata.tags.push(...teams);
142+
143+
if (languages.includes('C#'))
144+
{
145+
const fileTree = await getTree(serviceDefinition._repo);
146+
147+
const versions = await getDotNetVersions(fileTree);
148+
serviceDefinition.metadata.tags.push(...versions);
149+
}
150+
151+
serviceDefinition.metadata.tags = serviceDefinition.metadata.tags.filter((x, i, a) => a.indexOf(x) == i); //only unique values
152+
}
153+
51154
const parseServiceDefinition = async (repo, path) => {
52155
const repoData = []
53156
try {
@@ -61,6 +164,9 @@ const getRepos = async () => {
61164
serviceDefinition._catalog_file = data.html_url
62165
serviceDefinition._repo = repo
63166
serviceDefinition.status = 'OK'
167+
168+
await enrichTags(serviceDefinition);
169+
64170
repoData.push(serviceDefinition)
65171
}
66172
}
@@ -76,6 +182,7 @@ const getRepos = async () => {
76182
core.debug(`✋ Unable to find ${path} in ${repo.name}, not processing as 'push_missing' is false`)
77183
}
78184
}
185+
79186
return repoData
80187
}
81188

src/links.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ const updateLinks = async (linkDatabaseId, links, { notion }) => {
7272
newLink = link
7373
}
7474

75+
const key = newLink.toLowerCase();
76+
7577
// Now lets see if we can find the row
76-
if (existingLinks[newLink]) {
77-
const linkId = existingLinks[newLink].id
78-
const linkUrl = existingLinks[newLink].url
78+
if (existingLinks[key]) {
79+
const linkId = existingLinks[key].id
80+
const linkUrl = existingLinks[key].url
7981

8082
if (newLinkUrl !== linkUrl) { // url has changed
8183
await updateNotionLink(linkId, newLink, newLinkUrl, { notion })

0 commit comments

Comments
 (0)