1+ const fs = require ( 'fs' ) ;
2+ const path = require ( 'path' ) ;
3+ const { Octokit } = require ( '@octokit/rest' ) ;
4+ const octokit = new Octokit ( { auth : process . env . GH_PR_TOKEN } ) ;
5+ const surge = require ( 'surge' ) ;
6+ const publishFn = surge ( ) . publish ( ) ;
7+
8+ // From github actions
9+ const ghrepo = process . env . GITHUB_REPOSITORY || '' ;
10+
11+ const owner = process . env . CIRCLE_PROJECT_USERNAME || ghrepo . split ( '/' ) [ 0 ] ; // patternfly
12+ const repo = process . env . CIRCLE_PROJECT_REPONAME || ghrepo . split ( '/' ) [ 1 ] ;
13+ const prnum = process . env . CIRCLE_PR_NUMBER || process . env . GH_PR_NUM ;
14+ const prbranch = process . env . CIRCLE_BRANCH || process . env . GITHUB_REF . split ( '/' ) . pop ( ) ;
15+
16+ const uploadFolder = process . argv [ 2 ] ;
17+ if ( ! uploadFolder ) {
18+ console . log ( 'Usage: upload-preview uploadFolder' ) ;
19+ process . exit ( 1 ) ;
20+ }
21+
22+ const uploadFolderName = path . basename ( uploadFolder ) ;
23+ let uploadURL = `${ repo } -${ prnum ? `pr-catalog-view-${ prnum } ` : prbranch } ` . replace ( / [ \/ | \. ] / g, '-' ) ;
24+
25+ switch ( uploadFolderName ) {
26+ case 'coverage' :
27+ uploadURL += '-a11y.surge.sh' ;
28+ break ;
29+ case 'public' :
30+ if ( ! prnum && prbranch === 'main' ) {
31+ uploadURL = 'https://pf-extensions.surge.sh/' ;
32+ }
33+ else {
34+ uploadURL += '.surge.sh' ;
35+ }
36+ break ;
37+ default :
38+ uploadURL += `-${ uploadFolderName } ` ;
39+ uploadURL += '.surge.sh' ;
40+ break ;
41+ }
42+
43+ publishFn ( {
44+ project : uploadFolder ,
45+ p : uploadFolder ,
46+ domain : uploadURL ,
47+ d : uploadURL ,
48+ e : 'https://surge.surge.sh' ,
49+ endpoint : 'https://surge.surge.sh'
50+ } ) ;
51+
52+ function tryAddComment ( comment , commentBody ) {
53+ if ( ! commentBody . includes ( comment ) ) {
54+ return comment ;
55+ }
56+ return '' ;
57+ }
58+
59+ if ( prnum ) {
60+ octokit . issues . listComments ( {
61+ owner,
62+ repo,
63+ issue_number : prnum
64+ } )
65+ . then ( res => res . data )
66+ . then ( comments => {
67+ let commentBody = '' ;
68+ const existingComment = comments . find ( comment => comment . user . login === 'patternfly-build' ) ;
69+ if ( existingComment ) {
70+ commentBody += existingComment . body . trim ( ) ;
71+ commentBody += '\n\n' ;
72+ }
73+
74+ if ( uploadFolderName === 'public' ) {
75+ commentBody += tryAddComment ( `Preview: https://${ uploadURL } ` , commentBody ) ;
76+ }
77+ else if ( uploadFolderName === 'coverage' ) {
78+ commentBody += tryAddComment ( `A11y report: https://${ uploadURL } ` , commentBody ) ;
79+ }
80+
81+ if ( existingComment ) {
82+ octokit . issues . updateComment ( {
83+ owner,
84+ repo,
85+ comment_id : existingComment . id ,
86+ body : commentBody
87+ } ) . then ( ( ) => console . log ( 'Updated comment!' ) ) ;
88+ } else {
89+ octokit . issues . createComment ( {
90+ owner,
91+ repo,
92+ issue_number : prnum ,
93+ body : commentBody
94+ } ) . then ( ( ) => console . log ( 'Created comment!' ) ) ;
95+ }
96+ } ) ;
97+ }
0 commit comments