feat: simplified config down to pkg_dir & data_dir

BREAKING: downloads are now stored inside the root of pkg_dir, the log
file is always stored in the root of data_dir
cron-docs
Jef Roosens 2022-05-03 16:54:12 +02:00
parent 7419144f97
commit c818273790
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
8 changed files with 31 additions and 28 deletions

View File

@ -23,7 +23,7 @@ RUN if [ -n "${CI_COMMIT_SHA}" ]; then \
"https://s3.rustybever.be/vieter/commits/${CI_COMMIT_SHA}/vieter-$(echo "${TARGETPLATFORM}" | sed 's:/:-:g')" && \ "https://s3.rustybever.be/vieter/commits/${CI_COMMIT_SHA}/vieter-$(echo "${TARGETPLATFORM}" | sed 's:/:-:g')" && \
chmod +x vieter ; \ chmod +x vieter ; \
else \ else \
LDFLAGS='-lz -lbz2 -llzma -lexpat -lzstd -llz4 -static' make prod && \ LDFLAGS='-lz -lbz2 -llzma -lexpat -lzstd -llz4 -lsqlite3 -static' make prod && \
mv pvieter vieter ; \ mv pvieter vieter ; \
fi fi
@ -31,10 +31,8 @@ RUN if [ -n "${CI_COMMIT_SHA}" ]; then \
FROM busybox:1.35.0 FROM busybox:1.35.0
ENV PATH=/bin \ ENV PATH=/bin \
VIETER_REPOS_DIR=/data/repos \ VIETER_DATA_DIR=/data \
VIETER_PKG_DIR=/data/pkgs \ VIETER_PKG_DIR=/data/pkgs
VIETER_DOWNLOAD_DIR=/data/downloads \
VIETER_REPOS_FILE=/data/repos.json
COPY --from=builder /app/dumb-init /app/vieter /bin/ COPY --from=builder /app/dumb-init /app/vieter /bin/

View File

@ -6,9 +6,9 @@ import env
struct Config { struct Config {
pub: pub:
log_level string = 'WARN' log_level string = 'WARN'
log_file string = 'vieter.log'
api_key string api_key string
address string address string
data_dir string
base_image string = 'archlinux:base-devel' base_image string = 'archlinux:base-devel'
max_concurrent_builds int = 1 max_concurrent_builds int = 1
api_update_frequency int = 15 api_update_frequency int = 15

View File

@ -3,6 +3,9 @@ module cron
import log import log
import cron.daemon import cron.daemon
import cron.expression import cron.expression
import os
const log_file_name = 'vieter.cron.log'
// cron starts a cron daemon & starts periodically scheduling builds. // cron starts a cron daemon & starts periodically scheduling builds.
pub fn cron(conf Config) ? { pub fn cron(conf Config) ? {
@ -15,7 +18,8 @@ pub fn cron(conf Config) ? {
level: log_level level: log_level
} }
logger.set_full_logpath(conf.log_file) log_file := os.join_path_single(conf.data_dir, cron.log_file_name)
logger.set_full_logpath(log_file)
logger.log_to_console_too() logger.log_to_console_too()
ce := expression.parse_expression(conf.global_schedule) or { ce := expression.parse_expression(conf.global_schedule) or {

View File

@ -4,11 +4,11 @@ import time
import sync.stdatomic import sync.stdatomic
import build import build
const build_empty = 0 const (
build_empty = 0
const build_running = 1 build_running = 1
build_done = 2
const build_done = 2 )
// clean_finished_builds removes finished builds from the build slots & returns // clean_finished_builds removes finished builds from the build slots & returns
// them. // them.

View File

@ -6,12 +6,9 @@ import env
struct Config { struct Config {
pub: pub:
log_level string = 'WARN' log_level string = 'WARN'
log_file string = 'vieter.log'
pkg_dir string pkg_dir string
download_dir string data_dir string
api_key string api_key string
repos_dir string
repos_file string
default_arch string default_arch string
} }

View File

@ -68,7 +68,7 @@ fn (mut app App) put_package(repo string) web.Result {
if length := app.req.header.get(.content_length) { if length := app.req.header.get(.content_length) {
// Generate a random filename for the temp file // Generate a random filename for the temp file
pkg_path = os.join_path_single(app.conf.download_dir, rand.uuid_v4()) pkg_path = os.join_path_single(app.repo.pkg_dir, rand.uuid_v4())
app.ldebug("Uploading $length bytes (${util.pretty_bytes(length.int())}) to '$pkg_path'.") app.ldebug("Uploading $length bytes (${util.pretty_bytes(length.int())}) to '$pkg_path'.")

View File

@ -7,7 +7,12 @@ import repo
import util import util
import db import db
const port = 8000 const (
port = 8000
log_file_name = 'vieter.log'
repo_dir_name = 'repos'
db_file_name = 'vieter.sqlite'
)
struct App { struct App {
web.Context web.Context
@ -32,11 +37,14 @@ pub fn server(conf Config) ? {
util.exit_with_message(1, 'Invalid log level. The allowed values are FATAL, ERROR, WARN, INFO & DEBUG.') util.exit_with_message(1, 'Invalid log level. The allowed values are FATAL, ERROR, WARN, INFO & DEBUG.')
} }
os.mkdir_all(conf.data_dir) or { util.exit_with_message(1, 'Failed to create data directory.') }
mut logger := log.Log{ mut logger := log.Log{
level: log_level level: log_level
} }
logger.set_full_logpath(conf.log_file) log_file := os.join_path_single(conf.data_dir, server.log_file_name)
logger.set_full_logpath(log_file)
logger.log_to_console_too() logger.log_to_console_too()
defer { defer {
@ -45,17 +53,15 @@ pub fn server(conf Config) ? {
logger.close() logger.close()
} }
repo_dir := os.join_path_single(conf.data_dir, server.repo_dir_name)
// This also creates the directories if needed // This also creates the directories if needed
repo := repo.new(conf.repos_dir, conf.pkg_dir, conf.default_arch) or { repo := repo.new(repo_dir, conf.pkg_dir, conf.default_arch) or {
logger.error(err.msg()) logger.error(err.msg())
exit(1) exit(1)
} }
os.mkdir_all(conf.download_dir) or { db_file := os.join_path_single(conf.data_dir, server.db_file_name)
util.exit_with_message(1, 'Failed to create download directory.') db := db.init(db_file) or { util.exit_with_message(1, 'Failed to initialize database.') }
}
db := db.init('test.db') or { util.exit_with_message(1, 'Failed to initialize database.') }
web.run(&App{ web.run(&App{
logger: logger logger: logger

View File

@ -1,10 +1,8 @@
# This file contains settings used during development # This file contains settings used during development
api_key = "test" api_key = "test"
download_dir = "data/downloads" data_dir = "data"
repos_dir = "data/repos"
pkg_dir = "data/pkgs" pkg_dir = "data/pkgs"
log_level = "DEBUG" log_level = "DEBUG"
repos_file = "data/repos.json"
default_arch = "x86_64" default_arch = "x86_64"
address = "http://localhost:8000" address = "http://localhost:8000"