67 lines
2.4 KiB
Markdown
67 lines
2.4 KiB
Markdown
# pack
|
|
|
|
Pack is web server written in [rust](https://www.rust-lang.org/) with
|
|
[axum](https://docs.rs/axum/latest/axum/) for hosting built packages as a
|
|
destination endpoint for packages in a continuous integration workflow. It is
|
|
designed around Gitea, using it for its authentication as well as integrating
|
|
with Gitea actions.
|
|
|
|
## Setup
|
|
To setup the server, rename `pack.yml.template` to `pack.yml` and fill in the details
|
|
for your configuration. Place the built executable in a folder with properly configured
|
|
permissions, and make sure the upload path has permissions `750`. Indeed, all
|
|
subdirectories are created with this permissions, and all files are created with
|
|
`640`.
|
|
|
|
## Actions
|
|
The repository also includes a Gitea action. The arguments are
|
|
|
|
```yaml
|
|
inputs:
|
|
file: ... # The file to upload.
|
|
feature: ... # The feature category for pack, i.e docs.
|
|
secret: ${{ secrets.PackRepo }} # The authorization secret for this repository.
|
|
prefix: ... # An optional prefix for the filename.
|
|
is_folder: ... # Specify as 'true' if you are deliberately uploading a folder.
|
|
```
|
|
|
|
Pack chooses to enforce naming schemes depending on the type of trigger,
|
|
looking at the `gitea.ref` context variable, which is the fully formed
|
|
reference. In the case this is a git reference,
|
|
the filename will be `{prefix}-{ref_name}-{sha}`. For actions triggered by
|
|
releases, the `gitea.ref` is defined as the release tag, and the filename becomes
|
|
`{prefix}-{release}`.
|
|
|
|
|
|
## API
|
|
The only API endpoint intended to be exposed is `/api/files/{owner}/{repo}/{*path}`, which
|
|
supports `GET` and `DELETE`. Every request requires an Bearer Authorization token,
|
|
which should be exactly the Gitea OAuth2 token. This API is intended for scripted management of uploaded
|
|
packages in the contiguous integration (CI) chain. For instance, automatically pulling
|
|
latest versions into a production environment.
|
|
|
|
### GET
|
|
In the case, of GET, a JSON of the entries in a directory is returned. The format
|
|
is shown below.
|
|
|
|
```json
|
|
{
|
|
"entries": [
|
|
{
|
|
name: "...",
|
|
name_uri: "...",
|
|
icon: "...",
|
|
size: "...",
|
|
},
|
|
...
|
|
]
|
|
}
|
|
```
|
|
|
|
If the requested path is a file, it will redirect to download the file. If using `curl`,
|
|
make sure the `-L` flag is enabled to follow redirects.
|
|
|
|
### DELETE
|
|
This will delete the file at the destination, or delete the *entire* directory.
|
|
Use with caution.
|