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_dirsqlite-backend
							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')" && \
 | 
			
		||||
            chmod +x vieter ; \
 | 
			
		||||
    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 ; \
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -31,10 +31,8 @@ RUN if [ -n "${CI_COMMIT_SHA}" ]; then \
 | 
			
		|||
FROM busybox:1.35.0
 | 
			
		||||
 | 
			
		||||
ENV PATH=/bin \
 | 
			
		||||
    VIETER_REPOS_DIR=/data/repos \
 | 
			
		||||
    VIETER_PKG_DIR=/data/pkgs \
 | 
			
		||||
    VIETER_DOWNLOAD_DIR=/data/downloads \
 | 
			
		||||
    VIETER_REPOS_FILE=/data/repos.json
 | 
			
		||||
    VIETER_DATA_DIR=/data \
 | 
			
		||||
    VIETER_PKG_DIR=/data/pkgs
 | 
			
		||||
 | 
			
		||||
COPY --from=builder /app/dumb-init /app/vieter /bin/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,9 +6,9 @@ import env
 | 
			
		|||
struct Config {
 | 
			
		||||
pub:
 | 
			
		||||
	log_level               string = 'WARN'
 | 
			
		||||
	log_file                string = 'vieter.log'
 | 
			
		||||
	api_key                 string
 | 
			
		||||
	address                 string
 | 
			
		||||
	data_dir string
 | 
			
		||||
	base_image              string = 'archlinux:base-devel'
 | 
			
		||||
	max_concurrent_builds   int    = 1
 | 
			
		||||
	api_update_frequency    int    = 15
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,9 @@ module cron
 | 
			
		|||
import log
 | 
			
		||||
import cron.daemon
 | 
			
		||||
import cron.expression
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
const log_file_name = 'vieter.cron.log'
 | 
			
		||||
 | 
			
		||||
// cron starts a cron daemon & starts periodically scheduling builds.
 | 
			
		||||
pub fn cron(conf Config) ? {
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +18,8 @@ pub fn cron(conf Config) ? {
 | 
			
		|||
		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()
 | 
			
		||||
 | 
			
		||||
	ce := expression.parse_expression(conf.global_schedule) or {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,11 +4,11 @@ import time
 | 
			
		|||
import sync.stdatomic
 | 
			
		||||
import build
 | 
			
		||||
 | 
			
		||||
const build_empty = 0
 | 
			
		||||
 | 
			
		||||
const build_running = 1
 | 
			
		||||
 | 
			
		||||
const build_done = 2
 | 
			
		||||
const (
 | 
			
		||||
	build_empty   = 0
 | 
			
		||||
	build_running = 1
 | 
			
		||||
	build_done    = 2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// clean_finished_builds removes finished builds from the build slots & returns
 | 
			
		||||
// them.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,12 +6,9 @@ import env
 | 
			
		|||
struct Config {
 | 
			
		||||
pub:
 | 
			
		||||
	log_level    string = 'WARN'
 | 
			
		||||
	log_file     string = 'vieter.log'
 | 
			
		||||
	pkg_dir      string
 | 
			
		||||
	download_dir string
 | 
			
		||||
	data_dir     string
 | 
			
		||||
	api_key      string
 | 
			
		||||
	repos_dir    string
 | 
			
		||||
	repos_file   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) {
 | 
			
		||||
		// 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'.")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,12 @@ import repo
 | 
			
		|||
import util
 | 
			
		||||
import db
 | 
			
		||||
 | 
			
		||||
const port = 8000
 | 
			
		||||
const (
 | 
			
		||||
	port          = 8000
 | 
			
		||||
	log_file_name = 'vieter.log'
 | 
			
		||||
	repo_dir_name = 'repos'
 | 
			
		||||
	db_file_name  = 'vieter.sqlite'
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
struct App {
 | 
			
		||||
	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.')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	os.mkdir_all(conf.data_dir) or { util.exit_with_message(1, 'Failed to create data directory.') }
 | 
			
		||||
 | 
			
		||||
	mut logger := log.Log{
 | 
			
		||||
		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()
 | 
			
		||||
 | 
			
		||||
	defer {
 | 
			
		||||
| 
						 | 
				
			
			@ -45,17 +53,15 @@ pub fn server(conf Config) ? {
 | 
			
		|||
		logger.close()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	repo_dir := os.join_path_single(conf.data_dir, server.repo_dir_name)
 | 
			
		||||
	// 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())
 | 
			
		||||
		exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	os.mkdir_all(conf.download_dir) or {
 | 
			
		||||
		util.exit_with_message(1, 'Failed to create download directory.')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	db := db.init('test.db') or { util.exit_with_message(1, 'Failed to initialize database.') }
 | 
			
		||||
	db_file := os.join_path_single(conf.data_dir, server.db_file_name)
 | 
			
		||||
	db := db.init(db_file) or { util.exit_with_message(1, 'Failed to initialize database.') }
 | 
			
		||||
 | 
			
		||||
	web.run(&App{
 | 
			
		||||
		logger: logger
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,8 @@
 | 
			
		|||
# This file contains settings used during development
 | 
			
		||||
api_key = "test"
 | 
			
		||||
download_dir = "data/downloads"
 | 
			
		||||
repos_dir = "data/repos"
 | 
			
		||||
data_dir = "data"
 | 
			
		||||
pkg_dir = "data/pkgs"
 | 
			
		||||
log_level = "DEBUG"
 | 
			
		||||
repos_file = "data/repos.json"
 | 
			
		||||
default_arch = "x86_64"
 | 
			
		||||
 | 
			
		||||
address = "http://localhost:8000"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue