aboutsummaryrefslogtreecommitdiff
path: root/.guix/modules/gn-auth.scm
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-08-16 05:38:50 +0300
committerFrederick Muriuki Muriithi2023-08-16 05:38:50 +0300
commit784d177cfecd55a5162f4ac249207970a5911b3c (patch)
treee5f0c07433da06e85086d8bb242bb84ad3e71f42 /.guix/modules/gn-auth.scm
parent2fb99e7b2fae1396bb53c5c231003c780a311941 (diff)
downloadgn-auth-784d177cfecd55a5162f4ac249207970a5911b3c.tar.gz
Avoid extreme nesting for single-package channel.
Diffstat (limited to '.guix/modules/gn-auth.scm')
-rw-r--r--.guix/modules/gn-auth.scm149
1 files changed, 149 insertions, 0 deletions
diff --git a/.guix/modules/gn-auth.scm b/.guix/modules/gn-auth.scm
new file mode 100644
index 0000000..315bdca
--- /dev/null
+++ b/.guix/modules/gn-auth.scm
@@ -0,0 +1,149 @@
+(define-module (gn-auth)
+ #:use-module (guix)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #: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 django)
+
+ #: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))
+
+(define %source-dir (dirname (dirname (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."
+ (if (git-predicate %source-dir)
+ (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))))))))
+ ;; Figure out a way to get the version in the checkouts when building
+ "v0.0.0"))
+
+(define vcs-file?
+ (or (git-predicate %source-dir)
+ (const #t)))
+
+(define-public python-authlib
+ (package
+ (name "python-authlib")
+ (version "1.2.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "Authlib" version))
+ (sha256
+ (base32
+ "178ycfypdv1hy4zjm09rmysxakmwch2n6a5wypwmx4d5hc4fi8sg"))))
+ (build-system python-build-system)
+ (native-inputs (list python-httpx
+ python-flask
+ python-django
+ python-werkzeug
+ python-starlette
+ python-sqlalchemy
+ python-pycryptodomex))
+ (propagated-inputs (list python-cryptography))
+ (arguments `(#:tests? #f)) ;; temporarily deactivate tests
+ (home-page "https://authlib.org/")
+ (synopsis
+ "The ultimate Python library in building OAuth and OpenID Connect servers and clients.")
+ (description
+ "The ultimate Python library in building OAuth and OpenID Connect servers and
+clients. It is designed from low level specifications implementations to high
+level frameworks integrations, to meet the needs of everyone.")
+ (license license:bsd-3)))
+
+(define-public gn-auth
+ (package
+ (name "gn-auth")
+ (version (string-append (get-latest-version)
+ "-git-"
+ (substring (get-commit) 0 9)))
+ (source (local-file %source-dir "gn-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+)))
+
+gn-auth