@@ -93,7 +93,7 @@ private static int execute(String[] args) throws Exception {
9393 Map <String , String > attachmentUrls = new HashMap <>();
9494 if (body .contains ("(attachment:" )) {
9595 try {
96- attachmentUrls = publishPreviewsToBranch (previewDir , repo , prNumber , token , !isForkPr );
96+ attachmentUrls = publishPreviewsToBranch (previewDir , repo , prNumber , token , !isForkPr , arguments . previewSubdir );
9797 for (Map .Entry <String , String > entry : attachmentUrls .entrySet ()) {
9898 log ("Preview available for " + entry .getKey () + ": " + entry .getValue ());
9999 }
@@ -258,7 +258,7 @@ private static String nextLink(String header) {
258258 return null ;
259259 }
260260
261- private static Map <String , String > publishPreviewsToBranch (Path previewDir , String repo , int prNumber , String token , boolean allowPush ) throws IOException , InterruptedException {
261+ private static Map <String , String > publishPreviewsToBranch (Path previewDir , String repo , int prNumber , String token , boolean allowPush , String previewSubdir ) throws IOException , InterruptedException {
262262 if (previewDir == null || !Files .isDirectory (previewDir )) {
263263 return Map .of ();
264264 }
@@ -302,6 +302,9 @@ private static Map<String, String> publishPreviewsToBranch(Path previewDir, Stri
302302 runGit (worktree , env , "checkout" , "--orphan" , "cn1ss-previews" );
303303 }
304304 Path dest = worktree .resolve ("pr-" + prNumber );
305+ if (previewSubdir != null && !previewSubdir .isBlank ()) {
306+ dest = dest .resolve (previewSubdir );
307+ }
305308 deleteRecursively (dest );
306309 Files .createDirectories (dest );
307310 for (Path source : imageFiles ) {
@@ -320,11 +323,15 @@ private static Map<String, String> publishPreviewsToBranch(Path previewDir, Stri
320323 log ("Preview branch already up-to-date for PR #" + prNumber );
321324 }
322325 String rawBase = "https://raw.githubusercontent.com/" + repo + "/cn1ss-previews/pr-" + prNumber ;
326+ if (previewSubdir != null && !previewSubdir .isBlank ()) {
327+ rawBase += "/" + previewSubdir ;
328+ }
329+ final String rawBaseUrl = rawBase ;
323330 Map <String , String > urls = new LinkedHashMap <>();
324331 try (var stream = Files .list (dest )) {
325332 stream .filter (Files ::isRegularFile )
326333 .sorted ()
327- .forEach (path -> urls .put (path .getFileName ().toString (), rawBase + "/" + path .getFileName ()));
334+ .forEach (path -> urls .put (path .getFileName ().toString (), rawBaseUrl + "/" + path .getFileName ()));
328335 }
329336 deleteRecursively (worktree );
330337 return urls ;
@@ -444,19 +451,22 @@ private static class Arguments {
444451 final Path previewDir ;
445452 final String marker ;
446453 final String logPrefix ;
454+ final String previewSubdir ;
447455
448- private Arguments (Path body , Path previewDir , String marker , String logPrefix ) {
456+ private Arguments (Path body , Path previewDir , String marker , String logPrefix , String previewSubdir ) {
449457 this .body = body ;
450458 this .previewDir = previewDir ;
451459 this .marker = marker ;
452460 this .logPrefix = logPrefix ;
461+ this .previewSubdir = previewSubdir ;
453462 }
454463
455464 static Arguments parse (String [] args ) {
456465 Path body = null ;
457466 Path previewDir = null ;
458467 String marker = null ;
459468 String logPrefix = null ;
469+ String previewSubdir = null ;
460470 for (int i = 0 ; i < args .length ; i ++) {
461471 String arg = args [i ];
462472 switch (arg ) {
@@ -488,6 +498,13 @@ static Arguments parse(String[] args) {
488498 }
489499 logPrefix = args [i ];
490500 }
501+ case "--preview-subdir" -> {
502+ if (++i >= args .length ) {
503+ System .err .println ("Missing value for --preview-subdir" );
504+ return null ;
505+ }
506+ previewSubdir = args [i ];
507+ }
491508 default -> {
492509 System .err .println ("Unknown argument: " + arg );
493510 return null ;
@@ -498,7 +515,7 @@ static Arguments parse(String[] args) {
498515 System .err .println ("--body is required" );
499516 return null ;
500517 }
501- return new Arguments (body , previewDir , marker , logPrefix );
518+ return new Arguments (body , previewDir , marker , logPrefix , previewSubdir );
502519 }
503520 }
504521
0 commit comments