diff options
author | Arun Isaac | 2022-04-15 13:56:27 +0530 |
---|---|---|
committer | Arun Isaac | 2022-04-15 13:56:27 +0530 |
commit | d2b84265ad7068c6a22fa04f2820b80a0f481a78 (patch) | |
tree | 7a597c95a8dc9469dee1d8051508210ae1996ce3 /genenetwork | |
download | gn-machines-d2b84265ad7068c6a22fa04f2820b80a0f481a78.tar.gz |
Initial commit
Diffstat (limited to 'genenetwork')
-rw-r--r-- | genenetwork/development-helper.scm | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/genenetwork/development-helper.scm b/genenetwork/development-helper.scm new file mode 100644 index 0000000..e8364ef --- /dev/null +++ b/genenetwork/development-helper.scm @@ -0,0 +1,159 @@ +;;; genenetwork-machines --- Guix configuration for genenetwork machines +;;; Copyright © 2022 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; This file is part of genenetwork-machines. +;;; +;;; genenetwork-machines is free software: you can redistribute it +;;; and/or modify it under the terms of the GNU General Public License +;;; as published by the Free Software Foundation, either version 3 of +;;; the License, or (at your option) any later version. +;;; +;;; genenetwork-machines 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 General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with genenetwork-machines. If not, see +;;; <https://www.gnu.org/licenses/>. + +(define-module (genenetwork development-helper) + #:use-module (ice-9 match) + #:use-module (guix gexp) + #:use-module (guix profiles) + #:use-module (guix search-paths) + #:use-module (forge build utils)) + +(define (command-in-source-gexp source profile command) + "Return a G-expression that runs COMMAND in PROFILE and with SOURCE +as the current directory. SOURCE and PROFILE are store items. COMMAND +is a list of strings specifying the command to be executed." + (with-imported-modules '((guix build utils)) + (with-profile profile + #~(begin + (use-modules (rnrs exceptions) + (guix build utils)) + + (chdir #$source) + (guard (condition ((invoke-error? condition) + (format (current-error-port) + "`~a~{ ~a~}' failed with exit status ~a~%" + (invoke-error-program condition) + (invoke-error-arguments condition) + (invoke-error-exit-status condition)) + (exit #f))) + (apply invoke '#$command)) + (mkdir-p #$output))))) + +(define (asdf-test-gexp source profile system asd-files) + "Return a G-expression that tests SYSTEM using asdf after loading +ASD-FILES. SOURCE is the source code under test. PROFILE is a profile +with all necessary dependencies. SOURCE and PROFILE are both store +items." + (with-imported-modules '((guix build lisp-utils) + (guix build utils)) + (with-profile profile + #~(begin + (use-modules (guix build lisp-utils) + (guix build utils)) + + (chdir #$source) + (setenv "HOME" "/tmp") + (parameterize ((%lisp "sbcl") + (%lisp-type "sbcl")) + (test-system #$system '#$asd-files #f)) + (mkdir-p #$output))))) + +(define (genenetwork3-lint-gexp genenetwork3-source profile) + "Return a G-expression that runs GeneNetwork3 lint tests in PROFILE +with GENENETWORK3-SOURCE as the current directory. GENENETWORK3-SOURCE +is a checkout of the genenetwork3 source code. PROFILE is a profile +with genenetwork3 dependencies." + (with-imported-modules '((guix build utils)) + (with-profile profile + #~(begin + (use-modules (rnrs exceptions) + (srfi srfi-26) + (ice-9 rdelim) + (guix build utils)) + + (define (shell-script? filename stat-obj) + (and (eq? (stat:type stat-obj) 'regular) + (call-with-input-file filename + (lambda (port) + (let ((first-line (read-line port))) + (and (not (eof-object? first-line)) + (> (string-length first-line) 2) + (string=? (string-take first-line 2) "#!") + (or (string-contains first-line "/bin/sh") + (string-contains first-line "/bin/bash")))))))) + + (chdir #$genenetwork3-source) + (guard (condition ((invoke-error? condition) + (format (current-error-port) + "`~a~{ ~a~}' failed with exit status ~a~%" + (invoke-error-program condition) + (invoke-error-arguments condition) + (invoke-error-exit-status condition)) + (exit #f))) + (for-each (cut invoke "shellcheck" <>) + (find-files "." shell-script?)) + (invoke "pylint" "gn3")) + (mkdir-p #$output))))) + +(define (genenetwork2-runner-gexp genenetwork2-source profile gn3-port genotype-files) + "Return a G-expression that runs the genenetwork2 server for +GENENETWORK2-SOURCE in PROFILE. GENENETWORK2-SOURCE is a checkout of +the genenetwork2 source code. PROFILE is a profile with genenetwork2 +dependencies. GN3-PORT is the port on which a local instance of +genenetwork3 is listening. GENOTYPE-FILES is the path to genotype +files." + (with-imported-modules '((guix build utils)) + (with-profile profile + #~(begin + (use-modules (guix build utils) + (ice-9 match)) + + (chdir #$genenetwork2-source) + (match (command-line) + ((_ ip port) + (setenv "SERVER_PORT" port) + (setenv "GN2_PROFILE" #$profile) + (setenv "GN_PROXY_URL" "http://genenetwork.org/gn3-proxy") + (setenv "GN3_LOCAL_URL" + (string-append "http://localhost:" + (number->string #$gn3-port))) + (setenv "GENENETWORK_FILES" #$genotype-files) + (setenv "SQL_URI" "mysql://webqtlout:webqtlout@localhost/db_webqtl") + (setenv "HOME" "/tmp") + (setenv "NO_REDIS" "no-redis") + (invoke "sh" "bin/genenetwork2"))))))) + +(define (genenetwork3-runner-gexp genenetwork3-source profile) + "Return a G-expression that runs the genenetwork3 server for +GENENETWORK3-SOURCE in PROFILE. GENENETWORK3-SOURCE is a checkout of +the genenetwork3 source code. PROFILE is a profile with genenetwork3 +dependencies." + (with-imported-modules '((guix build utils)) + (with-profile profile + #~(begin + (use-modules (guix build utils) + (ice-9 match)) + + (chdir #$genenetwork3-source) + (match (command-line) + ((_ ip port) + (invoke "gunicorn" + "-b" (string-append ip ":" port) + "gn3.app:create_app()"))))))) + +(define (tissue-website-gexp source profile) + "Return a G-expression that builds a tissue website from +SOURCE. PROFILE is a profile with necessary dependencies." + (with-imported-modules '((guix build utils)) + (with-profile profile + #~(begin + (use-modules (guix build utils)) + + (chdir #$source) + (invoke "tissue" "web" #$output))))) |