Compare commits

..

No commits in common. "29e6d8d0711ece2388f3fce44b4f12613bce1dc2" and "92f73ad3640246370094651ec270f2e51b95bf53" have entirely different histories.

8 changed files with 70 additions and 62 deletions

View File

@ -13,13 +13,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* CLI commands to access build logs API
* Cron build logs are uploaded to above API
* Proper ASCII table output in CLI
* `vieter repos build id` command to run builds locally
### Removed
* `vieter build` command
* This command was used alongside cron for periodic builds, but this has
been replaced by `vieter cron`
### Changed

View File

@ -36,8 +36,15 @@ ENV PATH=/bin \
COPY --from=builder /app/dumb-init /app/vieter /bin/
HEALTHCHECK --interval=30s \
--timeout=3s \
--start-period=5s \
CMD /bin/wget --spider http://localhost:8000/health || exit 1
RUN mkdir /data && \
chown -R www-data:www-data /data
chown -R www-data:www-data /data && \
mkdir -p '/var/spool/cron/crontabs' && \
echo '0 3 * * * /bin/vieter build' | crontab -
WORKDIR /data

View File

@ -56,11 +56,6 @@ 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.

View File

@ -5,6 +5,7 @@ import encoding.base64
import time
import os
import db
import client
import strings
import util
@ -154,3 +155,31 @@ pub fn build_repo(address string, api_key string, base_image_id string, repo &db
logs: logs_builder.str()
}
}
// build builds every Git repo in the server's list.
fn build(conf Config, repo_id int) ? {
c := client.new(conf.address, conf.api_key)
repo := c.get_git_repo(repo_id)?
build_arch := os.uname().machine
println('Creating base image...')
image_id := create_build_image(conf.base_image)?
println('Running build...')
res := build_repo(conf.address, conf.api_key, image_id, repo)?
println('Removing build image...')
mut dd := docker.new_conn()?
defer {
dd.close() or {}
}
dd.remove_image(image_id)?
println('Uploading logs to Vieter...')
c.add_build_log(repo.id, res.start_time, res.end_time, build_arch, res.exit_code,
res.logs)?
}

29
src/build/cli.v 100644
View File

@ -0,0 +1,29 @@
module build
import cli
import env
pub struct Config {
pub:
api_key string
address string
base_image string = 'archlinux:base-devel'
}
// cmd returns the cli submodule that handles the build process
pub fn cmd() cli.Command {
return cli.Command{
name: 'build'
required_args: 1
usage: 'id'
description: 'Build the repository with the given ID.'
execute: fn (cmd cli.Command) ? {
config_file := cmd.flags.get_string('config-file')?
conf := env.load<Config>(config_file)?
id := cmd.args[0].int()
build(conf, id)?
}
}
}

View File

@ -1,34 +0,0 @@
module git
import client
import docker
import os
import build
// build builds every Git repo in the server's list.
fn build(conf Config, repo_id int) ? {
c := client.new(conf.address, conf.api_key)
repo := c.get_git_repo(repo_id)?
build_arch := os.uname().machine
println('Creating base image...')
image_id := build.create_build_image(conf.base_image)?
println('Running build...')
res := build.build_repo(conf.address, conf.api_key, image_id, repo)?
println('Removing build image...')
mut dd := docker.new_conn()?
defer {
dd.close() or {}
}
dd.remove_image(image_id)?
println('Uploading logs to Vieter...')
c.add_build_log(repo.id, res.start_time, res.end_time, build_arch, res.exit_code,
res.logs)?
}

View File

@ -7,9 +7,8 @@ import client
import console
struct Config {
address string [required]
api_key string [required]
base_image string = 'archlinux:base-devel'
address string [required]
api_key string [required]
}
// cmd returns the cli submodule that handles the repos API interaction
@ -113,18 +112,6 @@ pub fn cmd() cli.Command {
patch(conf, cmd.args[0], params)?
}
},
cli.Command{
name: 'build'
required_args: 1
usage: 'id'
description: 'Build the repo with the given id & publish it.'
execute: fn (cmd cli.Command) ? {
config_file := cmd.flags.get_string('config-file')?
conf := env.load<Config>(config_file)?
build(conf, cmd.args[0].int())?
}
},
]
}
}

View File

@ -3,6 +3,7 @@ module main
import os
import server
import cli
import build
import console.git
import console.logs
import cron
@ -24,6 +25,7 @@ fn main() {
]
commands: [
server.cmd(),
build.cmd(),
git.cmd(),
cron.cmd(),
logs.cmd(),