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_dircron-docs
							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