(use-modules (ice-9 match) (srfi srfi-1) (srfi srfi-13) (srfi srfi-64) (fruix packages freebsd) (fruix system freebsd utils)) (define repo-root (or (getenv "FRUIX_REPO_ROOT") (error "FRUIX_REPO_ROOT is not set"))) (define guile-bin (or (getenv "GUILE_BIN") (error "GUILE_BIN is not set"))) (define fruix-script (string-append repo-root "/scripts/fruix.scm")) (define (cli-output . args) (apply command-output guile-bin (append '("--no-auto-compile" "-s") (list fruix-script) args))) (define (output-lines text) (filter (lambda (line) (not (string-null? line))) (string-split text #\newline))) (define (summary-line-name line) (car (string-split line #\tab))) (define (metadata-value text key) (let ((prefix (string-append key "="))) (let loop ((lines (output-lines text))) (match lines (() #f) ((line . rest) (if (string-prefix? prefix line) (substring line (string-length prefix)) (loop rest))))))) (test-begin "package-cli") (test-assert "find-freebsd-package locates nodejs" (let ((package (find-freebsd-package "freebsd-nodejs"))) (and package (string=? (freebsd-package-version package) "24.14.0_2")))) (test-assert "search-freebsd-packages finds nodejs by name" (member "freebsd-nodejs" (map freebsd-package-name (search-freebsd-packages "node")))) (test-assert "search-freebsd-packages finds npm by text" (member "freebsd-npm" (map freebsd-package-name (search-freebsd-packages "node")))) (let ((list-output (cli-output "package" "list"))) (test-assert "package list prints nodejs" (member "freebsd-nodejs" (map summary-line-name (output-lines list-output)))) (test-assert "package list prints neovim" (member "freebsd-neovim" (map summary-line-name (output-lines list-output))))) (let ((search-output (cli-output "package" "search" "node"))) (test-assert "package search prints nodejs" (member "freebsd-nodejs" (map summary-line-name (output-lines search-output)))) (test-assert "package search prints npm" (member "freebsd-npm" (map summary-line-name (output-lines search-output))))) (let ((show-output (cli-output "package" "show" "freebsd-nodejs"))) (test-equal "package show reports name" "freebsd-nodejs" (metadata-value show-output "package_name")) (test-equal "package show reports version" "24.14.0_2" (metadata-value show-output "package_version")) (test-equal "package show reports build system" "copy-build-system" (metadata-value show-output "build_system")) (test-assert "package show reports node binary target" (string-contains (metadata-value show-output "install_targets") "bin/node"))) (let* ((store-dir (mktemp-directory "/tmp/fruix-package-cli-store.XXXXXX")) (build-output (cli-output "package" "build" "freebsd-ripgrep" "--store" store-dir)) (store-path (metadata-value build-output "store_path"))) (test-equal "package build reports action" "package-build" (metadata-value build-output "action")) (test-equal "package build reports package name" "freebsd-ripgrep" (metadata-value build-output "package_name")) (test-assert "package build creates store path" (file-exists? store-path)) (test-assert "package build stages rg binary" (file-exists? (string-append store-path "/bin/rg"))) (test-assert "package build writes build info" (file-exists? (string-append store-path "/.fruix-build-info.scm")))) (test-end "package-cli")