mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	Make RepoActionView.vue support ##[group] (#32770)
				
					
				
			This commit is contained in:
		| @@ -26,9 +26,9 @@ func generateMockStepsLog(logCur actions.LogCursor) (stepsLog []*actions.ViewSte | |||||||
| 		"::endgroup::", | 		"::endgroup::", | ||||||
| 		"message for: step={step}, cursor={cursor}", | 		"message for: step={step}, cursor={cursor}", | ||||||
| 		"message for: step={step}, cursor={cursor}", | 		"message for: step={step}, cursor={cursor}", | ||||||
| 		"message for: step={step}, cursor={cursor}", | 		"##[group]test group for: step={step}, cursor={cursor}", | ||||||
| 		"message for: step={step}, cursor={cursor}", | 		"in group msg for: step={step}, cursor={cursor}", | ||||||
| 		"message for: step={step}, cursor={cursor}", | 		"##[endgroup]", | ||||||
| 	} | 	} | ||||||
| 	cur := logCur.Cursor // usually the cursor is the "file offset", but here we abuse it as "line number" to make the mock easier, intentionally | 	cur := logCur.Cursor // usually the cursor is the "file offset", but here we abuse it as "line number" to make the mock easier, intentionally | ||||||
| 	for i := 0; i < util.Iif(logCur.Step == 0, 3, 1); i++ { | 	for i := 0; i < util.Iif(logCur.Step == 0, 3, 1); i++ { | ||||||
| @@ -52,6 +52,10 @@ func MockActionsRunsJobs(ctx *context.Context) { | |||||||
| 	req := web.GetForm(ctx).(*actions.ViewRequest) | 	req := web.GetForm(ctx).(*actions.ViewRequest) | ||||||
|  |  | ||||||
| 	resp := &actions.ViewResponse{} | 	resp := &actions.ViewResponse{} | ||||||
|  | 	resp.State.Run.TitleHTML = `mock run title <a href="/">link</a>` | ||||||
|  | 	resp.State.Run.Status = actions_model.StatusRunning.String() | ||||||
|  | 	resp.State.Run.CanCancel = true | ||||||
|  | 	resp.State.Run.CanDeleteArtifact = true | ||||||
| 	resp.Artifacts = append(resp.Artifacts, &actions.ArtifactsViewItem{ | 	resp.Artifacts = append(resp.Artifacts, &actions.ArtifactsViewItem{ | ||||||
| 		Name:   "artifact-a", | 		Name:   "artifact-a", | ||||||
| 		Size:   100 * 1024, | 		Size:   100 * 1024, | ||||||
|   | |||||||
| @@ -16,8 +16,27 @@ type LogLine = { | |||||||
|   message: string; |   message: string; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| const LogLinePrefixGroup = '::group::'; | const LogLinePrefixesGroup = ['::group::', '##[group]']; | ||||||
| const LogLinePrefixEndGroup = '::endgroup::'; | const LogLinePrefixesEndGroup = ['::endgroup::', '##[endgroup]']; | ||||||
|  |  | ||||||
|  | type LogLineCommand = { | ||||||
|  |   name: 'group' | 'endgroup', | ||||||
|  |   prefix: string, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function parseLineCommand(line: LogLine): LogLineCommand | null { | ||||||
|  |   for (const prefix of LogLinePrefixesGroup) { | ||||||
|  |     if (line.message.startsWith(prefix)) { | ||||||
|  |       return {name: 'group', prefix}; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   for (const prefix of LogLinePrefixesEndGroup) { | ||||||
|  |     if (line.message.startsWith(prefix)) { | ||||||
|  |       return {name: 'endgroup', prefix}; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return null; | ||||||
|  | } | ||||||
|  |  | ||||||
| const sfc = { | const sfc = { | ||||||
|   name: 'RepoActionView', |   name: 'RepoActionView', | ||||||
| @@ -129,13 +148,13 @@ const sfc = { | |||||||
|       return el._stepLogsActiveContainer ?? el; |       return el._stepLogsActiveContainer ?? el; | ||||||
|     }, |     }, | ||||||
|     // begin a log group |     // begin a log group | ||||||
|     beginLogGroup(stepIndex: number, startTime: number, line: LogLine) { |     beginLogGroup(stepIndex: number, startTime: number, line: LogLine, cmd: LogLineCommand) { | ||||||
|       const el = this.$refs.logs[stepIndex]; |       const el = this.$refs.logs[stepIndex]; | ||||||
|       const elJobLogGroupSummary = createElementFromAttrs('summary', {class: 'job-log-group-summary'}, |       const elJobLogGroupSummary = createElementFromAttrs('summary', {class: 'job-log-group-summary'}, | ||||||
|         this.createLogLine(stepIndex, startTime, { |         this.createLogLine(stepIndex, startTime, { | ||||||
|           index: line.index, |           index: line.index, | ||||||
|           timestamp: line.timestamp, |           timestamp: line.timestamp, | ||||||
|           message: line.message.substring(LogLinePrefixGroup.length), |           message: line.message.substring(cmd.prefix.length), | ||||||
|         }), |         }), | ||||||
|       ); |       ); | ||||||
|       const elJobLogList = createElementFromAttrs('div', {class: 'job-log-list'}); |       const elJobLogList = createElementFromAttrs('div', {class: 'job-log-list'}); | ||||||
| @@ -147,13 +166,13 @@ const sfc = { | |||||||
|       el._stepLogsActiveContainer = elJobLogList; |       el._stepLogsActiveContainer = elJobLogList; | ||||||
|     }, |     }, | ||||||
|     // end a log group |     // end a log group | ||||||
|     endLogGroup(stepIndex: number, startTime: number, line: LogLine) { |     endLogGroup(stepIndex: number, startTime: number, line: LogLine, cmd: LogLineCommand) { | ||||||
|       const el = this.$refs.logs[stepIndex]; |       const el = this.$refs.logs[stepIndex]; | ||||||
|       el._stepLogsActiveContainer = null; |       el._stepLogsActiveContainer = null; | ||||||
|       el.append(this.createLogLine(stepIndex, startTime, { |       el.append(this.createLogLine(stepIndex, startTime, { | ||||||
|         index: line.index, |         index: line.index, | ||||||
|         timestamp: line.timestamp, |         timestamp: line.timestamp, | ||||||
|         message: line.message.substring(LogLinePrefixEndGroup.length), |         message: line.message.substring(cmd.prefix.length), | ||||||
|       })); |       })); | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
| @@ -201,11 +220,12 @@ const sfc = { | |||||||
|     appendLogs(stepIndex: number, startTime: number, logLines: LogLine[]) { |     appendLogs(stepIndex: number, startTime: number, logLines: LogLine[]) { | ||||||
|       for (const line of logLines) { |       for (const line of logLines) { | ||||||
|         const el = this.getLogsContainer(stepIndex); |         const el = this.getLogsContainer(stepIndex); | ||||||
|         if (line.message.startsWith(LogLinePrefixGroup)) { |         const cmd = parseLineCommand(line); | ||||||
|           this.beginLogGroup(stepIndex, startTime, line); |         if (cmd?.name === 'group') { | ||||||
|  |           this.beginLogGroup(stepIndex, startTime, line, cmd); | ||||||
|           continue; |           continue; | ||||||
|         } else if (line.message.startsWith(LogLinePrefixEndGroup)) { |         } else if (cmd?.name === 'endgroup') { | ||||||
|           this.endLogGroup(stepIndex, startTime, line); |           this.endLogGroup(stepIndex, startTime, line, cmd); | ||||||
|           continue; |           continue; | ||||||
|         } |         } | ||||||
|         el.append(this.createLogLine(stepIndex, startTime, line)); |         el.append(this.createLogLine(stepIndex, startTime, line)); | ||||||
| @@ -393,7 +413,7 @@ export function initRepositoryActionView() { | |||||||
|         <button class="ui basic small compact button red" @click="cancelRun()" v-else-if="run.canCancel"> |         <button class="ui basic small compact button red" @click="cancelRun()" v-else-if="run.canCancel"> | ||||||
|           {{ locale.cancel }} |           {{ locale.cancel }} | ||||||
|         </button> |         </button> | ||||||
|         <button class="ui basic small compact button tw-mr-0 tw-whitespace-nowrap link-action" :data-url="`${run.link}/rerun`" v-else-if="run.canRerun"> |         <button class="ui basic small compact button link-action" :data-url="`${run.link}/rerun`" v-else-if="run.canRerun"> | ||||||
|           {{ locale.rerun_all }} |           {{ locale.rerun_all }} | ||||||
|         </button> |         </button> | ||||||
|       </div> |       </div> | ||||||
| @@ -539,6 +559,11 @@ export function initRepositoryActionView() { | |||||||
|   overflow-wrap: anywhere; |   overflow-wrap: anywhere; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .action-info-summary .ui.button { | ||||||
|  |   margin: 0; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
| .action-commit-summary { | .action-commit-summary { | ||||||
|   display: flex; |   display: flex; | ||||||
|   flex-wrap: wrap; |   flex-wrap: wrap; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user