forked from Dev-Card/DevCard
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathciScript.js
More file actions
88 lines (73 loc) · 2.65 KB
/
Copy pathciScript.js
File metadata and controls
88 lines (73 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const isTestFile = (file) => /\.(test|spec)\.[jt]sx?$/.test(file);
const deriveTestFiles = (files) => {
return files.map((file) => {
if (isTestFile(file)) return file;
const withoutExt = file.replace(/\.[jt]sx?$/, '');
const parts = withoutExt.split('/');
const baseName = parts[parts.length - 1];
const dir = parts.slice(0, -1).join('/');
return `${dir}/__tests__/${baseName}.test.ts`;
});
};
module.exports = async ({ github, context, core }) => {
const owner = context.repo.owner;
const repo = context.repo.repo;
const pr = context.payload.pull_request;
const prNumber = pr.number;
const prState = pr.state;
const backendFiles = [];
const mobileFiles = [];
const webFiles = [];
const dbFiles = [];
try {
if (prState === 'closed') {
console.log(`PR state is: ${prState}`);
return {
backendChanged: false,
mobileChanged: false,
webChanged: false
};
}
const changedFiles = await github.paginate(
github.rest.pulls.listFiles,
{
owner,
repo,
pull_number: prNumber
}
);
changedFiles.forEach((file) => {
const fileName = file.filename;
if (fileName.startsWith('apps/backend/')) {
backendFiles.push(fileName);
} else if (fileName.startsWith('apps/mobile/')) {
mobileFiles.push(fileName);
} else if (fileName.startsWith('apps/web/')) {
webFiles.push(fileName);
}else if(fileName.startsWith('apps/backend/prisma')){
dbFiles.push(fileName)
}else if(fileName.includes('schema.prisma') || fileName.includes('/migrations/')){
dbFiles.push(fileName)
}
});
const strippedBackend = backendFiles.map(f => f.replace('apps/backend/', ''));
const strippedMobile = mobileFiles.map(f => f.replace('apps/mobile/', ''));
console.log({ backendFiles, mobileFiles, webFiles, dbFiles });
core.setOutput('backendFiles', strippedBackend.join(' '));
core.setOutput('mobileFiles', strippedMobile.join(' '));
core.setOutput('dbFiles', dbFiles.join(' '));
core.setOutput('webFiles', webFiles.map(f => f.replace('apps/web/', '')).join(' '));
core.setOutput('backendTestFiles', deriveTestFiles(strippedBackend).join(' '));
core.setOutput('mobileTestFiles', deriveTestFiles(strippedMobile).join(' '));
core.setOutput('backendChanged', backendFiles.length > 0);
core.setOutput('mobileChanged', mobileFiles.length > 0);
core.setOutput('webChanged', webFiles.length > 0);
} catch (error) {
console.error(error);
return {
backendChanged: false,
mobileChanged: false,
webChanged: false
};
}
};