;;; kolam --- GraphQL implementation ;;; Copyright © 2022 Arun Isaac ;;; ;;; This file is part of kolam. ;;; ;;; kolam is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU Affero General Public License as ;;; published by the Free Software Foundation; either version 3 of the ;;; License, or (at your option) any later version. ;;; ;;; kolam is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;; Affero General Public License for more details. ;;; ;;; You should have received a copy of the GNU Affero General Public ;;; License along with kolam. If not, see ;;; . (import (rnrs io ports) (srfi srfi-26) (ice-9 eval-string) (ice-9 match) (ice-9 popen) (guix gexp) (guix packages) (guix scripts) (guix store)) (define (call-with-input-pipe command proc) "Call PROC with input pipe to COMMAND. COMMAND is a list of program arguments." (match command ((prog args ...) (let ((port #f)) (dynamic-wind (lambda () (set! port (apply open-pipe* OPEN_READ prog args))) (cut proc port) (cut close-pipe port)))))) (define (call-with-archive-file archive file proc) "Call PROC with port reading FILE in lzip compressed tar ARCHIVE." (call-with-input-pipe (list "tar" "--extract" "--to-stdout" "--file" archive (string-append (basename archive ".tar.lz") "/" file)) proc)) (define (package-in-archive dist-archive) "Return the package object in guix.scm of DIST-ARCHIVE." (call-with-archive-file dist-archive "guix.scm" (lambda (port) (eval-string (get-string-all port) #:file (string-append (getcwd) "/guix.scm"))))) (define (check-build dist-archive) "Check if package in DIST-ARCHIVE builds correctly." (run-with-store (open-connection) (build-package (package (inherit (package-in-archive dist-archive)) (source (local-file dist-archive)))))) (match (program-arguments) ((_ dist-archive) (check-build dist-archive)))