@@ -9,34 +9,35 @@ import { renderProject } from './views/renderProject';
99import { getProjectData } from './utils/getProjectData' ;
1010import { env } from './utils/env' ;
1111import { getConfigs , validateConfig } from './config' ;
12- import { renderOverview } from './views/renderOverview' ;
12+ // import { renderOverview } from './views/renderOverview';
1313
1414import { IConfig } from './interfaces/IConfig' ;
1515
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' ;
1718const CONFIG_PATH = 'CONFIG_PATH' ;
1819
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+ // );
2829
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+ // }
3233
33- console . log ( `Successfully updated the board issue ${ config . boardIssue } ` ) ;
34- } ;
34+ // console.log(`Successfully updated the board issue ${config.boardIssue}`);
35+ // };
3536
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+ // };
4041
4142const wrapIssueText = ( text : string , projectId ?: number ) => {
4243 return [
@@ -48,26 +49,98 @@ const wrapIssueText = (text: string, projectId?: number) => {
4849 ] . join ( '\n' ) ;
4950} ;
5051
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 ,
52128 issueContents : string ,
53- config : IConfig ,
54129 projectKit : ProjectsOctoKit ,
55130) => {
56- if ( ! config . isReplaceProjectMarkers ) {
57- return await overwriteBoardIssue ( issueContents , config , projectKit ) ;
58- }
131+ // if (!config.isReplaceProjectMarkers) {
132+ // return await overwriteBoardIssue(issueContents, config, projectKit);
133+ // }
59134
60- const issue = await projectKit . getBoardIssue ( config . boardIssue ) ;
135+ console . log ( `>> updating the comment ${ commentUrl } with contents length: ${ issueContents . length } ` ) ;
61136
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 ) ;
66138} ;
67139
68- const processConfigRecord = async (
140+ const processConfigRecordComment = async (
69141 config : IConfig ,
70- projectKit : ProjectsOctoKit ,
142+ readProjectKit : ProjectsOctoKit ,
143+ writeProjectKit : ProjectsOctoKit ,
71144) => {
72145 console . log ( 'Processing config: \n' , JSON . stringify ( config , null , 2 ) ) ;
73146
@@ -81,59 +154,57 @@ const processConfigRecord = async (
81154 return ;
82155 }
83156
84- console . log ( ` - Config schema validation passed.` ) ;
157+ console . log ( '\n - Config schema validation passed.\n' ) ;
85158
86- const repoProjects = await projectKit . getAllProjects ( config . repos ) ;
159+ const repoProjects = await readProjectKit . getAllProjects ( config . repos ) ;
87160
88161 const projectsWithData = [ ] ;
89162 for ( let { repo, projects } of repoProjects ) {
90163 for ( let project of projects ) {
91164 console . log ( `- Getting Project data for ${ project . project . name } .` ) ;
92165 projectsWithData . push ( {
93166 project,
94- data : await getProjectData ( projectKit , config , project ) ,
167+ data : await getProjectData ( readProjectKit , config , project ) ,
95168 } ) ;
96169 }
97170
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+ }
101177
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+ }
107182
108- let footer ;
109- if ( config . footerFileUrl ) {
110- footer = await projectKit . getBoardHeaderText ( config . footerFileUrl ) ;
183+ await updateBoardComment ( boardComment , comment , writeProjectKit ) ;
111184 }
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 ) ;
122185 }
123186} ;
124187
125188async function run ( ) : Promise < void > {
126189 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+ }
128197
129- if ( ! token ) {
130- throw new AuthorizationError ( 'No token found.' ) ;
198+ if ( ! writeToken ) {
199+ throw new AuthorizationError ( 'No write token found.' ) ;
131200 }
132201
133- const projectKit = new ProjectsOctoKit ( token ) ;
202+ const readProjectKit = new ProjectsOctoKit ( readToken ) ;
203+ const writeProjectKit = new ProjectsOctoKit ( writeToken ) ;
204+
134205 const configsFilePath = env ( CONFIG_PATH ) ?? core . getInput ( 'config' ) ;
135206 for ( let config of getConfigs ( configsFilePath ) ) {
136- await processConfigRecord ( config , projectKit ) ;
207+ await processConfigRecordComment ( config , readProjectKit , writeProjectKit ) ;
137208 }
138209 } catch ( error ) {
139210 console . error ( error ) ;
0 commit comments