forked from vieter-v/vieter
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_dirmain
parent
7419144f97
commit
c818273790
|
@ -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/
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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'.")
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue