@@ -9,34 +9,35 @@ import { renderProject } from './views/renderProject';
9
9
import { getProjectData } from './utils/getProjectData' ;
10
10
import { env } from './utils/env' ;
11
11
import { getConfigs , validateConfig } from './config' ;
12
- import { renderOverview } from './views/renderOverview' ;
12
+ // import { renderOverview } from './views/renderOverview';
13
13
14
14
import { IConfig } from './interfaces/IConfig' ;
15
15
16
- const TOKEN_NAME = 'REPO_GITHUB_PAT' ;
16
+ const TOKEN_READ_NAME = 'REPO_GITHUB_READ_PAT' ;
17
+ const TOKEN_WRITE_NAME = 'REPO_GITHUB_READ_PAT' ;
17
18
const CONFIG_PATH = 'CONFIG_PATH' ;
18
19
19
- const overwriteBoardIssue = async (
20
- issueContents : string ,
21
- config : IConfig ,
22
- projectKit : ProjectsOctoKit ,
23
- ) => {
24
- const { status } = await projectKit . updateBoardIssue (
25
- config . boardIssue ,
26
- issueContents ,
27
- ) ;
20
+ // const overwriteBoardIssue = async (
21
+ // issueContents: string,
22
+ // config: IConfig,
23
+ // projectKit: ProjectsOctoKit,
24
+ // ) => {
25
+ // const { status } = await projectKit.updateBoardIssue(
26
+ // config.boardIssue,
27
+ // issueContents,
28
+ // );
28
29
29
- if ( status !== 200 ) {
30
- throw new Error ( `Failed to update the issue ${ config . boardIssue } ` ) ;
31
- }
30
+ // if (status !== 200) {
31
+ // throw new Error(`Failed to update the issue ${config.boardIssue}`);
32
+ // }
32
33
33
- console . log ( `Successfully updated the board issue ${ config . boardIssue } ` ) ;
34
- } ;
34
+ // console.log(`Successfully updated the board issue ${config.boardIssue}`);
35
+ // };
35
36
36
- const getRegex = ( projectId ?: number ) => {
37
- const regex = / < ! - - \s * c o d e s p a c e s - b o a r d : s t a r t \s * - - > ( [ \W \w ] * ) < ! - - \s * c o d e s p a c e s - b o a r d : e n d \s * - - > / gim;
38
- return regex ;
39
- } ;
37
+ // const getRegex = (projectId?: number) => {
38
+ // const regex = /<!--\s*codespaces-board:start\s*-->([\W\w]*)<!--\s*codespaces-board:end\s*-->/gim;
39
+ // return regex;
40
+ // };
40
41
41
42
const wrapIssueText = ( text : string , projectId ?: number ) => {
42
43
return [
@@ -48,26 +49,98 @@ const wrapIssueText = (text: string, projectId?: number) => {
48
49
] . join ( '\n' ) ;
49
50
} ;
50
51
51
- const updateBoardIssue = async (
52
+ // const updateBoardIssue = async (
53
+ // issueContents: string,
54
+ // config: IConfig,
55
+ // projectKit: ProjectsOctoKit,
56
+ // ) => {
57
+ // if (!config.isReplaceProjectMarkers) {
58
+ // return await overwriteBoardIssue(issueContents, config, projectKit);
59
+ // }
60
+
61
+ // const issue = await projectKit.getBoardIssue(config.boardIssue);
62
+
63
+ // const { body } = issue;
64
+ // const newBody = body.replace(getRegex(), wrapIssueText(issueContents));
65
+
66
+ // await overwriteBoardIssue(newBody, config, projectKit);
67
+ // };
68
+
69
+ // const processConfigRecord = async (
70
+ // config: IConfig,
71
+ // projectKit: ProjectsOctoKit,
72
+ // ) => {
73
+ // console.log('Processing config: \n', JSON.stringify(config, null, 2));
74
+
75
+ // const validationErrors = validateConfig(config);
76
+ // if (validationErrors.length) {
77
+ // console.error(
78
+ // `\n\nNot valid config for the issue ${config.boardIssue}, skipping.. \n`,
79
+ // validationErrors,
80
+ // '\n\n',
81
+ // );
82
+ // return;
83
+ // }
84
+
85
+ // console.log(`- Config schema validation passed.`);
86
+
87
+ // const repoProjects = await projectKit.getAllProjects(config.repos);
88
+
89
+ // const projectsWithData = [];
90
+ // for (let { repo, projects } of repoProjects) {
91
+ // for (let project of projects) {
92
+ // console.log(`- Getting Project data for ${project.project.name}.`);
93
+ // projectsWithData.push({
94
+ // project,
95
+ // data: await getProjectData(projectKit, config, project),
96
+ // });
97
+ // }
98
+
99
+ // const result = projectsWithData.map(({ project, data }) => {
100
+ // return renderProject(data, project, config);
101
+ // });
102
+
103
+ // const issueBody = result.join('\n') + '\n';
104
+ // let header;
105
+ // if (config.headerFileUrl) {
106
+ // header = await projectKit.getBoardHeaderText(config.headerFileUrl);
107
+ // }
108
+
109
+ // let footer;
110
+ // if (config.footerFileUrl) {
111
+ // footer = await projectKit.getBoardHeaderText(config.footerFileUrl);
112
+ // }
113
+
114
+ // const issueContents = [
115
+ // header,
116
+ // // render all projects overview
117
+ // // renderOverview(config, projectsWithData),
118
+ // issueBody,
119
+ // footer,
120
+ // ].join('\n');
121
+
122
+ // await updateBoardIssue(issueContents, config, projectKit);
123
+ // }
124
+ // };
125
+
126
+ const updateBoardComment = async (
127
+ commentUrl : string ,
52
128
issueContents : string ,
53
- config : IConfig ,
54
129
projectKit : ProjectsOctoKit ,
55
130
) => {
56
- if ( ! config . isReplaceProjectMarkers ) {
57
- return await overwriteBoardIssue ( issueContents , config , projectKit ) ;
58
- }
131
+ // if (!config.isReplaceProjectMarkers) {
132
+ // return await overwriteBoardIssue(issueContents, config, projectKit);
133
+ // }
59
134
60
- const issue = await projectKit . getBoardIssue ( config . boardIssue ) ;
135
+ console . log ( `>> updating the comment ${ commentUrl } with contents length: ${ issueContents . length } ` ) ;
61
136
62
- const { body } = issue ;
63
- const newBody = body . replace ( getRegex ( ) , wrapIssueText ( issueContents ) ) ;
64
-
65
- await overwriteBoardIssue ( newBody , config , projectKit ) ;
137
+ return await projectKit . updateBoardComment ( commentUrl , issueContents ) ;
66
138
} ;
67
139
68
- const processConfigRecord = async (
140
+ const processConfigRecordComment = async (
69
141
config : IConfig ,
70
- projectKit : ProjectsOctoKit ,
142
+ readProjectKit : ProjectsOctoKit ,
143
+ writeProjectKit : ProjectsOctoKit ,
71
144
) => {
72
145
console . log ( 'Processing config: \n' , JSON . stringify ( config , null , 2 ) ) ;
73
146
@@ -81,59 +154,57 @@ const processConfigRecord = async (
81
154
return ;
82
155
}
83
156
84
- console . log ( ` - Config schema validation passed.` ) ;
157
+ console . log ( '\n - Config schema validation passed.\n' ) ;
85
158
86
- const repoProjects = await projectKit . getAllProjects ( config . repos ) ;
159
+ const repoProjects = await readProjectKit . getAllProjects ( config . repos ) ;
87
160
88
161
const projectsWithData = [ ] ;
89
162
for ( let { repo, projects } of repoProjects ) {
90
163
for ( let project of projects ) {
91
164
console . log ( `- Getting Project data for ${ project . project . name } .` ) ;
92
165
projectsWithData . push ( {
93
166
project,
94
- data : await getProjectData ( projectKit , config , project ) ,
167
+ data : await getProjectData ( readProjectKit , config , project ) ,
95
168
} ) ;
96
169
}
97
170
98
- const result = projectsWithData . map ( ( { project, data } ) => {
99
- return renderProject ( data , project , config ) ;
100
- } ) ;
171
+ for ( let { project, data } of projectsWithData ) {
172
+ const comment = renderProject ( data , project , config ) ;
173
+ const { projectConfig } = project ;
174
+ if ( typeof projectConfig === 'number' ) {
175
+ continue ;
176
+ }
101
177
102
- const issueBody = result . join ( '\n' ) + '\n' ;
103
- let header ;
104
- if ( config . headerFileUrl ) {
105
- header = await projectKit . getBoardHeaderText ( config . headerFileUrl ) ;
106
- }
178
+ const { boardComment } = projectConfig ;
179
+ if ( ! boardComment ) {
180
+ continue ;
181
+ }
107
182
108
- let footer ;
109
- if ( config . footerFileUrl ) {
110
- footer = await projectKit . getBoardHeaderText ( config . footerFileUrl ) ;
183
+ await updateBoardComment ( boardComment , comment , writeProjectKit ) ;
111
184
}
112
-
113
- const issueContents = [
114
- header ,
115
- // render all projects overview
116
- // renderOverview(config, projectsWithData),
117
- issueBody ,
118
- footer ,
119
- ] . join ( '\n' ) ;
120
-
121
- await updateBoardIssue ( issueContents , config , projectKit ) ;
122
185
}
123
186
} ;
124
187
125
188
async function run ( ) : Promise < void > {
126
189
try {
127
- const token = env ( TOKEN_NAME ) ?? core . getInput ( 'token' ) ;
190
+ const token = core . getInput ( 'token' ) ;
191
+ const readToken = env ( TOKEN_READ_NAME ) ?? core . getInput ( 'readToken' ) ?? token ;
192
+ const writeToken = env ( TOKEN_READ_NAME ) ?? core . getInput ( 'writeToken' ) ?? token ;
193
+
194
+ if ( ! readToken ) {
195
+ throw new AuthorizationError ( 'No read token found.' ) ;
196
+ }
128
197
129
- if ( ! token ) {
130
- throw new AuthorizationError ( 'No token found.' ) ;
198
+ if ( ! writeToken ) {
199
+ throw new AuthorizationError ( 'No write token found.' ) ;
131
200
}
132
201
133
- const projectKit = new ProjectsOctoKit ( token ) ;
202
+ const readProjectKit = new ProjectsOctoKit ( readToken ) ;
203
+ const writeProjectKit = new ProjectsOctoKit ( writeToken ) ;
204
+
134
205
const configsFilePath = env ( CONFIG_PATH ) ?? core . getInput ( 'config' ) ;
135
206
for ( let config of getConfigs ( configsFilePath ) ) {
136
- await processConfigRecord ( config , projectKit ) ;
207
+ await processConfigRecordComment ( config , readProjectKit , writeProjectKit ) ;
137
208
}
138
209
} catch ( error ) {
139
210
console . error ( error ) ;
0 commit comments