diff --git a/CHANGELOG.md b/CHANGELOG.md index c86761c4..7c203938 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 * 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 diff --git a/Dockerfile b/Dockerfile index 2ba61817..5997adca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,15 +36,8 @@ 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 && \ - mkdir -p '/var/spool/cron/crontabs' && \ - echo '0 3 * * * /bin/vieter build' | crontab - + chown -R www-data:www-data /data WORKDIR /data diff --git a/docs/content/api.md b/docs/content/api.md index 7c395eb2..0fbb694f 100644 --- a/docs/content/api.md +++ b/docs/content/api.md @@ -56,6 +56,11 @@ 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. diff --git a/src/build/build.v b/src/build/build.v index 2784c260..fab6c35b 100644 --- a/src/build/build.v +++ b/src/build/build.v @@ -5,7 +5,6 @@ import encoding.base64 import time import os import db -import client import strings 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() } } - -// 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)? -} diff --git a/src/build/cli.v b/src/build/cli.v deleted file mode 100644 index 64814cb2..00000000 --- a/src/build/cli.v +++ /dev/null @@ -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_file)? - - id := cmd.args[0].int() - - build(conf, id)? - } - } -} diff --git a/src/console/git/build.v b/src/console/git/build.v new file mode 100644 index 00000000..fac760df --- /dev/null +++ b/src/console/git/build.v @@ -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)? +} diff --git a/src/console/git/git.v b/src/console/git/git.v index db9dec59..06d5f80c 100644 --- a/src/console/git/git.v +++ b/src/console/git/git.v @@ -7,8 +7,9 @@ import client import console struct Config { - address string [required] - api_key string [required] + address string [required] + api_key string [required] + base_image string = 'archlinux:base-devel' } // 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)? } }, + 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_file)? + + build(conf, cmd.args[0].int())? + } + }, ] } } diff --git a/src/main.v b/src/main.v index db6d5ef9..dbfac09e 100644 --- a/src/main.v +++ b/src/main.v @@ -3,7 +3,6 @@ module main import os import server import cli -import build import console.git import console.logs import cron @@ -25,7 +24,6 @@ fn main() { ] commands: [ server.cmd(), - build.cmd(), git.cmd(), cron.cmd(), logs.cmd(),