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