aboutsummaryrefslogtreecommitdiff
# -*- coding: utf-8 -*-
# GNU Guix --- Functional package management for GNU
# Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
#
# This file is part of GNU Guix.
#
# GNU Guix 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.
#
# GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

import os
import site
import sys

# Commentary:
#
# Site-specific customization for Guix.
#
# The program below honors the GUIX_PYTHONPATH environment variable to
# discover Python packages.  File names appearing in this variable that match
# a predefined versioned installation prefix are added to the sys.path.  To be
# considered, a Python package must be installed under the
# 'lib/pythonX.Y/site-packages' directory, where X and Y are the major and
# minor version numbers of the Python interpreter.
#
# Code:

major_minor = '{}.{}'.format(*sys.version_info)
site_packages_prefix = os.path.join(
    'lib', 'python' + major_minor, 'site-packages')
python_site = os.path.normpath(os.path.join(sys.prefix, site_packages_prefix))

try:
    all_sites_raw = os.environ['GUIX_PYTHONPATH'].split(os.path.pathsep)
except KeyError:
    all_sites_raw = []
# Normalize paths, otherwise a trailing slash would cause it to not match.
all_sites_norm = [os.path.normpath(p) for p in all_sites_raw]
matching_sites = [p for p in all_sites_norm
                  if p.endswith(site_packages_prefix)]

if matching_sites:
    # Deduplicate the entries, append them to sys.path, and handle any
    # .pth files they contain.
    for s in matching_sites:
        site.addsitedir(s)

    # Move the entries that were appended to sys.path in front of
    # Python's own site-packages directory.  This enables Guix
    # packages to override Python's bundled packages, such as 'pip'.
    python_site_index = sys.path.index(python_site)
    new_site_start_index = sys.path.index(matching_sites[0])
    if python_site_index < new_site_start_index:
        sys.path = (sys.path[:python_site_index]
                    + sys.path[new_site_start_index:]
                    + sys.path[python_site_index:new_site_start_index])
3de919455273bd3b71aa7b5c'>diff)downloadguix-acb256d4583caa48e601c8cd0572ee4f269887fc.tar.gz
guix-acb256d4583caa48e601c8cd0572ee4f269887fc.zip
services: guix-data-service: Support specifying configuration.
The database contains some tables that are effectively used for configuration. This commit starts to expose these to the guix service, enabling the configuration to be handled by the service. * gnu/services/guix.scm (<guix-data-service-configuration>): Add git-repositories and build-servers. (guix-data-service-configuration-git-repositories, guix-data-service-configuration-build-servers): New procedures. (guix-data-service-shepherd-services): Add new shepherd service to setup the database. Change-Id: I519efd9157b60f18c7e80e3bdc92c0e3c5729334
Diffstat (limited to 'gnu/services/guix.scm')
-rw-r--r--gnu/services/guix.scm46
1 files changed, 44 insertions, 2 deletions
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index 6c58b3a292..7a399238ef 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -100,6 +100,8 @@
guix-data-service-host
guix-data-service-getmail-idle-mailboxes
guix-data-service-commits-getmail-retriever-configuration
+ guix-data-service-configuration-git-repositories
+ guix-data-service-configuration-build-servers
guix-data-service-type
@@ -556,7 +558,11 @@
(default '()))
(extra-process-jobs-options
guix-data-service-extra-process-jobs-options
- (default '())))
+ (default '()))
+ (git-repositories guix-data-service-configuration-git-repositories
+ (default #f))
+ (build-servers guix-data-service-configuration-build-servers
+ (default #f)))
(define (guix-data-service-profile-packages config)
"Return the guix-data-service package, this will populate the
@@ -566,7 +572,8 @@ ca-certificates.crt file in the system profile."
(define (guix-data-service-shepherd-services config)
(match-record config <guix-data-service-configuration>
- (package user group port host extra-options extra-process-jobs-options)
+ (package user group port host extra-options extra-process-jobs-options
+ git-repositories build-servers)
(list
(shepherd-service
(documentation "Guix Data Service web server")
@@ -596,6 +603,41 @@ ca-certificates.crt file in the system profile."
(stop #~(make-kill-destructor)))
(shepherd-service
+ (documentation "Guix Data Service setup database")
+ (provision '(guix-data-service-setup-database))
+ (requirement '(postgres))
+ (one-shot? #t)
+ (start
+ (with-extensions (cons package
+ ;; This is a poorly constructed Guile load path,
+ ;; since it contains things that aren't Guile
+ ;; libraries, but it means that the Guile
+ ;; libraries needed for the Guix Data Service
+ ;; don't need to be individually specified here.
+ (append
+ (map second (package-inputs package))
+ (map second (package-propagated-inputs package))))
+ #~(lambda _
+ (use-modules (guix-data-service database)
+ (guix-data-service model git-repository)
+ (guix-data-service model build-server))
+
+ (begin
+ ((@ (guix-data-service database) run-sqitch))
+
+ #$@(if git-repositories
+ #~(((@ (guix-data-service model git-repository)
+ specify-git-repositories)
+ '(#$@git-repositories)))
+ '())
+ #$@(if build-servers
+ #~(((@ (guix-data-service model build-server)
+ specify-build-servers)
+ '(#$@build-servers)))
+ '())))))
+ (auto-start? #t))
+
+ (shepherd-service
(documentation "Guix Data Service process jobs")
(provision '(guix-data-service-process-jobs))
(requirement '(postgres networking))