GNU bug report logs - #50504
[PATCH] home-services: Add Mcron.

Previous Next

Package: guix-patches;

Reported by: Andrew Tropin <andrew <at> trop.in>

Date: Fri, 10 Sep 2021 10:58:01 UTC

Severity: normal

Tags: patch

Done: Oleg Pykhalov <go.wigust <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 50504 in the body.
You can then email your comments to 50504 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Fri, 10 Sep 2021 10:58:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Andrew Tropin <andrew <at> trop.in>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 10 Sep 2021 10:58:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Andrew Tropin <andrew <at> trop.in>
To: guix-patches <at> gnu.org
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>,
 Ludovic Courtès <ludo <at> gnu.org>,
 Xinglu Chen <public <at> yoctocell.xyz>
Subject: [PATCH] home-services: Add Mcron.
Date: Fri, 10 Sep 2021 09:26:33 +0300
* 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 <at> tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
+mcron, GNU <at> 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 <at> 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 <at> trop.in>
+;;; Copyright © 2021 Xinglu Chen <public <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Fri, 10 Sep 2021 18:23:01 GMT) Full text and rfc822 format available.

Message #8 received at 50504 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: Andrew Tropin <andrew <at> trop.in>, 50504 <at> debbugs.gnu.org
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>,
 Ludovic Courtès <ludo <at> gnu.org>
Subject: Re: [bug#50504] [PATCH] home-services: Add Mcron.
Date: Fri, 10 Sep 2021 20:22:30 +0200
[Message part 1 (text/plain, inline)]
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 <at> tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
> +mcron, GNU <at> 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 <at> 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 <at> trop.in>
> +;;; Copyright © 2021 Xinglu Chen <public <at> 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
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Mon, 13 Sep 2021 06:45:02 GMT) Full text and rfc822 format available.

Message #11 received at 50504 <at> debbugs.gnu.org (full text, mbox):

From: Andrew Tropin <andrew <at> trop.in>
To: Xinglu Chen <public <at> yoctocell.xyz>, 50504 <at> debbugs.gnu.org
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>,
 Ludovic Courtès <ludo <at> gnu.org>
Subject: Re: [bug#50504] [PATCH] home-services: Add Mcron.
Date: Mon, 13 Sep 2021 09:44:18 +0300
[Message part 1 (text/plain, inline)]
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 <at> tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
>> +mcron, GNU <at> 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 <at> 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 <at> trop.in>
>> +;;; Copyright © 2021 Xinglu Chen <public <at> 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
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Mon, 13 Sep 2021 06:49:02 GMT) Full text and rfc822 format available.

Message #14 received at 50504 <at> debbugs.gnu.org (full text, mbox):

From: Andrew Tropin <andrew <at> trop.in>
To: Oleg Pykhalov <go.wigust <at> gmail.com>, 50504 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>,
 Xinglu Chen <public <at> yoctocell.xyz>
Subject: [PATCH] fixup! home-services: Add Mcron.
Date: Mon, 13 Sep 2021 09:48:11 +0300
[Message part 1 (text/plain, inline)]
Applied suggestions.

[0001-fixup-home-services-Add-Mcron.patch (text/x-patch, inline)]
From f93bb50483246e3c2c8df669231b13cb85578bfb Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew <at> 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 <at> tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
 mcron, GNU <at> 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

[Message part 3 (text/plain, inline)]
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 <at> tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
>> +mcron, GNU <at> 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 <at> 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 <at> trop.in>
>> +;;; Copyright © 2021 Xinglu Chen <public <at> 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
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Mon, 13 Sep 2021 16:17:02 GMT) Full text and rfc822 format available.

Message #17 received at 50504 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: Andrew Tropin <andrew <at> trop.in>, 50504 <at> debbugs.gnu.org
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>,
 Ludovic Courtès <ludo <at> gnu.org>
Subject: Re: [bug#50504] [PATCH] home-services: Add Mcron.
Date: Mon, 13 Sep 2021 18:16:31 +0200
[Message part 1 (text/plain, inline)]
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.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Mon, 13 Sep 2021 16:18:02 GMT) Full text and rfc822 format available.

Message #20 received at 50504 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: Andrew Tropin <andrew <at> trop.in>, Oleg Pykhalov <go.wigust <at> gmail.com>,
 50504 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: Re: [bug#50504] [PATCH] fixup! home-services: Add Mcron.
Date: Mon, 13 Sep 2021 18:17:21 +0200
[Message part 1 (text/plain, inline)]
On Mon, Sep 13 2021, Andrew Tropin wrote:

> Applied suggestions.
>
> From f93bb50483246e3c2c8df669231b13cb85578bfb Mon Sep 17 00:00:00 2001
> From: Andrew Tropin <andrew <at> 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 <at> tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
>  mcron, GNU <at> 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!
[signature.asc (application/pgp-signature, inline)]

Reply sent to Oleg Pykhalov <go.wigust <at> gmail.com>:
You have taken responsibility. (Mon, 13 Sep 2021 20:03:02 GMT) Full text and rfc822 format available.

Notification sent to Andrew Tropin <andrew <at> trop.in>:
bug acknowledged by developer. (Mon, 13 Sep 2021 20:03:02 GMT) Full text and rfc822 format available.

Message #25 received at 50504-done <at> debbugs.gnu.org (full text, mbox):

From: Oleg Pykhalov <go.wigust <at> gmail.com>
To: Andrew Tropin <andrew <at> trop.in>
Cc: 50504-done <at> debbugs.gnu.org
Subject: Re: bug#50504: [PATCH] home-services: Add Mcron.
Date: Mon, 13 Sep 2021 23:02:37 +0300
[Message part 1 (text/plain, inline)]
Pushed to wip-guix-home.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Tue, 14 Sep 2021 06:35:02 GMT) Full text and rfc822 format available.

Message #28 received at 50504 <at> debbugs.gnu.org (full text, mbox):

From: Andrew Tropin <andrew <at> trop.in>
To: Xinglu Chen <public <at> yoctocell.xyz>, 50504 <at> debbugs.gnu.org
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>,
 Ludovic Courtès <ludo <at> gnu.org>
Subject: Re: [bug#50504] [PATCH] home-services: Add Mcron.
Date: Tue, 14 Sep 2021 09:34:45 +0300
[Message part 1 (text/plain, inline)]
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.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#50504; Package guix-patches. (Tue, 14 Sep 2021 06:36:01 GMT) Full text and rfc822 format available.

Message #31 received at 50504-done <at> debbugs.gnu.org (full text, mbox):

From: Andrew Tropin <andrew <at> trop.in>
To: Oleg Pykhalov <go.wigust <at> gmail.com>
Cc: 50504-done <at> debbugs.gnu.org
Subject: Re: bug#50504: [PATCH] home-services: Add Mcron.
Date: Tue, 14 Sep 2021 09:35:25 +0300
[Message part 1 (text/plain, inline)]
On 2021-09-13 23:02, Oleg Pykhalov wrote:

> Pushed to wip-guix-home.

Thanks!)
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 12 Oct 2021 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 195 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.