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')" && \ | ||||
|             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