unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#50504] [PATCH] home-services: Add Mcron.
@ 2021-09-10  6:26 Andrew Tropin
  2021-09-10 18:22 ` Xinglu Chen
  0 siblings, 1 reply; 9+ messages in thread
From: Andrew Tropin @ 2021-09-10  6:26 UTC (permalink / raw)
  To: 50504; +Cc: Oleg Pykhalov, Ludovic Courtès, Xinglu Chen


* gnu/home-services/mcron.scm: New file.
* gnu/local.mk: Add this.
* doc/guix.texi: Add documentation about Mcron Home Service.
---

This is the last of home services I consider "must-have" for wip-guix-home.

It reuses two functions from (gnu services mcron) via @@, which can be
considered as a hack, the alternative solution is to expose those functions
via #:export, I can do it if it's a preffered way or suggest other ideas,
please.  The discussion on this topic: https://issues.guix.gnu.org/47238
Included Ludovic and Xinglu in CC.

I took a brief look at the testing approach, seems the most relevant is
guix-system.sh and it is just a shell script, which runs a few guix system
subcommand and check if they fail or succeed.  Please let me know, what is a
preferred way for writing tests and I'll try to provide some tests for Guix
Home in the separate patch.

 doc/guix.texi               |  31 +++++++++-
 gnu/home-services/mcron.scm | 115 ++++++++++++++++++++++++++++++++++++
 gnu/local.mk                |   1 +
 3 files changed, 146 insertions(+), 1 deletion(-)
 create mode 100644 gnu/home-services/mcron.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index e546fcc0d2..a7eacad762 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -35685,7 +35685,36 @@ for example).
 @cindex mcron
 @cindex scheduling jobs
 
-mcron info here
+The @code{(gnu home-services mcron)} module provides an interface to
+GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
+mcron, GNU@tie{}mcron}).  The information about system's mcron is
+applicable here (@pxref{Scheduled Job Execution}), the only difference
+for home services is that they have to be declared in
+@code{home-envirnoment} record instead of @code{operating-system}.
+
+@defvr {Scheme Variable} home-mcron-service-type
+This is the type of the @code{mcron} home service, whose value is an
+@code{home-mcron-configuration} object.  It allows to manage tasks
+
+This service type can be the target of a service extension that provides
+it additional job specifications (@pxref{Service Composition}).  In
+other words, it is possible to define services that provide additional
+mcron jobs to run.
+@end defvr
+
+@deftp {Data Type} home-mcron-configuration
+Data type representing the configuration of mcron.
+
+@table @asis
+@item @code{mcron} (default: @var{mcron})
+The mcron package to use.
+
+@item @code{jobs}
+This is a list of gexps (@pxref{G-Expressions}), where each gexp
+corresponds to an mcron job specification (@pxref{Syntax, mcron job
+specifications,, mcron, GNU@tie{}mcron}).
+@end table
+@end deftp
 
 @node Shepherd Home Service
 @subsection Managing User's Daemons
diff --git a/gnu/home-services/mcron.scm b/gnu/home-services/mcron.scm
new file mode 100644
index 0000000000..fdfde179a5
--- /dev/null
+++ b/gnu/home-services/mcron.scm
@@ -0,0 +1,115 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;;
+;;; 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/>.
+
+(define-module (gnu home-services mcron)
+  #:use-module (gnu packages guile-xyz)
+  #:use-module (gnu home-services)
+  #:use-module (gnu home-services shepherd)
+  #:use-module (gnu services shepherd)
+  #:use-module (guix records)
+  #:use-module (guix gexp)
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match)
+
+  #:export (home-mcron-configuration
+            home-mcron-service-type))
+
+;;; Commentary:
+;;
+;; Service for the GNU mcron cron job manager.
+;;
+;; Example configuration, the first job runs mbsync once every ten
+;; minutes, the second one writes "Mcron service" to ~/mcron-file once
+;; every minute.
+;;
+;; (service home-mcron-service-type
+;;            (home-mcron-configuration
+;;             (jobs (list #~(job '(next-minute
+;;                                  (range 0 60 10))
+;;                                (lambda ()
+;;                                  (system* "mbsync" "--all")))
+;;                         #~(job next-minute-from
+;;                                (lambda ()
+;;                                  (call-with-output-file (string-append (getenv "HOME")
+;;                                                                        "/mcron-file")
+;;                                    (lambda (port)
+;;                                      (display "Mcron service" port)))))))))
+;;
+;;; Code:
+
+(define-record-type* <home-mcron-configuration> home-mcron-configuration
+  make-home-mcron-configuration
+  home-mcron-configuration?
+  (package home-mcron-configuration-package ; package
+           (default mcron))
+  (jobs home-mcron-configuration-jobs   ; list of jobs
+        (default '())))
+
+(define job-files (@@ (gnu services mcron) job-files))
+(define shepherd-schedule-action
+  (@@ (gnu services mcron) shepherd-schedule-action))
+
+(define home-mcron-shepherd-services
+  (match-lambda
+    (($ <home-mcron-configuration> mcron '()) ; no jobs to run
+     '())
+    (($ <home-mcron-configuration> mcron jobs)
+     (let ((files (job-files mcron jobs)))
+       (list (shepherd-service
+              (documentation "User cron jobs.")
+              (provision '(mcron))
+              (modules `((srfi srfi-1)
+                         (srfi srfi-26)
+                         (ice-9 popen)            ; for the 'schedule' action
+                         (ice-9 rdelim)
+                         (ice-9 match)
+                         ,@%default-modules))
+              (start #~(make-forkexec-constructor
+                        (list #$(file-append mcron "/bin/mcron") #$@files)
+                        #:log-file (string-append
+                                    (or (getenv "XDG_LOG_HOME")
+                                        (format #f "~a/.local/var/log"
+                                                (getenv "HOME")))
+                                    "/mcron.log")))
+              (stop #~(make-kill-destructor))
+              (actions
+               (list (shepherd-schedule-action mcron files)))))))))
+
+(define home-mcron-profile (compose list home-mcron-configuration-package))
+
+(define (home-mcron-extend config jobs)
+  (home-mcron-configuration
+   (inherit config)
+   (jobs (append (home-mcron-configuration-jobs config)
+                 jobs))))
+
+(define home-mcron-service-type
+  (service-type (name 'home-mcron)
+                (extensions
+                 (list (service-extension
+                        home-shepherd-service-type
+                        home-mcron-shepherd-services)
+                       (service-extension
+                        home-profile-service-type
+                        home-mcron-profile)))
+                (compose concatenate)
+                (extend home-mcron-extend)
+                (default-value (home-mcron-configuration))
+                (description
+                 "Install and configure the GNU mcron cron job manager.")))
diff --git a/gnu/local.mk b/gnu/local.mk
index 31ad1a43db..8212bc5391 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -80,6 +80,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/home-services/configuration.scm		\
   %D%/home-services/shells.scm			\
   %D%/home-services/shepherd.scm		\
+  %D%/home-services/mcron.scm			\
   %D%/home-services/utils.scm			\
   %D%/home-services/xdg.scm			\
   %D%/image.scm					\
-- 
2.33.0





^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#50504] [PATCH] home-services: Add Mcron.
  2021-09-10  6:26 [bug#50504] [PATCH] home-services: Add Mcron Andrew Tropin
@ 2021-09-10 18:22 ` Xinglu Chen
  2021-09-13  6:44   ` Andrew Tropin
  2021-09-13  6:48   ` [bug#50504] [PATCH] fixup! " Andrew Tropin
  0 siblings, 2 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-09-10 18:22 UTC (permalink / raw)
  To: Andrew Tropin, 50504; +Cc: Oleg Pykhalov, Ludovic Courtès

[-- Attachment #1: Type: text/plain, Size: 9609 bytes --]

On Fri, Sep 10 2021, Andrew Tropin wrote:

> * gnu/home-services/mcron.scm: New file.
> * gnu/local.mk: Add this.
> * doc/guix.texi: Add documentation about Mcron Home Service.
> ---
>
> This is the last of home services I consider "must-have" for wip-guix-home.
>
> It reuses two functions from (gnu services mcron) via @@, which can be
> considered as a hack, the alternative solution is to expose those functions
> via #:export, I can do it if it's a preffered way or suggest other ideas,
> please.  The discussion on this topic: https://issues.guix.gnu.org/47238
> Included Ludovic and Xinglu in CC.

An alternative would be put it the (gnu service mcron) to share more
code between system service and home service.  This was discussed
briefly on rde-devel[1].  It might be worth discussing this issue on
guix-devel before we add too many home service.

> I took a brief look at the testing approach, seems the most relevant is
> guix-system.sh and it is just a shell script, which runs a few guix system
> subcommand and check if they fail or succeed.  Please let me know, what is a
> preferred way for writing tests and I'll try to provide some tests for Guix
> Home in the separate patch.

The ‘guix-system.sh’ script seems to only test the ‘guix system’
command, which doesn’t seem that related to the home services.  I guess
we could check the contents of the generated config files.  There is
(gnu build marionette) which creates a VM; we could then check that the
relevant process is running.  Maybe there is a better approach, though.

[1]: <https://lists.sr.ht/~abcdw/rde-devel/%3C87y2cqifpx.fsf%40yoctocell.xyz%3E>

>  doc/guix.texi               |  31 +++++++++-
>  gnu/home-services/mcron.scm | 115 ++++++++++++++++++++++++++++++++++++
>  gnu/local.mk                |   1 +
>  3 files changed, 146 insertions(+), 1 deletion(-)
>  create mode 100644 gnu/home-services/mcron.scm
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index e546fcc0d2..a7eacad762 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -35685,7 +35685,36 @@ for example).
>  @cindex mcron
>  @cindex scheduling jobs
>  
> -mcron info here
> +The @code{(gnu home-services mcron)} module provides an interface to
> +GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
> +mcron, GNU@tie{}mcron}).  The information about system's mcron is
> +applicable here (@pxref{Scheduled Job Execution}), the only difference
> +for home services is that they have to be declared in
> +@code{home-envirnoment} record instead of @code{operating-system}.

“declared in a @code{home-environemnt} record instead of a
@code{operating-system} record.”

> +@defvr {Scheme Variable} home-mcron-service-type
> +This is the type of the @code{mcron} home service, whose value is an

Why @code{mcron}?  I would use “Mcron” instead.

> +@code{home-mcron-configuration} object.  It allows to manage tasks

“It allows one to manage scheduled tasks.”

> +This service type can be the target of a service extension that provides
> +it additional job specifications (@pxref{Service Composition}).  In

s/it//

> +other words, it is possible to define services that provide additional
> +mcron jobs to run.
> +@end defvr
> +
> +@deftp {Data Type} home-mcron-configuration
> +Data type representing the configuration of mcron.
> +
> +@table @asis
> +@item @code{mcron} (default: @var{mcron})
> +The mcron package to use.
> +
> +@item @code{jobs}
> +This is a list of gexps (@pxref{G-Expressions}), where each gexp
> +corresponds to an mcron job specification (@pxref{Syntax, mcron job
> +specifications,, mcron, GNU@tie{}mcron}).
> +@end table
> +@end deftp
>  
>  @node Shepherd Home Service
>  @subsection Managing User's Daemons
> diff --git a/gnu/home-services/mcron.scm b/gnu/home-services/mcron.scm
> new file mode 100644
> index 0000000000..fdfde179a5
> --- /dev/null
> +++ b/gnu/home-services/mcron.scm
> @@ -0,0 +1,115 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
> +;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
> +;;;
> +;;; 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/>.
> +
> +(define-module (gnu home-services mcron)
> +  #:use-module (gnu packages guile-xyz)
> +  #:use-module (gnu home-services)
> +  #:use-module (gnu home-services shepherd)
> +  #:use-module (gnu services shepherd)
> +  #:use-module (guix records)
> +  #:use-module (guix gexp)
> +  #:use-module (srfi srfi-1)
> +  #:use-module (ice-9 match)
> +
> +  #:export (home-mcron-configuration
> +            home-mcron-service-type))
> +
> +;;; Commentary:
> +;;
> +;; Service for the GNU mcron cron job manager.
> +;;
> +;; Example configuration, the first job runs mbsync once every ten
> +;; minutes, the second one writes "Mcron service" to ~/mcron-file once
> +;; every minute.
> +;;
> +;; (service home-mcron-service-type
> +;;            (home-mcron-configuration
> +;;             (jobs (list #~(job '(next-minute
> +;;                                  (range 0 60 10))
> +;;                                (lambda ()
> +;;                                  (system* "mbsync" "--all")))
> +;;                         #~(job next-minute-from
> +;;                                (lambda ()
> +;;                                  (call-with-output-file (string-append (getenv "HOME")
> +;;                                                                        "/mcron-file")
> +;;                                    (lambda (port)
> +;;                                      (display "Mcron service" port)))))))))
> +;;
> +;;; Code:
> +
> +(define-record-type* <home-mcron-configuration> home-mcron-configuration
> +  make-home-mcron-configuration
> +  home-mcron-configuration?
> +  (package home-mcron-configuration-package ; package
> +           (default mcron))
> +  (jobs home-mcron-configuration-jobs   ; list of jobs
> +        (default '())))
> +
> +(define job-files (@@ (gnu services mcron) job-files))
> +(define shepherd-schedule-action
> +  (@@ (gnu services mcron) shepherd-schedule-action))
> +
> +(define home-mcron-shepherd-services
> +  (match-lambda
> +    (($ <home-mcron-configuration> mcron '()) ; no jobs to run
> +     '())
> +    (($ <home-mcron-configuration> mcron jobs)
> +     (let ((files (job-files mcron jobs)))
> +       (list (shepherd-service
> +              (documentation "User cron jobs.")
> +              (provision '(mcron))
> +              (modules `((srfi srfi-1)
> +                         (srfi srfi-26)
> +                         (ice-9 popen)            ; for the 'schedule' action
> +                         (ice-9 rdelim)
> +                         (ice-9 match)
> +                         ,@%default-modules))
> +              (start #~(make-forkexec-constructor
> +                        (list #$(file-append mcron "/bin/mcron") #$@files)
> +                        #:log-file (string-append
> +                                    (or (getenv "XDG_LOG_HOME")
> +                                        (format #f "~a/.local/var/log"
> +                                                (getenv "HOME")))
> +                                    "/mcron.log")))
> +              (stop #~(make-kill-destructor))
> +              (actions
> +               (list (shepherd-schedule-action mcron files)))))))))
> +
> +(define home-mcron-profile (compose list home-mcron-configuration-package))
> +
> +(define (home-mcron-extend config jobs)
> +  (home-mcron-configuration
> +   (inherit config)
> +   (jobs (append (home-mcron-configuration-jobs config)
> +                 jobs))))
> +
> +(define home-mcron-service-type
> +  (service-type (name 'home-mcron)
> +                (extensions
> +                 (list (service-extension
> +                        home-shepherd-service-type
> +                        home-mcron-shepherd-services)
> +                       (service-extension
> +                        home-profile-service-type
> +                        home-mcron-profile)))
> +                (compose concatenate)
> +                (extend home-mcron-extend)
> +                (default-value (home-mcron-configuration))
> +                (description
> +                 "Install and configure the GNU mcron cron job manager.")))
> diff --git a/gnu/local.mk b/gnu/local.mk
> index 31ad1a43db..8212bc5391 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -80,6 +80,7 @@ GNU_SYSTEM_MODULES =				\
>    %D%/home-services/configuration.scm		\
>    %D%/home-services/shells.scm			\
>    %D%/home-services/shepherd.scm		\
> +  %D%/home-services/mcron.scm			\
>    %D%/home-services/utils.scm			\
>    %D%/home-services/xdg.scm			\
>    %D%/image.scm					\
> -- 
> 2.33.0

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#50504] [PATCH] home-services: Add Mcron.
  2021-09-10 18:22 ` Xinglu Chen
@ 2021-09-13  6:44   ` Andrew Tropin
  2021-09-13 16:16     ` Xinglu Chen
  2021-09-13  6:48   ` [bug#50504] [PATCH] fixup! " Andrew Tropin
  1 sibling, 1 reply; 9+ messages in thread
From: Andrew Tropin @ 2021-09-13  6:44 UTC (permalink / raw)
  To: Xinglu Chen, 50504; +Cc: Oleg Pykhalov, Ludovic Courtès

[-- Attachment #1: Type: text/plain, Size: 10239 bytes --]

On 2021-09-10 20:22, Xinglu Chen wrote:

> On Fri, Sep 10 2021, Andrew Tropin wrote:
>
>> * gnu/home-services/mcron.scm: New file.
>> * gnu/local.mk: Add this.
>> * doc/guix.texi: Add documentation about Mcron Home Service.
>> ---
>>
>> This is the last of home services I consider "must-have" for wip-guix-home.
>>
>> It reuses two functions from (gnu services mcron) via @@, which can be
>> considered as a hack, the alternative solution is to expose those functions
>> via #:export, I can do it if it's a preffered way or suggest other ideas,
>> please.  The discussion on this topic: https://issues.guix.gnu.org/47238
>> Included Ludovic and Xinglu in CC.
>
> An alternative would be put it the (gnu service mcron) to share more
> code between system service and home service.  This was discussed
> briefly on rde-devel[1].  It might be worth discussing this issue on
> guix-devel before we add too many home service.
>

I'll make a thread on possible modules naming for home services later
this week and will discuss this thing too.

>
>> I took a brief look at the testing approach, seems the most relevant is
>> guix-system.sh and it is just a shell script, which runs a few guix system
>> subcommand and check if they fail or succeed.  Please let me know, what is a
>> preferred way for writing tests and I'll try to provide some tests for Guix
>> Home in the separate patch.
>
> The ‘guix-system.sh’ script seems to only test the ‘guix system’
> command, which doesn’t seem that related to the home services.  I guess
> we could check the contents of the generated config files.  There is
> (gnu build marionette) which creates a VM; we could then check that the
> relevant process is running.  Maybe there is a better approach, though.
>

It was a general question about tests for Guix Home, not Mcron home
service, sorry for the confusion.

> 
> [1]:
> <https://lists.sr.ht/~abcdw/rde-devel/%3C87y2cqifpx.fsf%40yoctocell.xyz%3E>
>
>>  doc/guix.texi               |  31 +++++++++-
>>  gnu/home-services/mcron.scm | 115 ++++++++++++++++++++++++++++++++++++
>>  gnu/local.mk                |   1 +
>>  3 files changed, 146 insertions(+), 1 deletion(-)
>>  create mode 100644 gnu/home-services/mcron.scm
>>
>> diff --git a/doc/guix.texi b/doc/guix.texi
>> index e546fcc0d2..a7eacad762 100644
   >> --- a/doc/guix.texi
>> +++ b/doc/guix.texi
>> @@ -35685,7 +35685,36 @@ for example).
>>  @cindex mcron
>>  @cindex scheduling jobs
>>  
>> -mcron info here
>> +The @code{(gnu home-services mcron)} module provides an interface to
>> +GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
>> +mcron, GNU@tie{}mcron}).  The information about system's mcron is
>> +applicable here (@pxref{Scheduled Job Execution}), the only difference
>> +for home services is that they have to be declared in
>> +@code{home-envirnoment} record instead of @code{operating-system}.
>
> “declared in a @code{home-environemnt} record instead of a
> @code{operating-system} record.”
>
>> +@defvr {Scheme Variable} home-mcron-service-type
>> +This is the type of the @code{mcron} home service, whose value is an
>
> Why @code{mcron}?  I would use “Mcron” instead.
>

