forked from vieter-v/vieter
Merge pull request 'Add `vieter repos build` command; remove healthcheck' (#184) from Chewing_Bever/vieter:repos-build into dev
Reviewed-on: vieter/vieter#184hash-on-upload
commit
29e6d8d071
|
@ -13,6 +13,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
* CLI commands to access build logs API
|
* CLI commands to access build logs API
|
||||||
* Cron build logs are uploaded to above API
|
* Cron build logs are uploaded to above API
|
||||||
* Proper ASCII table output in CLI
|
* 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
|
### Changed
|
||||||
|
|
||||||
|
|
|
@ -36,15 +36,8 @@ ENV PATH=/bin \
|
||||||
|
|
||||||
COPY --from=builder /app/dumb-init /app/vieter /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 && \
|
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
|
WORKDIR /data
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,11 @@ Vieter only supports uploading archives compressed using either gzip, zstd or
|
||||||
xz at the moment.
|
xz at the moment.
|
||||||
{{< /hint >}}
|
{{< /hint >}}
|
||||||
|
|
||||||
|
### `GET /health`
|
||||||
|
|
||||||
|
This endpoint's only use is to be used with healthchecks. It returns a JSON
|
||||||
|
response with the message "Healthy.".
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
All API routes require the API key to provided using the `X-Api-Key` header.
|
All API routes require the API key to provided using the `X-Api-Key` header.
|
||||||
|
|
|
@ -5,7 +5,6 @@ import encoding.base64
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import db
|
import db
|
||||||
import client
|
|
||||||
import strings
|
import strings
|
||||||
import util
|
import util
|
||||||
|
|
||||||
|
@ -155,31 +154,3 @@ pub fn build_repo(address string, api_key string, base_image_id string, repo &db
|
||||||
logs: logs_builder.str()
|
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)?
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
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)?
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
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)?
|
||||||
|
}
|
|
@ -7,8 +7,9 @@ import client
|
||||||
import console
|
import console
|
||||||
|
|
||||||
struct Config {
|
struct Config {
|
||||||
address string [required]
|
address string [required]
|
||||||
api_key string [required]
|
api_key string [required]
|
||||||
|
base_image string = 'archlinux:base-devel'
|
||||||
}
|
}
|
||||||
|
|
||||||
// cmd returns the cli submodule that handles the repos API interaction
|
// cmd returns the cli submodule that handles the repos API interaction
|
||||||
|
@ -112,6 +113,18 @@ pub fn cmd() cli.Command {
|
||||||
patch(conf, cmd.args[0], params)?
|
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())?
|
||||||
|
}
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ module main
|
||||||
import os
|
import os
|
||||||
import server
|
import server
|
||||||
import cli
|
import cli
|
||||||
import build
|
|
||||||
import console.git
|
import console.git
|
||||||
import console.logs
|
import console.logs
|
||||||
import cron
|
import cron
|
||||||
|
@ -25,7 +24,6 @@ fn main() {
|
||||||
]
|
]
|
||||||
commands: [
|
commands: [
|
||||||
server.cmd(),
|
server.cmd(),
|
||||||
build.cmd(),
|
|
||||||
git.cmd(),
|
git.cmd(),
|
||||||
cron.cmd(),
|
cron.cmd(),
|
||||||
logs.cmd(),
|
logs.cmd(),
|
||||||
|
|
Loading…
Reference in New Issue