forked from vieter-v/vieter
				
			Merge pull request 'Slate docs: build logs' (#224) from Chewing_Bever/vieter:slate-docs into dev
Reviewed-on: vieter/vieter#224hash-on-upload
						commit
						aea83c38ef
					
				|  | @ -17,7 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| * CLI flags to take advantage of above API improvements | ||||
| * Added CLI command to generate all man pages | ||||
| * PKGBUILDs now install man pages | ||||
| * CLI man pages are now hosted on https://rustybever.be | ||||
| * Hosted CLI man pages ([vieter(1)](https://rustybever.be/man/vieter/vieter.1.html)) | ||||
| * Proper HTTP API docs ([link](https://rustybever.be/docs/vieter/api/)) | ||||
| 
 | ||||
| ### Changed | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ curl \ | |||
|   https://example.com/api/repos?offset=10&limit=20 | ||||
| ``` | ||||
| 
 | ||||
| > JSON Output format | ||||
| > JSON output format | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|  | @ -63,7 +63,7 @@ curl \ | |||
|   https://example.com/api/repos/15 | ||||
| ``` | ||||
| 
 | ||||
| > JSON Output format | ||||
| > JSON output format | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|  | @ -73,7 +73,7 @@ curl \ | |||
|     "url": "https://aur.archlinux.org/discord-ptb.git", | ||||
|     "branch": "master", | ||||
|     "repo": "bur", | ||||
|     "schedule": " 0 3", | ||||
|     "schedule": "0 3", | ||||
|     "arch": [ | ||||
|       { | ||||
|         "id": 1, | ||||
|  | @ -95,7 +95,7 @@ Get info about a specific Git repository. | |||
| 
 | ||||
| Parameter | Description | ||||
| --------- | ----------- | ||||
| repo | ID of requested repo | ||||
| id | ID of requested repo | ||||
| 
 | ||||
| ## Create a new repo | ||||
| 
 | ||||
|  | @ -121,7 +121,13 @@ Modify the data of an existing Git repository. | |||
| 
 | ||||
| ### HTTP Request | ||||
| 
 | ||||
| `PATCH /api/repos` | ||||
| `PATCH /api/repos/:id` | ||||
| 
 | ||||
| ### URL Parameters | ||||
| 
 | ||||
| Parameter | Description | ||||
| --------- | ----------- | ||||
| id | ID of requested repo | ||||
| 
 | ||||
| ### Query Parameters | ||||
| 
 | ||||
|  | @ -145,4 +151,4 @@ Remove a Git repository from the server. | |||
| 
 | ||||
| Parameter | Description | ||||
| --------- | ----------- | ||||
| repo | ID of repo to remove | ||||
| id | ID of repo to remove | ||||
|  |  | |||
|  | @ -0,0 +1,140 @@ | |||
| # Build Logs | ||||
| 
 | ||||
| <aside class="notice"> | ||||
| 
 | ||||
| All routes in this section require authentication. | ||||
| 
 | ||||
| </aside> | ||||
| 
 | ||||
| Endpoints for interacting with stored build logs. | ||||
| 
 | ||||
| ## List logs | ||||
| 
 | ||||
| ```shell | ||||
| curl \ | ||||
|   -H 'X-Api-Key: secret' \ | ||||
|   https://example.com/api/logs?offset=10&limit=20 | ||||
| ``` | ||||
| 
 | ||||
| > JSON output format | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|   "message": "", | ||||
|   "data": [ | ||||
|     { | ||||
|       "id": 1, | ||||
|       "repo_id": 3, | ||||
|       "start_time": 1652008554, | ||||
|       "end_time": 1652008559, | ||||
|       "arch": "x86_64", | ||||
|       "exit_code": 0 | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Retrieve a list of build logs. | ||||
| 
 | ||||
| ### HTTP Request | ||||
| 
 | ||||
| `GET /api/logs` | ||||
| 
 | ||||
| ### Query Parameters | ||||
| 
 | ||||
| Parameter | Description | ||||
| --------- | ----------- | ||||
| limit | Maximum amount of results to return. | ||||
| offset | Offset of results. | ||||
| repo | Only return builds published to this repository. | ||||
| before | Only return logs started before this time (UTC epoch) | ||||
| after | Only return logs started after this time (UTC epoch) | ||||
| arch | Only return logs built on this architecture | ||||
| exit_codes | Comma-separated list of exit codes to limit result to; using `!` as a prefix makes it exclude that value. For example, `1,2` only returns logs with status code 1 or 2, while `!1,!2` returns those that don't have 1 or 2 as the result. | ||||
| 
 | ||||
| 
 | ||||
| ## Get build log | ||||
| 
 | ||||
| ```shell | ||||
| curl \ | ||||
|   -H 'X-Api-Key: secret' \ | ||||
|   https://example.com/api/logs/15 | ||||
| ``` | ||||
| 
 | ||||
| > JSON output format | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|   "message": "", | ||||
|   "data": { | ||||
|     "id": 1, | ||||
|     "repo_id": 3, | ||||
|     "start_time": 1652008554, | ||||
|     "end_time": 1652008559, | ||||
|     "arch": "x86_64", | ||||
|     "exit_code": 0 | ||||
|   } | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Retrieve info about a specific build log. | ||||
| 
 | ||||
| ### HTTP Request | ||||
| 
 | ||||
| `GET /api/logs/:id` | ||||
| 
 | ||||
| ### URL Parameters | ||||
| 
 | ||||
| Parameter | Description | ||||
| --------- | ----------- | ||||
| id | ID of requested log | ||||
| 
 | ||||
| ## Get log contents | ||||
| 
 | ||||
| ```shell | ||||
| curl \ | ||||
|   -H 'X-Api-Key: secret' \ | ||||
|   https://example.com/api/logs/15/content | ||||
| ``` | ||||
| 
 | ||||
| Retrieve the contents of a build log. The response is the build log in | ||||
| plaintext. | ||||
| 
 | ||||
| ### HTTP Request | ||||
| 
 | ||||
| `GET /api/logs/:id/content` | ||||
| 
 | ||||
| ### URL Parameters | ||||
| 
 | ||||
| Parameter | Description | ||||
| --------- | ----------- | ||||
| id | ID of requested log | ||||
| 
 | ||||
| ## Publish build log | ||||
| 
 | ||||
| <aside class="warning"> | ||||
| 
 | ||||
| You should probably not use this endpoint, as it's used by the build system to | ||||
| publish its logs. | ||||
| 
 | ||||
| </aside> | ||||
| 
 | ||||
| Publish a new build log to the server. | ||||
| 
 | ||||
| ### HTTP Request | ||||
| 
 | ||||
| `POST /api/logs` | ||||
| 
 | ||||
| ### Query parameters | ||||
| 
 | ||||
| Parameter | Description | ||||
| --------- | ----------- | ||||
| id | ID of requested log | ||||
| startTime | Start time of the build (UTC epoch) | ||||
| endTime | End time of the build (UTC epoch) | ||||
| arch | Architecture on which the build was done | ||||
| exitCode | Exit code of the build container | ||||
| 
 | ||||
| ### Request body | ||||
| 
 | ||||
| Plaintext contents of the build log. | ||||
|  | @ -42,8 +42,8 @@ pub fn (c &Client) get_build_log_content(id int) ?string { | |||
| pub fn (c &Client) add_build_log(repo_id int, start_time time.Time, end_time time.Time, arch string, exit_code int, content string) ?Response<string> { | ||||
| 	params := { | ||||
| 		'repo':      repo_id.str() | ||||
| 		'startTime': start_time.str() | ||||
| 		'endTime':   end_time.str() | ||||
| 		'startTime': start_time.unix_time().str() | ||||
| 		'endTime':   end_time.unix_time().str() | ||||
| 		'arch':      arch | ||||
| 		'exitCode':  exit_code.str() | ||||
| 	} | ||||
|  |  | |||
|  | @ -70,13 +70,19 @@ fn (mut app App) post_log() web.Result { | |||
| 	} | ||||
| 
 | ||||
| 	// Parse query params | ||||
| 	start_time := parse_query_time(app.query['startTime']) or { | ||||
| 	start_time_int := app.query['startTime'].int() | ||||
| 
 | ||||
| 	if start_time_int == 0 { | ||||
| 		return app.json(http.Status.bad_request, new_response('Invalid or missing start time.')) | ||||
| 	} | ||||
| 	start_time := time.unix(start_time_int) | ||||
| 
 | ||||
| 	end_time := parse_query_time(app.query['endTime']) or { | ||||
| 	end_time_int := app.query['endTime'].int() | ||||
| 
 | ||||
| 	if end_time_int == 0 { | ||||
| 		return app.json(http.Status.bad_request, new_response('Invalid or missing end time.')) | ||||
| 	} | ||||
| 	end_time := time.unix(end_time_int) | ||||
| 
 | ||||
| 	if 'exitCode' !in app.query { | ||||
| 		return app.json(http.Status.bad_request, new_response('Missing exit code.')) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue