aboutsummaryrefslogtreecommitdiff
path: root/.guix/modules/gn/packages/gn-auth.scm
diff options
context:
space:
mode:
Diffstat (limited to '.guix/modules/gn/packages/gn-auth.scm')
-rw-r--r--.guix/modules/gn/packages/gn-auth.scm114
1 files changed, 114 insertions, 0 deletions
diff --git a/.guix/modules/gn/packages/gn-auth.scm b/.guix/modules/gn/packages/gn-auth.scm
new file mode 100644
index 0000000..4f4b7a9
--- /dev/null
+++ b/.guix/modules/gn/packages/gn-auth.scm
@@ -0,0 +1,114 @@
+(define-module (gn gn-auth)
+ #:use-module (guix)
+ #:use-module (guix git-download)
+ #:use-module (guix build-system python)
+ #:use-module ((guix licenses) #:prefix license:)
+
+ #:use-module (git oid)
+ #:use-module (git tag)
+ #:use-module (git bindings)
+ #:use-module (git reference)
+ #:use-module (git repository)
+
+
+ ;; Packages from guix
+ #:use-module (gnu packages check)
+
+ #:use-module (gnu packages python-web)
+ #:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages python-check)
+ #:use-module (gnu packages python-crypto)
+
+ #:use-module (gnu packages databases)
+
+
+ ;; Packages from guix-bioinformatics
+ #:use-module (gn packages python-web))
+
+(define %source-dir (dirname (dirname (dirname (current-filename)))))
+
+(define (get-commit)
+ "Retrieve the commit if the source directory is a repository."
+ (if (git-predicate %source-dir)
+ (begin (let ((commit #f))
+ (libgit2-init!)
+ (set! commit (oid->string
+ (reference-target
+ (repository-head (repository-open %source-dir)))))
+ (libgit2-shutdown!)
+ commit))
+ "NOTAREPOSITORY"))
+
+(define (list-last lst)
+ (let ((len (length lst)))
+ (if (> len 0)
+ (list-ref lst (- len 1)))))
+
+(define (process-version repo-head tag-vals)
+ (let ((version-prefix (list-last (string-split (car tag-vals) #\/)))
+ (repo-head-str (oid->string repo-head)))
+ (if (zero? (oid-cmp repo-head
+ (tag-target-id (cdr tag-vals))))
+ version-prefix
+ (string-append version-prefix "-" (substring repo-head-str 0 8)))))
+
+(define (get-latest-version)
+ "Get latest version tag from repository."
+ (let ((%repo #f)
+ (%tags (list))
+ (%repo-head #f))
+ (begin (libgit2-init!)
+ (set! %repo (repository-open %source-dir))
+ (set! %repo-head (reference-target (repository-head %repo)))
+ (tag-foreach %repo
+ (lambda (tname tref)
+ (set! %tags (list (cons tname (tag-lookup %repo tref))))
+ 0))
+ (libgit2-shutdown!)
+ (if (zero? (length %tags))
+ (string-append "v0.0.0-" (substring (oid->string %repo-head) 0 8))
+ (process-version
+ %repo-head
+ (list-last (sort-list %tags (lambda (item) (error item)))))))))
+
+(define vcs-file?
+ (or (git-predicate %source-dir)
+ (const #t)))
+
+(package
+ (name "genenetwork-auth")
+ (version (string-append (get-latest-version)
+ "-git-"
+ (substring (get-commit) 0 9)))
+ (source (local-file %source-dir "genenetwork-auth-checkout"
+ #:recursive? #t
+ #:select? vcs-file?))
+ (build-system python-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'check
+ (lambda _ (invoke "pytest" "-k" "unit_test"))))))
+ ;; (inputs (list))
+ (native-inputs
+ (list python-mypy
+ python-pytest
+ python-pylint
+ python-hypothesis
+ python-pytest-mock
+ python-mypy-extensions))
+ (propagated-inputs
+ (list python-flask
+ python-redis
+ python-authlib
+ python-pymonad
+ yoyo-migrations
+ python-bcrypt ;; remove after removing all references
+ python-mysqlclient
+ python-argon2-cffi
+ python-email-validator))
+ (home-page "https://github.com/genenetwork/gn-auth")
+ (synopsis "Authentication and Authorisation server for GeneNetwork services.")
+ (description "Authentication and Authorisation server for GeneNetwork services.")
+ (license license:agpl3+))