diff --git a/.dockerignore b/.dockerignore index 643e6db..d55305a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ * -!src/ +!vieter/ !Makefile diff --git a/.gitignore b/.gitignore index 8c67f97..8d15c59 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,8 @@ *.c data/ - -# Build artifacts -vieter -dvieter -pvieter -vieter.c +vieter/vieter # Ignore testing files *.pkg* vieter.log - -# External lib; gets added by Makefile -libarchive-* diff --git a/.woodpecker/.build.yml b/.woodpecker/.build.yml deleted file mode 100644 index 40a50e1..0000000 --- a/.woodpecker/.build.yml +++ /dev/null @@ -1,18 +0,0 @@ -pipeline: - vieter: - image: 'chewingbever/vlang:latest' - group: 'build' - commands: - - make vieter - - debug: - image: 'chewingbever/vlang:latest' - group: 'build' - commands: - - make debug - - prod: - image: 'chewingbever/vlang:latest' - group: 'build' - commands: - - make prod diff --git a/.woodpecker/.lint.yml b/.woodpecker/.lint.yml deleted file mode 100644 index 72529e7..0000000 --- a/.woodpecker/.lint.yml +++ /dev/null @@ -1,5 +0,0 @@ -pipeline: - lint: - image: 'chewingbever/vlang:latest' - commands: - - make fmt diff --git a/.woodpecker/.publish.yml b/.woodpecker/.publish.yml deleted file mode 100644 index 490d422..0000000 --- a/.woodpecker/.publish.yml +++ /dev/null @@ -1,24 +0,0 @@ -branches: [main, dev] - -pipeline: - dev: - image: plugins/docker - secrets: [ docker_username, docker_password ] - settings: - repo: chewingbever/vieter - tag: dev - when: - event: push - branch: dev - - release: - image: plugins/docker - secrets: [ docker_username, docker_password ] - settings: - repo: chewingbever/vieter - tag: - - latest - - $CI_COMMIT_TAG - when: - event: tag - branch: main diff --git a/Dockerfile b/Dockerfile index 556ca58..e8b2484 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,20 @@ -FROM chewingbever/vlang:latest AS builder +FROM archlinux:latest AS builder -WORKDIR /app - -# Copy over source code & build production binary -COPY src ./src +WORKDIR /src +COPY vieter ./vieter COPY Makefile ./ -RUN make prod + +RUN pacman \ + -Syu --noconfirm --needed \ + gcc git openssl make && \ + make customv && \ + jjr-v/v -prod vieter -FROM alpine:3.15 +FROM archlinux:latest ENV REPO_DIR=/data -RUN apk update && \ - apk add --no-cache \ - libarchive - -COPY --from=builder /app/pvieter /usr/local/bin/vieter +COPY --from=builder /src/vieter/vieter /usr/local/bin/ ENTRYPOINT [ "/usr/local/bin/vieter" ] diff --git a/Makefile b/Makefile index 15c52cd..a48a802 100644 --- a/Makefile +++ b/Makefile @@ -1,60 +1,18 @@ -# =====CONFIG===== -SRC_DIR := src -SOURCES != find '$(SRC_DIR)' -iname '*.v' - -LARCHIVE_VER := 3.5.2 -LARCHIVE_DIR := libarchive-$(LARCHIVE_VER) -LARCHIVE_LIB := $(LARCHIVE_DIR)/libarchive/libarchive.so - -# Custom V command for linking libarchive -# V := LDFLAGS=$(PWD)/$(LARCHIVE_LIB) v -cflags '-I$(PWD)/$(LARCHIVE_DIR) -I $(PWD)/$(LARCHIVE_DIR)' -V := v - -all: vieter - -# =====COMPILATION===== -# Regular binary -vieter: $(SOURCES) - $(V) -g -o vieter $(SRC_DIR) - -# Debug build using gcc -.PHONY: debug -debug: dvieter -dvieter: $(SOURCES) - $(V) -keepc -cg -cc gcc -o dvieter $(SRC_DIR) - -# Optimised production build -.PHONY: prod -prod: pvieter -pvieter: $(SOURCES) - $(V) -o pvieter -prod $(SRC_DIR) - -.PHONY: c -c: - $(V) -o vieter.c $(SRC_DIR) - - -# =====EXECUTION===== -# Run the server in the default 'data' directory .PHONY: run -run: vieter - API_KEY=test REPO_DIR=data LOG_LEVEL=DEBUG ./vieter +run: + API_KEY=test REPO_DIR=data LOG_LEVEL=DEBUG v -cg run vieter .PHONY: run-prod -run-prod: prod - API_KEY=test REPO_DIR=data LOG_LEVEL=DEBUG ./vieter-prod +run-prod: + API_KEY=test REPO_DIR=data LOG_LEVEL=DEBUG v -prod run vieter -# Same as run, but restart when the source code changes .PHONY: watch watch: - API_KEY=test REPO_DIR=data LOG_LEVEL=DEBUG $(V) watch run vieter + API_KEY=test REPO_DIR=data LOG_LEVEL=DEBUG v watch run vieter - -# =====OTHER===== -# Format the V codebase .PHONY: fmt fmt: - v fmt -w $(SRC_DIR) + v fmt -w vieter # Pulls & builds my personal build of the v compiler, required for this project to function .PHONY: customv @@ -65,15 +23,3 @@ customv: --single-branch \ https://github.com/ChewingBever/v jjr-v '$(MAKE)' -C jjr-v - - -# =====LIBARCHIVE===== -.PHONY: libarchive -libarchive: $(LARCHIVE_LIB) -$(LARCHIVE_LIB): - curl -o - "https://libarchive.org/downloads/libarchive-${LARCHIVE_VER}.tar.gz" | tar xzf - - cd "libarchive-${LARCHIVE_VER}" && cmake . - '$(MAKE)' -C "libarchive-${LARCHIVE_VER}" - -clean: - rm -rf '$(LARCHIVE_DIR)' 'data' 'vieter' 'dvieter' 'pvieter' 'vieter.c' diff --git a/src/archive/archive.v b/src/archive/archive.v deleted file mode 100644 index ca911c7..0000000 --- a/src/archive/archive.v +++ /dev/null @@ -1,43 +0,0 @@ -module archive - -import os - -pub fn get_pkg_info(pkg_path string) ?string { - if !os.is_file(pkg_path) { - return error("'$pkg_path' doesn't exist or isn't a file.") - } - - a := C.archive_read_new() - entry := C.archive_entry_new() - mut r := 0 - - C.archive_read_support_filter_all(a) - C.archive_read_support_format_all(a) - - // TODO find out where does this 10240 come from - r = C.archive_read_open_filename(a, &char(pkg_path.str), 10240) - defer { - C.archive_read_free(a) - } - - if r != C.ARCHIVE_OK { - return error('Failed to open package.') - } - - // We iterate over every header in search of the .PKGINFO one - mut buf := voidptr(0) - for C.archive_read_next_header(a, &entry) == C.ARCHIVE_OK { - if C.strcmp(C.archive_entry_pathname(entry), c'.PKGINFO') == 0 { - size := C.archive_entry_size(entry) - - // TODO can this unsafe block be avoided? - buf = unsafe { malloc(size) } - C.archive_read_data(a, voidptr(buf), size) - break - } else { - C.archive_read_data_skip(a) - } - } - - return unsafe { cstring_to_vstring(&char(buf)) } -} diff --git a/src/archive/bindings.v b/src/archive/bindings.v deleted file mode 100644 index 678d715..0000000 --- a/src/archive/bindings.v +++ /dev/null @@ -1,46 +0,0 @@ -module archive - -#flag -larchive - -#include "archive.h" - -struct C.archive {} - -// Create a new archive struct -fn C.archive_read_new() &C.archive -fn C.archive_read_support_filter_all(&C.archive) -fn C.archive_read_support_format_all(&C.archive) - -// Open an archive for reading -fn C.archive_read_open_filename(&C.archive, &char, int) int - -// Go to next entry header in archive -fn C.archive_read_next_header(&C.archive, &&C.archive_entry) int - -// Skip reading the current entry -fn C.archive_read_data_skip(&C.archive) - -// Free an archive -fn C.archive_read_free(&C.archive) int - -// Read an archive entry's contents into a pointer -fn C.archive_read_data(&C.archive, voidptr, int) - -#include "archive_entry.h" - -struct C.archive_entry {} - -// Create a new archive_entry struct -fn C.archive_entry_new() &C.archive_entry - -// Get the filename of the given entry -fn C.archive_entry_pathname(&C.archive_entry) &char - -// Get an entry's file size -// Note: this function actually returns an i64, but as this can't be used as an arugment to malloc, we'll just roll with it & assume an entry is never bigger than 4 gigs -fn C.archive_entry_size(&C.archive_entry) int - -#include - -// Compare two C strings; 0 means they're equal -fn C.strcmp(&char, &char) int diff --git a/src/auth.v b/vieter/auth.v similarity index 100% rename from src/auth.v rename to vieter/auth.v diff --git a/src/main.v b/vieter/main.v similarity index 90% rename from src/main.v rename to vieter/main.v index af6b06c..b974864 100644 --- a/src/main.v +++ b/vieter/main.v @@ -5,7 +5,6 @@ import os import log import io import repo -import archive const port = 8000 @@ -101,12 +100,3 @@ fn main() { repo: repo }, port) } - -// fn main() { -// // archive.list_filenames() -// info := archive.get_pkg_info('test/jjr-joplin-desktop-2.6.10-4-x86_64.pkg.tar.zst') or { -// eprintln(err.msg) -// return -// } -// println(info) -// } diff --git a/src/repo.v b/vieter/repo.v similarity index 100% rename from src/repo.v rename to vieter/repo.v diff --git a/src/routes.v b/vieter/routes.v similarity index 100% rename from src/routes.v rename to vieter/routes.v diff --git a/src/web/logging.v b/vieter/web/logging.v similarity index 100% rename from src/web/logging.v rename to vieter/web/logging.v diff --git a/src/web/parse.v b/vieter/web/parse.v similarity index 100% rename from src/web/parse.v rename to vieter/web/parse.v diff --git a/src/web/web.v b/vieter/web/web.v similarity index 100% rename from src/web/web.v rename to vieter/web/web.v