forked from vieter-v/vieter
docs(slate): add Git Repositories API docs
parent
a02b70e9a5
commit
4870edde51
34
README.md
34
README.md
|
@ -65,3 +65,37 @@ If you wish to contribute to the project, please take note of the following:
|
|||
* Please follow the
|
||||
[Conventional Commits](https://www.conventionalcommits.org/) style for your
|
||||
commit messages.
|
||||
|
||||
### Writing documentation
|
||||
|
||||
The `docs` directory contains a Hugo site consisting of all user &
|
||||
administrator documentation. `docs/api` on the other hand is a
|
||||
[slate](https://github.com/slatedocs/slate) project describing the HTTP web
|
||||
API.
|
||||
|
||||
To modify the Hugo documentation, you'll need to install Hugo. Afterwards, you
|
||||
can use the following commands inside the `docs` directory:
|
||||
|
||||
```sh
|
||||
# Build the documentation
|
||||
hugo
|
||||
|
||||
# Host an auto-refreshing web server with the documentation. Important to note
|
||||
is that the files will be at `http://localhost:1313/docs/vieter` instead of
|
||||
just `http://localhost:1313/docs/vieter`
|
||||
hugo server
|
||||
```
|
||||
|
||||
For the Slate docs, I personally just start a docker container:
|
||||
|
||||
```sh
|
||||
docker run \
|
||||
--rm \
|
||||
-p 4567:4567 \
|
||||
--name slate \
|
||||
-v $(pwd)/docs/api/source:/srv/slate/source slatedocs/slate serve
|
||||
```
|
||||
|
||||
This'll make the slate docs available at http://localhost:4567. Sadly, this
|
||||
server doesn't auto-refresh, so you'll have to manually refresh your browser
|
||||
every time you make a change.
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 22 KiB |
|
@ -1,22 +0,0 @@
|
|||
# Errors
|
||||
|
||||
<aside class="notice">
|
||||
This error section is stored in a separate file in <code>includes/_errors.md</code>. Slate allows you to optionally separate out your docs into many files...just save them to the <code>includes</code> folder and add them to the top of your <code>index.md</code>'s frontmatter. Files are included in the order listed.
|
||||
</aside>
|
||||
|
||||
The Kittn API uses the following error codes:
|
||||
|
||||
|
||||
Error Code | Meaning
|
||||
---------- | -------
|
||||
400 | Bad Request -- Your request is invalid.
|
||||
401 | Unauthorized -- Your API key is wrong.
|
||||
403 | Forbidden -- The kitten requested is hidden for administrators only.
|
||||
404 | Not Found -- The specified kitten could not be found.
|
||||
405 | Method Not Allowed -- You tried to access a kitten with an invalid method.
|
||||
406 | Not Acceptable -- You requested a format that isn't json.
|
||||
410 | Gone -- The kitten requested has been removed from our servers.
|
||||
418 | I'm a teapot.
|
||||
429 | Too Many Requests -- You're requesting too many kittens! Slow down!
|
||||
500 | Internal Server Error -- We had a problem with our server. Try again later.
|
||||
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later.
|
|
@ -0,0 +1,148 @@
|
|||
# Git Repositories
|
||||
|
||||
<aside class="notice">
|
||||
|
||||
All routes in this section require authentication.
|
||||
|
||||
</aside>
|
||||
|
||||
Endpoints for interacting with the list of Git repositories stored on the
|
||||
server.
|
||||
|
||||
## List repos
|
||||
|
||||
```shell
|
||||
curl \
|
||||
-H 'X-Api-Key: secret' \
|
||||
https://example.com/api/repos?offset=10&limit=20
|
||||
```
|
||||
|
||||
> JSON Output format
|
||||
|
||||
```json
|
||||
{
|
||||
"message": "",
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"url": "https://aur.archlinux.org/discord-ptb.git",
|
||||
"branch": "master",
|
||||
"repo": "bur",
|
||||
"schedule": "",
|
||||
"arch": [
|
||||
{
|
||||
"id": 1,
|
||||
"repo_id": 1,
|
||||
"value": "x86_64"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Retrieve a list of Git repositories.
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/repos`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
limit | Maximum amount of results to return.
|
||||
offset | Offset of results.
|
||||
repo | Limit results to repositories that publish to the given repo.
|
||||
|
||||
## Get a repo
|
||||
|
||||
```shell
|
||||
curl \
|
||||
-H 'X-Api-Key: secret' \
|
||||
https://example.com/api/repos/15
|
||||
```
|
||||
|
||||
> JSON Output format
|
||||
|
||||
```json
|
||||
{
|
||||
"message": "",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"url": "https://aur.archlinux.org/discord-ptb.git",
|
||||
"branch": "master",
|
||||
"repo": "bur",
|
||||
"schedule": " 0 3",
|
||||
"arch": [
|
||||
{
|
||||
"id": 1,
|
||||
"repo_id": 1,
|
||||
"value": "x86_64"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Get info about a specific Git repository.
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/repos/:id`
|
||||
|
||||
### URL Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
repo | ID of requested repo
|
||||
|
||||
## Create a new repo
|
||||
|
||||
Create a new Git repository with the given data.
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/repos`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
url | URL of the Git repository.
|
||||
branch | Branch of the Git repository.
|
||||
repo | Vieter repository to publish built packages to.
|
||||
schedule | Cron build schedule
|
||||
arch | Comma-separated list of architectures to build package on.
|
||||
|
||||
## Modify a repo
|
||||
|
||||
Modify the data of an existing Git repository.
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`PATCH /api/repos`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
url | URL of the Git repository.
|
||||
branch | Branch of the Git repository.
|
||||
repo | Vieter repository to publish built packages to.
|
||||
schedule | Cron build schedule
|
||||
arch | Comma-separated list of architectures to build package on.
|
||||
|
||||
## Remove a repo
|
||||
|
||||
Remove a Git repository from the server.
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/repos/:id`
|
||||
|
||||
### URL Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
repo | ID of repo to remove
|
|
@ -7,7 +7,7 @@ possible.
|
|||
## Get a package archive or database file
|
||||
|
||||
```shell
|
||||
curl -OL https://example.com/bur/x86_64/tuxedo-keyboard-3.0.10-1-x86_64.pkg.tar.zst
|
||||
curl -L https://example.com/bur/x86_64/tuxedo-keyboard-3.0.10-1-x86_64.pkg.tar.zst
|
||||
```
|
||||
|
||||
This endpoint is really the entire repository. It serves both the package
|
||||
|
@ -43,7 +43,7 @@ filename | actual filename to request
|
|||
## Check whether file exists
|
||||
|
||||
```shell
|
||||
curl -IL https://example.com/bur/x86_64/tuxedo-keyboard-3.0.10-1-x86_64.pkg.tar.zst
|
||||
curl -L https://example.com/bur/x86_64/tuxedo-keyboard-3.0.10-1-x86_64.pkg.tar.zst
|
||||
```
|
||||
|
||||
The above request can also be performed as a HEAD request. The behavior is the
|
||||
|
@ -73,7 +73,7 @@ This endpoint requests authentication.
|
|||
```shell
|
||||
curl \
|
||||
-H 'X-Api-Key: secret' \
|
||||
-XPOST
|
||||
-XPOST \
|
||||
-T tuxedo-keyboard-3.0.10-1-x86_64.pkg.tar.zst \
|
||||
https://example.com/some-repo/publish
|
||||
```
|
||||
|
|
|
@ -11,7 +11,6 @@ includes:
|
|||
- repository
|
||||
- git
|
||||
- logs
|
||||
- errors
|
||||
|
||||
search: true
|
||||
|
||||
|
|
|
@ -27,16 +27,22 @@ enableGitInfo = true
|
|||
weight = 1
|
||||
|
||||
[menu]
|
||||
# [[menu.before]]
|
||||
[[menu.after]]
|
||||
name = "API Documentation"
|
||||
url = "https://rustybever.be/docs/vieter/api"
|
||||
weight = 10
|
||||
[[menu.after]]
|
||||
name = "Man Pages"
|
||||
url = "https://rustybever.be/man/vieter/vieter.1.html"
|
||||
weight = 20
|
||||
[[menu.after]]
|
||||
name = "Source"
|
||||
url = "https://git.rustybever.be/Chewing_Bever/docs"
|
||||
weight = 10
|
||||
|
||||
weight = 30
|
||||
[[menu.after]]
|
||||
name = "Hugo Theme"
|
||||
url = "https://github.com/alex-shpak/hugo-book"
|
||||
weight = 20
|
||||
weight = 40
|
||||
|
||||
[params]
|
||||
# (Optional, default light) Sets color theme: light, dark or auto.
|
||||
|
|
|
@ -1,89 +0,0 @@
|
|||
# API Reference
|
||||
|
||||
All routes that return JSON use the following shape:
|
||||
|
||||
```json
|
||||
{
|
||||
"message": "some message",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
Here, data can be any JSON object, so it's not guaranteed to be a struct.
|
||||
|
||||
### `GET /<repo>/<arch>/<filename>`
|
||||
|
||||
This route serves the contents of a specific architecture' repo.
|
||||
|
||||
If `<filename>` is one of `<repo>.db`, `<repo>.files`, `<repo>.db.tar.gz` or
|
||||
`<repo>.files.tar.gz`, it will serve the respective archive file from the
|
||||
repository.
|
||||
|
||||
If `<filename>` contains `.pkg`, it assumes the request to be for a package
|
||||
archive & will serve that file from the specific arch-repo's package directory.
|
||||
|
||||
Finally, if none of the above are true, Vieter assumes it to be request for a
|
||||
package version's desc file & tries to serve this instead. This functionality
|
||||
is very useful for the build system for checking whether a package needs to be
|
||||
rebuilt or not.
|
||||
|
||||
### `HEAD /<repo>/<arch>/<filename>`
|
||||
|
||||
Behaves the same as the above route, but instead of returning actual data, it
|
||||
returns either 200 or 404, depending on whether the file exists. This route is
|
||||
used by the build system to determine whether a package needs to be rebuilt.
|
||||
|
||||
### `POST /<repo>/publish`
|
||||
|
||||
This route is used to upload packages to a repository. It requires the API
|
||||
key to be provided using the `X-Api-Key` HTTP header. Vieter will parse the
|
||||
package's contents & update the repository files accordingely. I find the
|
||||
easiest way to use this route is using cURL:
|
||||
|
||||
```sh
|
||||
curl -XPOST -T "path-to-package.pkg.tar.zst" -H "X-API-KEY: your-api-key" https://example.com/somerepo/publish
|
||||
```
|
||||
|
||||
Packages are automatically added to the correct arch-repo. If a package type is
|
||||
`any`, the package is added to the configured `default_arch`, as well as all
|
||||
already present arch-repos. To prevent unnecessary duplication of package
|
||||
files, these packages are shared between arch-repos' package directories using
|
||||
hard links.
|
||||
|
||||
{{< hint info >}}
|
||||
**Note**
|
||||
Vieter only supports uploading archives compressed using either gzip, zstd or
|
||||
xz at the moment.
|
||||
{{< /hint >}}
|
||||
|
||||
### `GET /health`
|
||||
|
||||
This endpoint's only use is to be used with healthchecks. It returns a JSON
|
||||
response with the message "Healthy.".
|
||||
|
||||
## API
|
||||
|
||||
All API routes require the API key to provided using the `X-Api-Key` header.
|
||||
Otherwise, they'll return a status code 401.
|
||||
|
||||
### `GET /api/repos`
|
||||
|
||||
Returns the current list of Git repositories.
|
||||
|
||||
### `GET /api/repos/<id>`
|
||||
|
||||
Get the information for the Git repo with the given ID.
|
||||
|
||||
### `POST /api/repos?<url>&<branch>&<arch>&<repo>`
|
||||
|
||||
Adds a new Git repository with the provided URL, Git branch & comma-separated
|
||||
list of architectures.
|
||||
|
||||
### `DELETE /api/repos/<id>`
|
||||
|
||||
Deletes the Git repository with the provided ID.
|
||||
|
||||
### `PATCH /api/repos/<id>?<url>&<branch>&<arch>&<repo>`
|
||||
|
||||
Updates the provided parameters for the repo with the given ID. All arguments
|
||||
are optional.
|
Loading…
Reference in New Issue