Good idea, but I sticked with the way it's done in a description of
system mcron service.

>
>> +@code{home-mcron-configuration} object.  It allows one to manage tasks
>
> “It allows one to manage scheduled tasks.”
>
>> +This service type can be the target of a service extension that provides
>> +it additional job specifications (@pxref{Service Composition}).  In
>
> s/it//
>
>> +other words, it is possible to define services that provide additional
>> +mcron jobs to run.
>> +@end defvr
>> +
>> +@deftp {Data Type} home-mcron-configuration
>> +Data type representing the configuration of mcron.
>> +
>> +@table @asis
>> +@item @code{mcron} (default: @var{mcron})
>> +The mcron package to use.
>> +
>> +@item @code{jobs}
>> +This is a list of gexps (@pxref{G-Expressions}), where each gexp
>> +corresponds to an mcron job specification (@pxref{Syntax, mcron job
>> +specifications,, mcron, GNU@tie{}mcron}).
>> +@end table
>> +@end deftp
>>  
>>  @node Shepherd Home Service
>>  @subsection Managing User's Daemons
>> diff --git a/gnu/home-services/mcron.scm b/gnu/home-services/mcron.scm
>> new file mode 100644
>> index 0000000000..fdfde179a5
>> --- /dev/null
>> +++ b/gnu/home-services/mcron.scm
>> @@ -0,0 +1,115 @@
>> +;;; GNU Guix --- Functional package management for GNU
>> +;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
>> +;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
>> +;;;
>> +;;; 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/>.
>> +
>> +(define-module (gnu home-services mcron)
>> +  #:use-module (gnu packages guile-xyz)
>> +  #:use-module (gnu home-services)
>> +  #:use-module (gnu home-services shepherd)
>> +  #:use-module (gnu services shepherd)
>> +  #:use-module (guix records)
>> +  #:use-module (guix gexp)
>> +  #:use-module (srfi srfi-1)
>> +  #:use-module (ice-9 match)
>> +
>> +  #:export (home-mcron-configuration
>> +            home-mcron-service-type))
>> +
>> +;;; Commentary:
>> +;;
>> +;; Service for the GNU mcron cron job manager.
>> +;;
>> +;; Example configuration, the first job runs mbsync once every ten
>> +;; minutes, the second one writes "Mcron service" to ~/mcron-file once
>> +;; every minute.
>> +;;
>> +;; (service home-mcron-service-type
>> +;;            (home-mcron-configuration
>> +;;             (jobs (list #~(job '(next-minute
>> +;;                                  (range 0 60 10))
>> +;;                                (lambda ()
>> +;;                                  (system* "mbsync" "--all")))
>> +;;                         #~(job next-minute-from
>> +;;                                (lambda ()
>> +;;                                  (call-with-output-file (string-append (getenv "HOME")
>> +;;                                                                        "/mcron-file")
>> +;;                                    (lambda (port)
>> +;;                                      (display "Mcron service" port)))))))))
>> +;;
>> +;;; Code:
>> +
>> +(define-record-type* <home-mcron-configuration> home-mcron-configuration
>> +  make-home-mcron-configuration
>> +  home-mcron-configuration?
>> +  (package home-mcron-configuration-package ; package
>> +           (default mcron))
>> +  (jobs home-mcron-configuration-jobs   ; list of jobs
>> +        (default '())))
>> +
>> +(define job-files (@@ (gnu services mcron) job-files))
>> +(define shepherd-schedule-action
>> +  (@@ (gnu services mcron) shepherd-schedule-action))
>> +
>> +(define home-mcron-shepherd-services
>> +  (match-lambda
>> +    (($ <home-mcron-configuration> mcron '()) ; no jobs to run
>> +     '())
>> +    (($ <home-mcron-configuration> mcron jobs)
>> +     (let ((files (job-files mcron jobs)))
>> +       (list (shepherd-service
>> +              (documentation "User cron jobs.")
>> +              (provision '(mcron))
>> +              (modules `((srfi srfi-1)
>> +                         (srfi srfi-26)
>> +                         (ice-9 popen)            ; for the 'schedule' action
>> +                         (ice-9 rdelim)
>> +                         (ice-9 match)
>> +                         ,@%default-modules))
>> +              (start #~(make-forkexec-constructor
>> +                        (list #$(file-append mcron "/bin/mcron") #$@files)
>> +                        #:log-file (string-append
>> +                                    (or (getenv "XDG_LOG_HOME")
>> +                                        (format #f "~a/.local/var/log"
>> +                                                (getenv "HOME")))
>> +                                    "/mcron.log")))
>> +              (stop #~(make-kill-destructor))
>> +              (actions
>> +               (list (shepherd-schedule-action mcron files)))))))))
>> +
>> +(define home-mcron-profile (compose list home-mcron-configuration-package))
>> +
>> +(define (home-mcron-extend config jobs)
>> +  (home-mcron-configuration
>> +   (inherit config)
>> +   (jobs (append (home-mcron-configuration-jobs config)
>> +                 jobs))))
>> +
>> +(define home-mcron-service-type
>> +  (service-type (name 'home-mcron)
>> +                (extensions
>> +                 (list (service-extension
>> +                        home-shepherd-service-type
>> +                        home-mcron-shepherd-services)
>> +                       (service-extension
>> +                        home-profile-service-type
>> +                        home-mcron-profile)))
>> +                (compose concatenate)
>> +                (extend home-mcron-extend)
>> +                (default-value (home-mcron-configuration))
>> +                (description
>> +                 "Install and configure the GNU mcron cron job manager.")))
>> diff --git a/gnu/local.mk b/gnu/local.mk
>> index 31ad1a43db..8212bc5391 100644
>> --- a/gnu/local.mk
>> +++ b/gnu/local.mk
>> @@ -80,6 +80,7 @@ GNU_SYSTEM_MODULES =				\
>>    %D%/home-services/configuration.scm		\
>>    %D%/home-services/shells.scm			\
>>    %D%/home-services/shepherd.scm		\
>> +  %D%/home-services/mcron.scm			\
>>    %D%/home-services/utils.scm			\
>>    %D%/home-services/xdg.scm			\
>>    %D%/image.scm					\
>> -- 
>> 2.33.0

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#50504] [PATCH] fixup! home-services: Add Mcron.
  2021-09-10 18:22 ` Xinglu Chen
  2021-09-13  6:44   ` Andrew Tropin
@ 2021-09-13  6:48   ` Andrew Tropin
  2021-09-13 16:17     ` Xinglu Chen
  2021-09-13 20:02     ` bug#50504: [PATCH] " Oleg Pykhalov
  1 sibling, 2 replies; 9+ messages in thread
From: Andrew Tropin @ 2021-09-13  6:48 UTC (permalink / raw)
  To: Oleg Pykhalov, 50504; +Cc: Ludovic Courtès, Xinglu Chen


[-- Attachment #1.1: Type: text/plain, Size: 23 bytes --]


Applied suggestions.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-fixup-home-services-Add-Mcron.patch --]
[-- Type: text/x-patch, Size: 2341 bytes --]

From f93bb50483246e3c2c8df669231b13cb85578bfb Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@trop.in>
Date: Mon, 13 Sep 2021 09:39:18 +0300
Subject: [PATCH] fixup! home-services: Add Mcron.

---
 doc/guix.texi | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index a7eacad762..419d9429d6 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -16090,9 +16090,9 @@ This is the type of the @code{mcron} service, whose value is an
 @code{mcron-configuration} object.
 
 This service type can be the target of a service extension that provides
-it additional job specifications (@pxref{Service Composition}).  In
-other words, it is possible to define services that provide additional
-mcron jobs to run.
+additional job specifications (@pxref{Service Composition}).  In other
+words, it is possible to define services that provide additional mcron
+jobs to run.
 @end defvr
 
 @deftp {Data Type} mcron-configuration
@@ -35689,17 +35689,19 @@ The @code{(gnu home-services mcron)} module provides an interface to
 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
 mcron, GNU@tie{}mcron}).  The information about system's mcron is
 applicable here (@pxref{Scheduled Job Execution}), the only difference
-for home services is that they have to be declared in
-@code{home-envirnoment} record instead of @code{operating-system}.
+for home services is that they have to be declared in a
+@code{home-envirnoment} record instead of an @code{operating-system}
+record.
 
 @defvr {Scheme Variable} home-mcron-service-type
 This is the type of the @code{mcron} home service, whose value is an
-@code{home-mcron-configuration} object.  It allows to manage tasks
+@code{home-mcron-configuration} object.  It allows to manage scheduled
+tasks.
 
 This service type can be the target of a service extension that provides
-it additional job specifications (@pxref{Service Composition}).  In
-other words, it is possible to define services that provide additional
-mcron jobs to run.
+additional job specifications (@pxref{Service Composition}).  In other
+words, it is possible to define services that provide additional mcron
+jobs to run.
 @end defvr
 
 @deftp {Data Type} home-mcron-configuration
-- 
2.33.0


[-- Attachment #1.3: Type: text/plain, Size: 8179 bytes --]


On 2021-09-10 20:22, Xinglu Chen wrote:

>>  doc/guix.texi               |  31 +++++++++-
>>  gnu/home-services/mcron.scm | 115 ++++++++++++++++++++++++++++++++++++
>>  gnu/local.mk                |   1 +
>>  3 files changed, 146 insertions(+), 1 deletion(-)
>>  create mode 100644 gnu/home-services/mcron.scm
>>
>> diff --git a/doc/guix.texi b/doc/guix.texi
>> index e546fcc0d2..a7eacad762 100644
>> --- a/doc/guix.texi
>> +++ b/doc/guix.texi
>> @@ -35685,7 +35685,36 @@ for example).
>>  @cindex mcron
>>  @cindex scheduling jobs
>>  
>> -mcron info here
>> +The @code{(gnu home-services mcron)} module provides an interface to
>> +GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
>> +mcron, GNU@tie{}mcron}).  The information about system's mcron is
>> +applicable here (@pxref{Scheduled Job Execution}), the only difference
>> +for home services is that they have to be declared in
>> +@code{home-envirnoment} record instead of @code{operating-system}.
>
> “declared in a @code{home-environemnt} record instead of a
> @code{operating-system} record.”
>
>> +@defvr {Scheme Variable} home-mcron-service-type
>> +This is the type of the @code{mcron} home service, whose value is an
>
> Why @code{mcron}?  I would use “Mcron” instead.
>
>> +@code{home-mcron-configuration} object.  It allows to manage tasks
>
> “It allows one to manage scheduled tasks.”
>
>> +This service type can be the target of a service extension that provides
>> +it additional job specifications (@pxref{Service Composition}).  In
>
> s/it//
>
>> +other words, it is possible to define services that provide additional
>> +mcron jobs to run.
>> +@end defvr
>> +
>> +@deftp {Data Type} home-mcron-configuration
>> +Data type representing the configuration of mcron.
>> +
>> +@table @asis
>> +@item @code{mcron} (default: @var{mcron})
>> +The mcron package to use.
>> +
>> +@item @code{jobs}
>> +This is a list of gexps (@pxref{G-Expressions}), where each gexp
>> +corresponds to an mcron job specification (@pxref{Syntax, mcron job
>> +specifications,, mcron, GNU@tie{}mcron}).
>> +@end table
>> +@end deftp
>>  
>>  @node Shepherd Home Service
>>  @subsection Managing User's Daemons
>> diff --git a/gnu/home-services/mcron.scm b/gnu/home-services/mcron.scm
>> new file mode 100644
>> index 0000000000..fdfde179a5
>> --- /dev/null
>> +++ b/gnu/home-services/mcron.scm
>> @@ -0,0 +1,115 @@
>> +;;; GNU Guix --- Functional package management for GNU
>> +;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
>> +;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
>> +;;;
>> +;;; 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/>.
>> +
>> +(define-module (gnu home-services mcron)
>> +  #:use-module (gnu packages guile-xyz)
>> +  #:use-module (gnu home-services)
>> +  #:use-module (gnu home-services shepherd)
>> +  #:use-module (gnu services shepherd)
>> +  #:use-module (guix records)
>> +  #:use-module (guix gexp)
>> +  #:use-module (srfi srfi-1)
>> +  #:use-module (ice-9 match)
>> +
>> +  #:export (home-mcron-configuration
>> +            home-mcron-service-type))
>> +
>> +;;; Commentary:
>> +;;
>> +;; Service for the GNU mcron cron job manager.
>> +;;
>> +;; Example configuration, the first job runs mbsync once every ten
>> +;; minutes, the second one writes "Mcron service" to ~/mcron-file once
>> +;; every minute.
>> +;;
>> +;; (service home-mcron-service-type
>> +;;            (home-mcron-configuration
>> +;;             (jobs (list #~(job '(next-minute
>> +;;                                  (range 0 60 10))
>> +;;                                (lambda ()
>> +;;                                  (system* "mbsync" "--all")))
>> +;;                         #~(job next-minute-from
>> +;;                                (lambda ()
>> +;;                                  (call-with-output-file (string-append (getenv "HOME")
>> +;;                                                                        "/mcron-file")
>> +;;                                    (lambda (port)
>> +;;                                      (display "Mcron service" port)))))))))
>> +;;
>> +;;; Code:
>> +
>> +(define-record-type* <home-mcron-configuration> home-mcron-configuration
>> +  make-home-mcron-configuration
>> +  home-mcron-configuration?
>> +  (package home-mcron-configuration-package ; package
>> +           (default mcron))
>> +  (jobs home-mcron-configuration-jobs   ; list of jobs
>> +        (default '())))
>> +
>> +(define job-files (@@ (gnu services mcron) job-files))
>> +(define shepherd-schedule-action
>> +  (@@ (gnu services mcron) shepherd-schedule-action))
>> +
>> +(define home-mcron-shepherd-services
>> +  (match-lambda
>> +    (($ <home-mcron-configuration> mcron '()) ; no jobs to run
>> +     '())
>> +    (($ <home-mcron-configuration> mcron jobs)
>> +     (let ((files (job-files mcron jobs)))
>> +       (list (shepherd-service
>> +              (documentation "User cron jobs.")
>> +              (provision '(mcron))
>> +              (modules `((srfi srfi-1)
>> +                         (srfi srfi-26)
>> +                         (ice-9 popen)            ; for the 'schedule' action
>> +                         (ice-9 rdelim)
>> +                         (ice-9 match)
>> +                         ,@%default-modules))
>> +              (start #~(make-forkexec-constructor
>> +                        (list #$(file-append mcron "/bin/mcron") #$@files)
>> +                        #:log-file (string-append
>> +                                    (or (getenv "XDG_LOG_HOME")
>> +                                        (format #f "~a/.local/var/log"
>> +                                                (getenv "HOME")))
>> +                                    "/mcron.log")))
>> +              (stop #~(make-kill-destructor))
>> +              (actions
>> +               (list (shepherd-schedule-action mcron files)))))))))
>> +
>> +(define home-mcron-profile (compose list home-mcron-configuration-package))
>> +
>> +(define (home-mcron-extend config jobs)
>> +  (home-mcron-configuration
>> +   (inherit config)
>> +   (jobs (append (home-mcron-configuration-jobs config)
>> +                 jobs))))
>> +
>> +(define home-mcron-service-type
>> +  (service-type (name 'home-mcron)
>> +                (extensions
>> +                 (list (service-extension
>> +                        home-shepherd-service-type
>> +                        home-mcron-shepherd-services)
>> +                       (service-extension
>> +                        home-profile-service-type
>> +                        home-mcron-profile)))
>> +                (compose concatenate)
>> +                (extend home-mcron-extend)
>> +                (default-value (home-mcron-configuration))
>> +                (description
>> +                 "Install and configure the GNU mcron cron job manager.")))
>> diff --git a/gnu/local.mk b/gnu/local.mk
>> index 31ad1a43db..8212bc5391 100644
>> --- a/gnu/local.mk
>> +++ b/gnu/local.mk
>> @@ -80,6 +80,7 @@ GNU_SYSTEM_MODULES =				\
>>    %D%/home-services/configuration.scm		\
>>    %D%/home-services/shells.scm			\
>>    %D%/home-services/shepherd.scm		\
>> +  %D%/home-services/mcron.scm			\
>>    %D%/home-services/utils.scm			\
>>    %D%/home-services/xdg.scm			\
>>    %D%/image.scm					\
>> -- 
>> 2.33.0

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#50504] [PATCH] home-services: Add Mcron.
  2021-09-13  6:44   ` Andrew Tropin
@ 2021-09-13 16:16     ` Xinglu Chen
  2021-09-14  6:34       ` Andrew Tropin
  0 siblings, 1 reply; 9+ messages in thread
From: Xinglu Chen @ 2021-09-13 16:16 UTC (permalink / raw)
  To: Andrew Tropin, 50504; +Cc: Oleg Pykhalov, Ludovic Courtès

[-- Attachment #1: Type: text/plain, Size: 2204 bytes --]

On Mon, Sep 13 2021, Andrew Tropin wrote:

> On 2021-09-10 20:22, Xinglu Chen wrote:
>
>> On Fri, Sep 10 2021, Andrew Tropin wrote:
>>
>>> * gnu/home-services/mcron.scm: New file.
>>> * gnu/local.mk: Add this.
>>> * doc/guix.texi: Add documentation about Mcron Home Service.
>>> ---
>>>
>>> This is the last of home services I consider "must-have" for wip-guix-home.
>>>
>>> It reuses two functions from (gnu services mcron) via @@, which can be
>>> considered as a hack, the alternative solution is to expose those functions
>>> via #:export, I can do it if it's a preffered way or suggest other ideas,
>>> please.  The discussion on this topic: https://issues.guix.gnu.org/47238
>>> Included Ludovic and Xinglu in CC.
>>
>> An alternative would be put it the (gnu service mcron) to share more
>> code between system service and home service.  This was discussed
>> briefly on rde-devel[1].  It might be worth discussing this issue on
>> guix-devel before we add too many home service.
>>
>
> I'll make a thread on possible modules naming for home services later
> this week and will discuss this thing too.

Cool!

>>> I took a brief look at the testing approach, seems the most relevant is
>>> guix-system.sh and it is just a shell script, which runs a few guix system
>>> subcommand and check if they fail or succeed.  Please let me know, what is a
>>> preferred way for writing tests and I'll try to provide some tests for Guix
>>> Home in the separate patch.
>>
>> The ‘guix-system.sh’ script seems to only test the ‘guix system’
>> command, which doesn’t seem that related to the home services.  I guess
>> we could check the contents of the generated config files.  There is
>> (gnu build marionette) which creates a VM; we could then check that the
>> relevant process is running.  Maybe there is a better approach, though.
>>
>
> It was a general question about tests for Guix Home, not Mcron home
> service, sorry for the confusion.

No worries!  To clarify, you were referring to the ‘guix home’ command
line utilities when you wrote “Guix Home”, right?  If so, they could
probably be based on the ‘guix-system.sh’ test.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#50504] [PATCH] fixup! home-services: Add Mcron.
  2021-09-13  6:48   ` [bug#50504] [PATCH] fixup! " Andrew Tropin
@ 2021-09-13 16:17     ` Xinglu Chen
  2021-09-13 20:02     ` bug#50504: [PATCH] " Oleg Pykhalov
  1 sibling, 0 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-09-13 16:17 UTC (permalink / raw)
  To: Andrew Tropin, Oleg Pykhalov, 50504; +Cc: Ludovic Courtès

[-- Attachment #1: Type: text/plain, Size: 2544 bytes --]

On Mon, Sep 13 2021, Andrew Tropin wrote:

> Applied suggestions.
>
> From f93bb50483246e3c2c8df669231b13cb85578bfb Mon Sep 17 00:00:00 2001
> From: Andrew Tropin <andrew@trop.in>
> Date: Mon, 13 Sep 2021 09:39:18 +0300
> Subject: [PATCH] fixup! home-services: Add Mcron.
>
> ---
>  doc/guix.texi | 20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index a7eacad762..419d9429d6 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -16090,9 +16090,9 @@ This is the type of the @code{mcron} service, whose value is an
>  @code{mcron-configuration} object.
>  
>  This service type can be the target of a service extension that provides
> -it additional job specifications (@pxref{Service Composition}).  In
> -other words, it is possible to define services that provide additional
> -mcron jobs to run.
> +additional job specifications (@pxref{Service Composition}).  In other
> +words, it is possible to define services that provide additional mcron
> +jobs to run.
>  @end defvr
>  
>  @deftp {Data Type} mcron-configuration
> @@ -35689,17 +35689,19 @@ The @code{(gnu home-services mcron)} module provides an interface to
>  GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
>  mcron, GNU@tie{}mcron}).  The information about system's mcron is
>  applicable here (@pxref{Scheduled Job Execution}), the only difference
> -for home services is that they have to be declared in
> -@code{home-envirnoment} record instead of @code{operating-system}.
> +for home services is that they have to be declared in a
> +@code{home-envirnoment} record instead of an @code{operating-system}
> +record.
>  
>  @defvr {Scheme Variable} home-mcron-service-type
>  This is the type of the @code{mcron} home service, whose value is an
> -@code{home-mcron-configuration} object.  It allows to manage tasks
> +@code{home-mcron-configuration} object.  It allows to manage scheduled
> +tasks.
>  
>  This service type can be the target of a service extension that provides
> -it additional job specifications (@pxref{Service Composition}).  In
> -other words, it is possible to define services that provide additional
> -mcron jobs to run.
> +additional job specifications (@pxref{Service Composition}).  In other
> +words, it is possible to define services that provide additional mcron
> +jobs to run.
>  @end defvr
>  
>  @deftp {Data Type} home-mcron-configuration
> -- 
> 2.33.0

The updated patch LGTM!

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#50504: [PATCH] home-services: Add Mcron.
  2021-09-13  6:48   ` [bug#50504] [PATCH] fixup! " Andrew Tropin
  2021-09-13 16:17     ` Xinglu Chen
@ 2021-09-13 20:02     ` Oleg Pykhalov
  2021-09-14  6:35       ` [bug#50504] " Andrew Tropin
  1 sibling, 1 reply; 9+ messages in thread
From: Oleg Pykhalov @ 2021-09-13 20:02 UTC (permalink / raw)
  To: Andrew Tropin; +Cc: 50504-done

[-- Attachment #1: Type: text/plain, Size: 25 bytes --]

Pushed to wip-guix-home.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#50504] [PATCH] home-services: Add Mcron.
  2021-09-13 16:16     ` Xinglu Chen
@ 2021-09-14  6:34       ` Andrew Tropin
  0 siblings, 0 replies; 9+ messages in thread
From: Andrew Tropin @ 2021-09-14  6:34 UTC (permalink / raw)
  To: Xinglu Chen, 50504; +Cc: Oleg Pykhalov, Ludovic Courtès

[-- Attachment #1: Type: text/plain, Size: 2556 bytes --]

On 2021-09-13 18:16, Xinglu Chen wrote:

> On Mon, Sep 13 2021, Andrew Tropin wrote:
>
>> On 2021-09-10 20:22, Xinglu Chen wrote:
>>
>>> On Fri, Sep 10 2021, Andrew Tropin wrote:
>>>
>>>> * gnu/home-services/mcron.scm: New file.
>>>> * gnu/local.mk: Add this.
>>>> * doc/guix.texi: Add documentation about Mcron Home Service.
>>>> ---
>>>>
>>>> This is the last of home services I consider "must-have" for wip-guix-home.
>>>>
>>>> It reuses two functions from (gnu services mcron) via @@, which can be
>>>> considered as a hack, the alternative solution is to expose those functions
>>>> via #:export, I can do it if it's a preffered way or suggest other ideas,
>>>> please.  The discussion on this topic: https://issues.guix.gnu.org/47238
>>>> Included Ludovic and Xinglu in CC.
>>>
>>> An alternative would be put it the (gnu service mcron) to share more
>>> code between system service and home service.  This was discussed
>>> briefly on rde-devel[1].  It might be worth discussing this issue on
>>> guix-devel before we add too many home service.
>>>
>>
>> I'll make a thread on possible modules naming for home services later
>> this week and will discuss this thing too.
>
> Cool!
>
>>>> I took a brief look at the testing approach, seems the most relevant is
>>>> guix-system.sh and it is just a shell script, which runs a few guix system
>>>> subcommand and check if they fail or succeed.  Please let me know, what is a
>>>> preferred way for writing tests and I'll try to provide some tests for Guix
>>>> Home in the separate patch.
>>>
>>> The ‘guix-system.sh’ script seems to only test the ‘guix system’
>>> command, which doesn’t seem that related to the home services.  I guess
>>> we could check the contents of the generated config files.  There is
>>> (gnu build marionette) which creates a VM; we could then check that the
>>> relevant process is running.  Maybe there is a better approach, though.
>>>
>>
>> It was a general question about tests for Guix Home, not Mcron home
>> service, sorry for the confusion.
>
> No worries!  To clarify, you were referring to the ‘guix home’ command
> line utilities when you wrote “Guix Home”, right?  If so, they could
> probably be based on the ‘guix-system.sh’ test.

To the whole Guix Home and found `guix-system.sh` to be most relevant,
but later I saw that there are some tests for services too, both in
tests/services and gnu/tests.  Probably I need to look at them more
carefully and write some in the same way.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#50504] [PATCH] home-services: Add Mcron.
  2021-09-13 20:02     ` bug#50504: [PATCH] " Oleg Pykhalov
@ 2021-09-14  6:35       ` Andrew Tropin
  0 siblings, 0 replies; 9+ messages in thread
From: Andrew Tropin @ 2021-09-14  6:35 UTC (permalink / raw)
  To: Oleg Pykhalov; +Cc: 50504-done

[-- Attachment #1: Type: text/plain, Size: 80 bytes --]

On 2021-09-13 23:02, Oleg Pykhalov wrote:

> Pushed to wip-guix-home.

Thanks!)

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-09-14  6:36 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-10  6:26 [bug#50504] [PATCH] home-services: Add Mcron Andrew Tropin
2021-09-10 18:22 ` Xinglu Chen
2021-09-13  6:44   ` Andrew Tropin
2021-09-13 16:16     ` Xinglu Chen
2021-09-14  6:34       ` Andrew Tropin
2021-09-13  6:48   ` [bug#50504] [PATCH] fixup! " Andrew Tropin
2021-09-13 16:17     ` Xinglu Chen
2021-09-13 20:02     ` bug#50504: [PATCH] " Oleg Pykhalov
2021-09-14  6:35       ` [bug#50504] " Andrew Tropin

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).