From 8b6aeab4d90be986fb67e4ec117b524622c8e349 Mon Sep 17 00:00:00 2001 From: delarea Date: Thu, 23 May 2024 14:27:57 +0300 Subject: [PATCH 01/10] Add command summary docs --- .../jfrog-cli/cli-command-summaries.md | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 jfrog-applications/jfrog-cli/cli-command-summaries.md diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md new file mode 100644 index 0000000..ebdb029 --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -0,0 +1,117 @@ +# CLI Command Summaries + +## Overview + +The command summaries feature allows the recording of JFrog CLI command outputs into the local file system. This can be used to display a summary of the executed CLI command. + +Each command execution that has implemented this feature can save data files into the file system. These files will then be used to create a summary markdown. + +## How to use? + +To use the command summaries, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. + +After that, supported commands will start saving data files to this directory, along with markdown files. + +### ⚠️ Notice: Delete your files after multiple executions + +The CLI doesn't delete the files itself as they need to persist after more than one execution, so note that it is your responsibility to clear after you in your pipelines. + +## How to implement? 👩‍💻 + +If you'd like to implement your own summary, you can follow these steps: + +1. Implement the CommandSummaryInterface +2. Record data during runtime + +#### Implement the CommandSummaryInterface + ```go +type CommandSummaryInterface interface { + GenerateMarkdownFromFiles(dataFilePaths []string) (finalMarkdown string, err error) +} + ``` + +#### Record data during runtime +```go + // Initialize your implementation + myNewCommandSummary, err := commandsummary.New(&MyCommandStruct{}, "myNewCommandSummary") + if err != nil { + return + } + // Record + return myNewCommandSummary.Record(data) + ``` + +The function `GenerateMarkdownFromFiles` needs to handle multiple data files, which are the results of previous command executions, and produce one markdown string content. +As each CLI command has its own context, that's the reason each time we need to reproduce the entire markdown with the new added results. + + ### Example Implementation ✍️ + + +```go +// Step 1. Implement the CommandSummaryInterface +type CommandStruct struct{} + +type singleRecordedObject struct { + Name string +} + +func (cs *CommandStruct) GenerateMarkdownFromFiles(dataFilePaths []string) (markdown string, err error) { + // Aggregate all the results into a slice + var recordedObjects []*singleRecordedObject + for _, path := range dataFilePaths { + var singleObject singleRecordedObject + if err = commandsummary.UnmarshalFromFilePath(path, &singleObject); err != nil { + return + } + recordedObjects = append(recordedObjects, &singleObject) + } + + // Create markdown + markdown = results.String() + return +} + +// Step 2. Record data during runtime +func recordCommandSummary(data any) (err error) { + if !commandsummary.ShouldRecordSummary() { + return + } + + commandSummaryImplementation, err := commandsummary.New(&CommandStruct{}, "CommandName") + if err != nil { + return + } + + return commandSummaryImplementation.Record(data) +} + + ``` + + + +## How does it work? 🚧 + +Each command that implements the `CommandSummaryInterface` will have its own subdirectory inside the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY` directory. + +Each subdirectory will hold data files, each representing a command recording, and a markdown file which has been generated from the entire data files. + + +``` +JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY +│ +└─── Command1 +│ datafile1.txt +│ datafile2.txt +│ markdown.txt +│ +└─── Command2 + datafile1.txt + datafile2.txt + markdown.txt +``` + +The user-implemented function will take all of the data files inside its subdirectory and will produce a markdown string. + +#### ❓ Why do we need to generate markdown from all the files every time? + +The reason for this is that the CLI commands execution does not share a common context, and that is why the markdown file should be generated every time, assuming it is the last command that will run. As we can't know for sure when the last command will be executed, every time we call record, we also have to generate the markdown from all the existing files in the directory. \ No newline at end of file From aef9bd00b33a1842a3c9f08a227b8eb14ab98499 Mon Sep 17 00:00:00 2001 From: delarea Date: Thu, 23 May 2024 18:15:49 +0300 Subject: [PATCH 02/10] update docs --- jfrog-applications/SUMMARY.md | 1 + jfrog-applications/jfrog-cli/cli-command-summaries.md | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index 9ebec77..e7493bf 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -37,6 +37,7 @@ * [CLI for JFrog Distribution](jfrog-cli/cli-for-jfrog-distribution.md) * [CLI for JFrog Pipelines](jfrog-cli/cli-for-jfrog-pipelines.md) * [CLI for JFrog Cloud Transfer](jfrog-cli/cli-for-jfrog-cloud-transfer.md) + * [CLI Command Summaries](jfrog-cli/cli-command-summaries.md) * [JFrog CLI Plugins](jfrog-cli/cli-plugins/README.md) * [JFrog CLI Plugins Developer Guide](jfrog-cli/cli-plugins/developer-guide.md) * [IDE](ide/README.md) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index ebdb029..754a06f 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -4,9 +4,13 @@ The command summaries feature allows the recording of JFrog CLI command outputs into the local file system. This can be used to display a summary of the executed CLI command. -Each command execution that has implemented this feature can save data files into the file system. These files will then be used to create a summary markdown. +Each command execution that has implemented this feature can save data files into the file system. These files will then be used to create a summary markdown aggregation. -## How to use? +It's important to save to the filesystem as CLI commands does not share a context. +That's why each command that record a new data should aggregate the previous data if exists to the aggregated markdown. +And becuase the CLI doesn't know when a command will be the last command to be executed inside a seaquance of commands. + +## Notes for developers To use the command summaries, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. From 69091d5ac9fa7e013a3dba4a9075e9605b264559 Mon Sep 17 00:00:00 2001 From: delarea Date: Thu, 23 May 2024 18:28:02 +0300 Subject: [PATCH 03/10] CR --- .../jfrog-cli/cli-command-summaries.md | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index 754a06f..fb5219e 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -2,27 +2,29 @@ ## Overview -The command summaries feature allows the recording of JFrog CLI command outputs into the local file system. This can be used to display a summary of the executed CLI command. +The command summaries feature enables the recording of JFrog CLI command outputs into the local file system. +This functionality can be used to generate a summary of the executed CLI command. -Each command execution that has implemented this feature can save data files into the file system. These files will then be used to create a summary markdown aggregation. +Each command execution that incorporates this feature can save data files into the file system. +These files are then used to create an aggregated summary in Markdown format. -It's important to save to the filesystem as CLI commands does not share a context. -That's why each command that record a new data should aggregate the previous data if exists to the aggregated markdown. -And becuase the CLI doesn't know when a command will be the last command to be executed inside a seaquance of commands. +Saving data to the filesystem is essential because CLI command executes in separate contexts. +Consequently, each command that records new data should also incorporate any existing data into the aggregated markdown. +This is required because the CLI cannot determine when a command will be the last one executed in a sequence of commands. -## Notes for developers +## Notes for Developers 🖥️👩🏻‍💻⚙️ To use the command summaries, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. +This variable designates the directory where the data files and markdown files will be stored. -After that, supported commands will start saving data files to this directory, along with markdown files. +### ⚠️ Notice: Delete Your Files After Multiple Executions -### ⚠️ Notice: Delete your files after multiple executions +The CLI does not delete the files itself as they need to persist after more than one execution. +Therefore, it is your responsibility to clean up your pipelines. -The CLI doesn't delete the files itself as they need to persist after more than one execution, so note that it is your responsibility to clear after you in your pipelines. +## How to Implement? 👩‍💻 -## How to implement? 👩‍💻 - -If you'd like to implement your own summary, you can follow these steps: +If you wish to implement your own summary, follow these steps: 1. Implement the CommandSummaryInterface 2. Record data during runtime @@ -33,8 +35,8 @@ type CommandSummaryInterface interface { GenerateMarkdownFromFiles(dataFilePaths []string) (finalMarkdown string, err error) } ``` - -#### Record data during runtime + +#### Record Data During Runtime ```go // Initialize your implementation myNewCommandSummary, err := commandsummary.New(&MyCommandStruct{}, "myNewCommandSummary") @@ -45,11 +47,10 @@ type CommandSummaryInterface interface { return myNewCommandSummary.Record(data) ``` -The function `GenerateMarkdownFromFiles` needs to handle multiple data files, which are the results of previous command executions, and produce one markdown string content. -As each CLI command has its own context, that's the reason each time we need to reproduce the entire markdown with the new added results. +The `GenerateMarkdownFromFiles` function needs to process multiple data files, which are the results of previous command executions, and generate a single markdown string content. As each CLI command has its own context, we need to regenerate the entire markdown with the newly added results each time. + +### Example Implementation ✍️ - ### Example Implementation ✍️ - ```go // Step 1. Implement the CommandSummaryInterface @@ -91,13 +92,13 @@ func recordCommandSummary(data any) (err error) { ``` - -## How does it work? 🚧 + +## How Does It Work? 🚧 Each command that implements the `CommandSummaryInterface` will have its own subdirectory inside the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY` directory. -Each subdirectory will hold data files, each representing a command recording, and a markdown file which has been generated from the entire data files. +Each subdirectory will contain data files, each representing a command recording, and a markdown file which has been generated from all the data files. ``` @@ -114,8 +115,11 @@ JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY markdown.txt ``` -The user-implemented function will take all of the data files inside its subdirectory and will produce a markdown string. +The user-implemented function will process all of the data files inside its subdirectory and will generate a markdown string. -#### ❓ Why do we need to generate markdown from all the files every time? +#### ❓ Why Do We Need to Generate Markdown from All the Files Every Time? -The reason for this is that the CLI commands execution does not share a common context, and that is why the markdown file should be generated every time, assuming it is the last command that will run. As we can't know for sure when the last command will be executed, every time we call record, we also have to generate the markdown from all the existing files in the directory. \ No newline at end of file +The reason for this is that the CLI commands execution does not share a common context. +Therefore, the markdown file should be regenerated every time, assuming it is the last command that will run. +Since we cannot determine when the last command will be executed, every time we call record, +we also have to generate the markdown from all the existing files in the directory. \ No newline at end of file From 27dfc559219036d62e95039d938b1da9c80cb52c Mon Sep 17 00:00:00 2001 From: delarea Date: Thu, 23 May 2024 18:49:55 +0300 Subject: [PATCH 04/10] CR --- .../.gitbook/assets/build-info-summary.png | Bin 0 -> 11547 bytes .../.gitbook/assets/jf-build-scan-summary.png | Bin 0 -> 9762 bytes .../.gitbook/assets/jf-scan-summary.png | Bin 0 -> 36891 bytes .../.gitbook/assets/rt-upload-summary.png | Bin 0 -> 25198 bytes .../jfrog-cli/cli-command-summaries.md | 24 ++++++++++++++++++ 5 files changed, 24 insertions(+) create mode 100644 jfrog-applications/.gitbook/assets/build-info-summary.png create mode 100644 jfrog-applications/.gitbook/assets/jf-build-scan-summary.png create mode 100644 jfrog-applications/.gitbook/assets/jf-scan-summary.png create mode 100644 jfrog-applications/.gitbook/assets/rt-upload-summary.png diff --git a/jfrog-applications/.gitbook/assets/build-info-summary.png b/jfrog-applications/.gitbook/assets/build-info-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..27f5de3d6d32b7510c0f7798d6c791f27357ef59 GIT binary patch literal 11547 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 literal 0 HcmV?d00001 diff --git a/jfrog-applications/.gitbook/assets/jf-scan-summary.png b/jfrog-applications/.gitbook/assets/jf-scan-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..64d202218f48596d01f712441c43cc3897a7bb8e GIT binary patch literal 36891 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 Q8wMcoboFyt=akR{0Ange^#A|> literal 0 HcmV?d00001 diff --git a/jfrog-applications/.gitbook/assets/rt-upload-summary.png b/jfrog-applications/.gitbook/assets/rt-upload-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..6de870ffd5943bfad883abc7b8be2d8b00c10909 GIT binary patch literal 25198 zcmdqI1yCK&yY~r%1PJaVXmEG;;4Z;EXo9=D1%g9x5AG7&3GRAucX#)l!|#9Z{ombp z-+FgztG0HjbBZ}LEz{jkKhw{rzw=W;P8{+5$M+Br5QvfzB3~dNARU2k8SFdYj5TyT zDFnp(N>gEB1xaCHA_Y5Z6H^Og2ndOvaS1TWN|M;UJ1v({C`3L!v12JjX%Jt8kTWl- zsXxJ?NCo?j9rmriFL{eKe za`0mH%Nde&X@xmy`hMo+rMTa&-qZpj6C%Kn%k&T%}C z6OXWzE(VOZlIJ_;E!sOfSFt60WJe4KTTEnzljuUtWai(7cSg5Zw%I0$NgHhIj|ncA ze#f|cZY(yU|7_<&nx1km5%wKc`+L*v zc3c-od5DPyjlD^DJ84WKc-J$yJ=S-2ll83R8J3N~Ci*7&Z`&_h()h5f{Y{QZa$HQ7 z6Es8db|g2;4pVQs;~~c4k$oooT{A}bAt+rTs-6Cbc7$mVy4}OP3HI@8MvaYj_G4#+ zAeZoBZ-=ZW(s+RIMu8&!E7krEj_57yXL5CTc3%$#SSO#QOsGQ`7{NE32oZklHt$nm z68<`l!5{ks2_pRXE6s>R{ucxKGiNY@;wNK?Hxq$jpWuU$xIPm^5n@1#3Nb10b_I!y zX?|x>hQ$=dRA2+aJ|Uz9j0mg!=HKOKg$)<7&Xi|-PyYA3;$sO6!;d}2H`jr}tC%*t z%^yd6FIFvWK4`xo^wV0qICZ>5qWz)QfllcYBSe+Osz^@BJ%G3s86wpEJD}jI07{vv z=-pJJ`CX~qzDRWC&^=`M-f@SZS* zdkPG~n67ci$)V6A`@1#`rI;KO(G#T;c@p)9NU=gyy7mn%E0<>_EQp;DYhjzP7yS5w zjyjR_DQq}XnMZJTf-ib2ZT9Ltw7HH^j%mvXIl>-%5<1LR=}yycDR~JqLK(UVyE6XX zY-DWY!!kqb`0@SCX#Zq{UW;x9haZp7m({bx$BahJ(D**eL(78Mm0 z9TiWZAXPd@tdO~o~lCI)THX9Zlv3?P$(NQ-WijT1$~j?5^IqB@at3GZhw7$h0*k& z@<3|rhp42e+=1l5`@y_EtbT&n7HS^ipkI@}E}}O2w)*j-nus_=L=|fat(4gvS!&|l zesa@B#?2&r8=x4#9w3ZAi6&HwQmXg@tJL?UK$)|YNL7StpNbjt7iJv|fl71nt*P%k zR1eg#UnzVt_9cT$d9^~n=+9#1Oi-4C_}(vO**Re@N!NV4lygJO>X2xuOsTv9{y1rB zL-;LhZdxM-T6GtPwKpp2Qxa?vj^X=|Q&v-OY>sRUY`&Te^KWaI97P?muSBlUu2}Z7 zKPn?qAf}7`?9m9vW_|n7KVF6=TPG*nyvWSWJcPBF&7C#B`m#o-#;!)Qn!p^rW^dkh zo@_pCeuMiXx3uH*KIo9!FMr&M0Vf+NRZuz zUENZ_&}IR}T!KS}dC`2<92!>xmkdYc;}YwSaLX{)9{2DEEPbpwx^;#k4c4zh%=(E& ziL6No$<)dBN!!V_Nv)bCRh(vLBi%ZoZOIxbWGPe0e5?s9H%y~!Cyd^P`bK|i3##ia zC2KFM7r)L~-OUfohM3ok?x(X&xfNbv9mpLpu-CE+rI@5BYT+;7EKn~%HuCcM=!&!% z1XbGCEPQnyIL>Yf_iTJpd=S8s!HdB|;tr!7*Xz*v(qz=9I2gU9enjb%#nsLEv`gwV z?O?(+!zti6?zC19YT*5b!;JPJ2&Y_oSUa$cLVKlYuBp_XXD7n$#*V?}wO7h4~%_I)2cs7hZ*-#Fh^{JDIQ{CzxL`eKZq z{7*@){)7#RGlsmPe3RU3xUjc(P-kWjQ%!1-@ScH=rV8^R)z=QLIfDCGAA(!a5luLa zl}$YQ5C(bU$x^yU_ea>3u+0x9}W~?-M>LV)4-1w^bojiBm9U;2n z{@`%4w3roHjIG`iE7P#DJ#HFaOW`>OowIKvdhT55D78AYGJ1av?Tmj~$!^>6T&bF} zGryZIf1B!O9%vGn8<-I~D>~!F`11QO$a-PD_R6AeuGJdG3C6p3DQ$!YH^ey9J|xJA zZfQzWh=z*Nwa$I&xHwle_u&TRCipsd@Nr;%&~d;y*1Jripk8TDbM8y7W=+lhlkUj! zvnTyS@=fs(!{W=H_;Tb;QA?4Q`K6f@@>gUdJQr15)rBkcr~Dr7xWwo%kg96R*@DbJbU(ksycsfbTQ<$fifm|Ra`aKF0Wa-SX{rgrVVrP z*vi>h9eO<8{T@+CLuL@suJ>d*H5esZkyfL3*KHl^-sN`hJ{u@3zE+dh&DJw-va)Zf zS!jIdLOj5waIP$fUd6ys(htP}8ZD}ZQ4U&$H%TTb)lKj8^PO;~_T0PM# z0!os;Km@XK(j)nBTtP&UKxSS;32O6esg2^WKF~1=uL_)59Pt^lL*U^+5E&stcyT~b zmJ1GOie#W63PQX+n4ed;A989gPh`{CQ8(2F!@DUS(EBepBf9})R z#q_^wvaA?SABlEA!|9-2dB1F)=g0xuP{U37J^z~hDDTbUMF1J8b7AM&*GhF10s_d;sgQ~a#u-zu zUl4Fn5OC12zBXz+rE6=!VPSUo=PA$71L}&!(OCG~fBw`2-6^o1!o={sp81q1nnnpO$p_lcA3~ImvnRUc^@6NV z)`$S~YZ1gy7*|9eWt;-RsVMg!alr|EiHHRik+c39slDdT8fp8dzWhC4 zVWTF0t_%+DGo*L1&(ca@mBC35v=7Sp`k09kwmXB_;&vruAV$7E!Gemq0EZ?1fq4TT zXSx{ukDJ41M@!NWDQX3^ohNP2d0CF%(h2mlwT{Ic!ySp0hBkLwYG1bo;&gMrWnF(l zDXX=QP~q@sT3Y7EtWX9z#1OW+KaZc42LG41@mCks_gSTEl(UUUT59wizLp25WmXub zy@;Zt(QTrdE2z5@T$mJ8-gwwZ6$YD`C59g-KtKD{WP1X!b!L@g#AZgg&3Vb?l4p1E zkhvoS-Q2j--Mx@nU(R42Z<;XO%y%M+)7YW~zoUQuCEGHw?bFgzcx@2**+7|=x_j}9 zVi;datN5L-&hDanW^(0?UsbOlUcvj$`x=4l+c7VZAi^2qeKon%t~uS%;5+uSm2}T{ zPY*Y}$B!PD%594{z=#5srkLz+sjzdV3OYJs;vvC&aYGamGZ7FG7yn&t!=UPQ$Arb8 z>65|!7?SGurr^&43g!o2vlM56UOm?%m6GQ*cUtw^568_1BVx)wkO?Dl2jdNn8Z90x zw#66iPg=su2IXHw^`2qo4rcVbomcd``l5TTXvlSa%dx$)%b#LfuvoqgvzE0y_Z+x5 zjo9~`6_>aCzcW74G&9nV{sstvAj2>(;&scUtwh4&W5 z(B)Z+%tBr!<)1LKQEV|*EfjXzEN74|9*9-T$ z6Q0YS3P;=w$i0?tS;`vksV$|Q$R%nSt`*T0~E zl5Tx4p1#vCl0O8$DE)1QS5f!N&1BvO(^0+?UW>Uu-JDj`>xJ6=EIW5QOct|@%~#u6 zF8loy(b3VqFoa$b*a^wWMfb5G=YQ;m73%q(yHJ0~p6N9?l@e6t&3BsvZsABc({ek3 zn#Ur7TSP0ig2uRn;xGJYn~&?ow*K?uom(x}-T+Od$DAF>Q7Ma+=;zOnUt&3zc%Muh z(P70cElYLHsNDOo6Jo!1euEFcTo%FdJPTx}GjbSg4=P#~SbCyxP_l(H&dqJ)yIJ-o zY}IMTDI!L|;S|(MxmdJ!GokfcY_Ly0o;>q>*f&Rf(YWj;=Dl3?zX$aadX}_tSTBc# zdO4#$Utdmg?$qs2+N+W3CSEkRvOn~<5lsyHACpPPuTIMIGle**9S28~Tn^LmE*4oE zb(kH_R*Dh)lxe#&Ib3NY)M<3;zT(g>KiXJ6w^l|$22b4p!4wglAxd^}x_x3ZMRS#i zV(ANohCLeP1pF_^QY0e1Q)psASc;)&NcmN&qlamBzY#yt6xWTk?4Ryqq3(YnD@dD+ z7}`#g%g1t%yq!#DYeY2g(`Yfn)b-jkraL#_E-WhQ(2Hvjgq}}P&`~Lco-4CPiqYMV z|4<9vyS9~VSEjiXyeamL?@(nQm5rutGe%mW(2K9H9GdH7AfJWsc_%xP-^`_8halrOqvno@8=HJg2a;frb?91suyZLwS}*}FxE zI^2~*8jFFATeamlH+O$uT;2?Im&$F1k)C)L@TYghFt{p%;5j@9ZZD_ilTPh^|qS!8V z)VsTO$oSkjgR}MeBvwiMOO)mMA~+#*dRB=~Fqbof3LH;=B*RTxb~(D+^tr--<$wd8 zFZ>yxRXF&zj``y~ilzg$UNU;j#o5R2RZ2_v3MA)C0yY#WUmX1#8(d0Sfm&1*@f$OGkqXZz%h-Q=; zdUt%c%Uxfur+ZVLmf8M=k4D?{$T3@=auyjke_M41BKR*Y(*+k`h@w;FXaJ}W)nAXDGLjTd>vYsP(kNqRDBYA@mn-GRdno}x@`yE07 zhcFv;Dhx2w^U%Lf%Ct1j|9H_VBA5-|^Z&fZ7OYH;)dK0`g`%1N?SxrL{$~|Y$G(V4 z8YY>3A*X`ocwR)`Agy;2AMTC7DFna9X(7F|$=XTVO?t#2t%k_K<)nP?hi|FBtvS8D z4w*b<5BF!}lKcv1bn+ubbBt8Zb;;KdE>c3NkgN=k(ZsnB~D2AoV!jf z(&~sCk(2T;qOI-xGS};V;e5q6}ZOn5y}4F^!q^0NPn)qel_H85q+eh!Gg~_YH0&nBD(TgBC z0$ZcEF}BgDz>-S|F7c17pkMNE1mQ9~`a5zGHhMfV6{N=kRWHuNsexs4(FPK{z=-dg z@d1Xt$Hbl2hnDh2{aLdCIy4&EcScV1#R^Wx^SQ&cWfx`E4fHI>_&iQ{RU<8! zw7B2&Tpume6p9X@{w8#u=1k?kXSJ+Lm|_=i`!J99GF=;V2Y4P$`F0FNXBB}8c@7!8 zC3wE|)LXA5H{}94$ZM5egF!EzYrGN#6Qq;rd}&wWqMMZ$pJzA*8d-W3c2f;F^pLgO z1ihZVU*cIJrPCh-j!Td}ucA3>SdRcJLljQvc_XjrULSD;g!VlAw=Qd6x#&Mm!N8cY zRFLnWTw@c0XufKOkP4NiR~BhJmuq=->o_le_~S>vX!PS{DnYNPW>dZf!?1X={7Z4b zVp5Q%4iQTXFp*#(mA>ucPZ+2Ik8Gfx)o8&K)ixK}IBcLfz{f+VomDX**X>w0?@Y2> zoeI1V51@pc6nQ#oI9X+o=lhU_GiM22C7&Wg<^62*b_gncT^)~+qkysq^4O89LVkg~JG;~5P#feb5vp~r}=aIAR3cNi*-U3ni1o=1g#>S*=4hNIT+>`pko zVB<|;J=G??#*NH6bVZbBkpthNmn;#bXv@yqDwLTEBjuBou*5RrT{>j<1YZ9qnn;V( zsdKbMfAFnyrwa;(G#*0C-Q0VVQ0LaA|C~`K=qejM7M_cEG4pdz;P>BuqZQ3;f!0{3 z05WVu5XtDb-nX+5U8p=tD-KueZ+1YUT^kRUI`Z$6(@{*Xd+$oP1esqtB+&^A?uOeK z!S;EOW#B^e#q&w!(NTW|;ehZoCd0vz*ISdR)?qU}>>FG|Hkbv~SpUU47KP{+bmCub z>{0}CRBzxsz5Lf@;iKDj6}xWu5r4iRXO-%F^V*GM-~n0hvFwZb)F`k{nk{xTv_l`f zLooL)GppmtDqK`l^oKvZ^W8xz(x&HQn_Ew6lq0uAkP~t3gJiHmmbuzlZNPl88Qrd= zvAb{B-(CzAB}G`KVF?KV%SN<2CeHffPQ!^a=+_qb`4nb(O-NF#r8)2Hd-Zwk{P`wn z?q`wB<2axksZpv3hr_sGu1;*A&y$#)?mK<5Vig{Ck=R=TZ!m59mgzw~8(k;p@ip$q zK>wb$@AmyV1e3<*Wa(zNSl?`6fxCvVu8ByiRx0YLaVapn&V`R#Hi4 zxyb%$|1SU9TJ|qj-iYHxWS!pSvhp1-m*QTBV}@!A%B?0DQpub_t?FLe6EA5IJ?)<0 zY;cZ}1-vwnAo77rq~6ExUR#~NiDp0lh)};pqhq{vY+)>aQnY?mwL5D?@sUQI^z+KW z_U~!M@NjwLnZ0hB=zN>U*c+4u%K}^1UC*}N+xt0xP~G`9=yWD9)_(TV(CBNx>vWN5 zuP$}od3g}t+}YXieo?oc-VNp#?Q&K%(8-O*sC_B-kJv>%c%31&Xs~@rjm47@=Wog= z+azD78-}lsPX5R^$v>f7ypJi%m2BIi-%=BNMCsp67R5r1T>;DA{kgTJ^%IuTm+;b- zG=UA^teHp9GF644zYy{#;ZlaDuT?8wLsueSRaC~|MEU%%_|PLjT30UFQ9HNvA;7_MApf9sV-cN85hCxSYPp^>gccC zcy~!V&6Q;&fRy6UP+veP_A!;_YyR)nvuaL$FWf#vJ9NC&{mGqXgtLqD2?*K+p&-qb ztOq2;I&FjZxYZY?2JKZ@d5@UnC_WI3pF+V!2|}PSI_4c)%Q4fMd0+AW()BI<9yAj{ zyGu#}@oY9H0yHiXS_ae6+b#yx1a78@rNf}RwqeEvdTavTA!huGfs8y5qC~$Yv5i5+ zGU>LRX$=hyK(KH{Lx+E8!g1=0&b;mfqMrnte>rA$S?5|a8)Uz6`dc?kg*(NO4@54Lx}4TkubX333; zi&TN zTpH2E`Zv%G7v%b@dI10UHn?`&v}Map|$?z^z}SsWo*3tYZ_ojf;Al zrwgDF63^IZQ7bF(hah8JMg3G7%IyO?*iMA_QQ>qLZF)HRaGW{L1-$zl8>Ut+JwRp- zL%=|cK|;%*Ulmj61qKJhX7}r3g-*=7RkFzuM5u$<;A#lU7LKkvsg}GQKiH>WU1ntP zVb)wrSyjyuWkkSU$3O)H27clt z|A19Pz~>377MpSsc=(J_>PZ+8B4p|JQ))zH4cQvkbQkEVzu>NlLIp;XCq^3Rte7C( zA0Sk<1M;aUZs2kC(LI6BJ?H18heN>uB_<*b2PC1K&=JO2yv zA#~|etA4{{`e%jp6$?@cPrkRehq&1NTNpkcnlOwBFs;=L_JnUnlb*FR6 z4T-fkRVtf!*HVdG1>Qf-+6`*DAn~@Bn3!0rJNy3;vZr>0$Kr%Q-}d;vM7v?4_)^A* z-T?dxqY>TK0FLtNrMak`W6#mDrGUx#y?1CE-_s@2j7!!NoX7Q@P;h~CRLV`BY>LfP+^>Z;gK5A?`LOd*mR56pEw}AJ z`{3WTIT9Qm?%$GyMU>pD8B4J-CW}kk*)?C z8ynvv1-+qadH0E=iZClXTS2oPo2Km%Cls5mT^`psx#~^yxB?}2s5gu5*4YPZYisJ4Ti#JEUihjWH~3;< zc&6HI2J4u&Zf6|#^YU}%O!m_<8}kR&%@N;rc)#Jb-Oro5ter6IZy3MmL}1diO*)P| z%``vq-9;mwQXUQ+RM=fnr^(IRU9rvVZpfu^e=vP{e0dIIXnP*`7pEdQ^4cin_;iFC zLFj!C7xU|vqpkC@BX;YZQ)QVrj?~JJbeAke6{W`)n*~etMhB`xC!XiCbAjr+t;Y)n z#&c#c{qy>V{uN}*VAZ5{?^XQfrN&P}w-Wmj`B}Zmm8W)dTVMWJ4sX5%pNxltxJ1>W z7z;Grf1j}3d8ko!8l+_{9PU=1Jl#+g{nwy!6`+3+r>C$(|Azm9>6S1>K*iKFOc!Sq zmxaBA-rC;M%kC#l$S_EF?KNt8{y~IpuuaY+O8|MkgS2B6EeqZb_# z@VOg2&V3_cV|#0BYn#YtkA;SguBfaYfOx>M`UBS*Bq}NsGq#R)cVVV>10^-PP#Ket;L)H9tY-`a@l6m z#p4AIy9Lg&+XWr()#k6hzP@&UWPzMeX<1nnPbpDXjRq6SMFQ`2*v{?Srg?_}s{D4d znxY-tl?J&pV7ns|9}WQQx*Eno!-_%QL(!aa4^@J$4Xgw2BV_zKRevTXeh0-Kb^5M* zP?Cu!PGwDK#7Vf{tXlM5<3~jfo0tcDZEyE2I>c!{eS}ZsuqN0Z%_#qt@~f;FZ7_k3 zV`7l8;ihdii267 z&FN5`BvK@A#e?PgWF?Ybr)m8jw@hv0o1*7=MB8IylpbHqOZd#ncV&9;qJKWORXb7ORzhaavBO=?mS>OHQNpuYZZFB@9yZe9G}UX^(G=jV2~Y21z4Nr8jmvQ`n_QeE?+RlRD0 zZKP3t5ci=4tcAC=DL!@Jgd8t59oWmBCE$(*5k6@pI8GVylTNkYBEvaA04}akr$u2? z0gC*yhQ7#O{Xrc>tw1z8bLjopK8;wLS@ZqacAhomZS0`Qtn+GF&<)1nxMN6rFqeps zkPsAmu?kihQC3o7Y(UJqfnjYkJ&%^2*HxSvQHGLucn3O5hQjr&JAxuM6P8vLO-^pE zzH{q+uC2rOJoqbV_Jd&=;uzvxJ#5@gL}4n$Ybz4uOF z2uH+Y)&&&l=;(MAc56M-Ng>e~GXzsC_RpiL3;w9meR0@-IVC=H+^3{1(cSIr5E=6A zV1_YM&QTqH?C3PRbk=Gl7NU2$HZM=}8yb>X%pbxhCJn{*UMNs^&74&#P08TBqvmTW zEi0S8Hg(0Jx;{IsF~8#8|JWOioi%M-J~?=He|3<5bZJ0gZ61}>#48aW6lK>L71W4G z7~`h&oFy7+b52EZkYnBa+{mGkEJI=m#Is7sQR1tQ@FO#in`=8^TGp1a@;L7|e*Plg z)59@%Zyxc&W52V{JNkU|;fj`2wyp_4SRdmC0aW07{b?*O$<46_@ug0guL5@x#(%;b zrBH^}?G3~eQMKIYvT*lM?{{;r%i z≫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 Date: Sun, 26 May 2024 11:11:30 +0300 Subject: [PATCH 05/10] Update --- jfrog-applications/jfrog-cli/cli-command-summaries.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index d52e759..fcde125 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -41,10 +41,11 @@ This action employs the compiled markdown to generate a comprehensive summary of To use the command summaries, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. This variable designates the directory where the data files and markdown files will be stored. -### ⚠️ Notice: Delete Your Files After Multiple Executions - -The CLI does not delete the files itself as they need to persist after more than one execution. -Therefore, it is your responsibility to clean up your pipelines. +### ⚠️ Attention: Files Remain After CLI Execution +The CLI does not automatically remove the files as they are designed to remain beyond a single execution. +As a result, it is your responsibility to you to manage your pipelines and delete files as necessary. +You can clear the entire directory +of `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` that you have configured to activate this feature. ## How to Implement? 👩‍💻 From eb51c65cd39c8c0d7cf8ccad30f8e4d2b4e7d3d1 Mon Sep 17 00:00:00 2001 From: delarea Date: Sun, 26 May 2024 11:13:05 +0300 Subject: [PATCH 06/10] Update --- .../jfrog-cli/cli-command-summaries.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index fcde125..47b087d 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -63,13 +63,13 @@ type CommandSummaryInterface interface { #### Record Data During Runtime ```go - // Initialize your implementation - myNewCommandSummary, err := commandsummary.New(&MyCommandStruct{}, "myNewCommandSummary") - if err != nil { - return - } - // Record - return myNewCommandSummary.Record(data) +// Initialize your implementation +myNewCommandSummary, err := commandsummary.New(&MyCommandStruct{}, "myNewCommandSummary") +if err != nil { + return +} +// Record +return myNewCommandSummary.Record(data) ``` The `GenerateMarkdownFromFiles` function needs to process multiple data files, which are the results of previous command executions, and generate a single markdown string content. As each CLI command has its own context, we need to regenerate the entire markdown with the newly added results each time. From fd649e5f53674fe05a285ea9003550a7609903f6 Mon Sep 17 00:00:00 2001 From: delarea Date: Tue, 28 May 2024 13:57:15 +0300 Subject: [PATCH 07/10] CR --- .../jfrog-cli/cli-command-summaries.md | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index 47b087d..d867f90 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -2,8 +2,9 @@ ## Overview -The command summaries feature enables the recording of JFrog CLI command outputs into the local file system. -This functionality can be used to generate a summary of the executed CLI command. +**The Command Summaries** feature enables the recording of JFrog CLI command outputs into the local file system. +This functionality can be used to generate a summary in the context of an entire workflow +(a sequence of JFrog CLU commands) and not only in the scope of a specific command. Each command execution that incorporates this feature can save data files into the file system. These files are then used to create an aggregated summary in Markdown format. @@ -36,9 +37,9 @@ This action employs the compiled markdown to generate a comprehensive summary of ![jf-scan-example](../.gitbook/assets/jf-build-scan-summary.png) -## Notes for Developers 🖥️👩🏻‍💻⚙️ +## Notes for Developers -To use the command summaries, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. +To use **The Command Summaries**, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. This variable designates the directory where the data files and markdown files will be stored. ### ⚠️ Attention: Files Remain After CLI Execution @@ -47,7 +48,7 @@ As a result, it is your responsibility to you to manage your pipelines and delet You can clear the entire directory of `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` that you have configured to activate this feature. -## How to Implement? 👩‍💻 +### How to Implement? If you wish to implement your own summary, follow these steps: @@ -74,7 +75,7 @@ return myNewCommandSummary.Record(data) The `GenerateMarkdownFromFiles` function needs to process multiple data files, which are the results of previous command executions, and generate a single markdown string content. As each CLI command has its own context, we need to regenerate the entire markdown with the newly added results each time. -### Example Implementation ✍️ +### Example Implementation ```go @@ -117,9 +118,7 @@ func recordCommandSummary(data any) (err error) { ``` - - -## How Does It Work? 🚧 +### How Does It Work? Each command that implements the `CommandSummaryInterface` will have its own subdirectory inside the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY` directory. @@ -142,9 +141,3 @@ JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY The user-implemented function will process all of the data files inside its subdirectory and will generate a markdown string. -#### ❓ Why Do We Need to Generate Markdown from All the Files Every Time? - -The reason for this is that the CLI commands execution does not share a common context. -Therefore, the markdown file should be regenerated every time, assuming it is the last command that will run. -Since we cannot determine when the last command will be executed, every time we call record, -we also have to generate the markdown from all the existing files in the directory. \ No newline at end of file From 9a1a4d1dc9c0d8f90f33b355f244a3a7f33ec070 Mon Sep 17 00:00:00 2001 From: delarea Date: Tue, 28 May 2024 13:59:21 +0300 Subject: [PATCH 08/10] CR --- jfrog-applications/jfrog-cli/cli-command-summaries.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index d867f90..4bb0d96 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -122,8 +122,10 @@ func recordCommandSummary(data any) (err error) { Each command that implements the `CommandSummaryInterface` will have its own subdirectory inside the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY` directory. -Each subdirectory will contain data files, each representing a command recording, and a markdown file which has been generated from all the data files. - +Every subdirectory will house data files, each one corresponding to a command recording, +along with a markdown file that has been created from all the data files. +The function implemented by the user is responsible +for processing all the data files within its respective subdirectory and generating a markdown string. ``` JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY @@ -138,6 +140,3 @@ JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR/JFROG_COMMAND_SUMMARY datafile2.txt markdown.txt ``` - -The user-implemented function will process all of the data files inside its subdirectory and will generate a markdown string. - From d64f7c5366677ad68afe176f92bb57593220b589 Mon Sep 17 00:00:00 2001 From: delarea Date: Wed, 29 May 2024 10:10:07 +0300 Subject: [PATCH 09/10] CR --- jfrog-applications/jfrog-cli/cli-command-summaries.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index 4bb0d96..5c70f86 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -2,7 +2,7 @@ ## Overview -**The Command Summaries** feature enables the recording of JFrog CLI command outputs into the local file system. +The **Command Summaries** feature enables the recording of JFrog CLI command outputs into the local file system. This functionality can be used to generate a summary in the context of an entire workflow (a sequence of JFrog CLU commands) and not only in the scope of a specific command. @@ -14,7 +14,7 @@ Consequently, each command that records new data should also incorporate any exi This is required because the CLI cannot determine when a command will be the last one executed in a sequence of commands. -An instance of how Command summaries are utilized can be observed in the [setup-cli GitHub action](https://github.com/jfrog/setup-jfrog-cli/blob/master/README.md#github-job-summaries). +An instance of how **Command Summaries** are utilized can be observed in the [setup-cli GitHub action](https://github.com/jfrog/setup-jfrog-cli/blob/master/README.md#github-job-summaries). This action employs the compiled markdown to generate a comprehensive summary of the entire workflow. ### Currently supported commands: @@ -39,7 +39,7 @@ This action employs the compiled markdown to generate a comprehensive summary of ## Notes for Developers -To use **The Command Summaries**, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. +To use the **Command Summaries**, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. This variable designates the directory where the data files and markdown files will be stored. ### ⚠️ Attention: Files Remain After CLI Execution From e3a2fcf86907d0810655fa5357bc376abaded387 Mon Sep 17 00:00:00 2001 From: delarea Date: Wed, 29 May 2024 10:13:52 +0300 Subject: [PATCH 10/10] Fix link --- jfrog-applications/jfrog-cli/cli-command-summaries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index 5c70f86..9852224 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -14,7 +14,7 @@ Consequently, each command that records new data should also incorporate any exi This is required because the CLI cannot determine when a command will be the last one executed in a sequence of commands. -An instance of how **Command Summaries** are utilized can be observed in the [setup-cli GitHub action](https://github.com/jfrog/setup-jfrog-cli/blob/master/README.md#github-job-summaries). +An instance of how **Command Summaries** are utilized can be observed in the [setup-cli GitHub action](https://github.com/jfrog/setup-jfrog-cli/blob/master/README.md#JFrog-Job-Summary). This action employs the compiled markdown to generate a comprehensive summary of the entire workflow. ### Currently supported commands: