diff options
author | Nicolas Graves <ngraves@ngraves.fr> | 2024-10-20 00:57:33 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2024-10-23 12:59:58 +0200 |
commit | 04f084f2d40a962d3fbad3de817f4ce0df31ef44 (patch) | |
tree | 7537923f7ce7483553c0996e25d8bb0656f2d884 | |
parent | b3092b8064a8b3037f8b96c0de4817506cb417a7 (diff) | |
download | guix-04f084f2d40a962d3fbad3de817f4ce0df31ef44.tar guix-04f084f2d40a962d3fbad3de817f4ce0df31ef44.tar.gz |
gnu: debops: Update to 3.2.2.
* gnu/packages/patches/debops-constants-for-external-program-names.patch
and gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch:
Remove patches.
* gnu/packages/patches/debops-setup-py-avoid-git.patch: Add patch.
* gnu/local.mk: Adjust patches.
* gnu/packages/admin.scm (debops): Update to 3.2.2.
[source]<patches>: Adjust patches.
[build-system]: Switch to pyproject-build-system.
[native-inputs]: Remove git.
[inputs]: Add git, git-crypt.
[propagated-inputs]: Reorder. Add python-dotenv, python-future,
python-gitpython, python-jinja2, python-pyyaml, python-pyxdg,
python-toml.
[arguments]<#:tests?>: Unset (although no tests in source).
<#:phases>: Remove all existing modifications. Add 'wrap-script phase.
<#:modules>: Add for <#phases>.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r-- | gnu/local.mk | 3 | ||||
-rw-r--r-- | gnu/packages/admin.scm | 83 | ||||
-rw-r--r-- | gnu/packages/patches/debops-constants-for-external-program-names.patch | 276 | ||||
-rw-r--r-- | gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch | 45 | ||||
-rw-r--r-- | gnu/packages/patches/debops-setup-py-avoid-git.patch | 38 |
5 files changed, 69 insertions, 376 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 89a795bfbd..911af88627 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1135,8 +1135,7 @@ dist_patch_DATA = \ %D%/packages/patches/dbus-c++-threading-mutex.patch \ %D%/packages/patches/dbxfs-remove-sentry-sdk.patch \ %D%/packages/patches/ddd-build.patch \ - %D%/packages/patches/debops-constants-for-external-program-names.patch \ - %D%/packages/patches/debops-debops-defaults-fall-back-to-less.patch \ + %D%/packages/patches/debops-setup-py-avoid-git.patch \ %D%/packages/patches/dee-vapi.patch \ %D%/packages/patches/dfu-programmer-fix-libusb.patch \ %D%/packages/patches/directfb-davinci-glibc-228-compat.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index 2cb50ed4a8..ac2703556a 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -3048,7 +3048,7 @@ modules and plugins that extend Ansible.") (define-public debops (package (name "debops") - (version "1.1.0") + (version "3.2.2") (source (origin (method git-fetch) @@ -3057,69 +3057,46 @@ modules and plugins that extend Ansible.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "052b2dykdn35pdpn9s4prawl6nl6yzih8nyf54hpvhpisvjrm1v5")) + (base32 "03d94bzljnw65f1ra7bxsl8q2l6g8gxcy8kqhm69ib08j50qa0h6")) (patches - (search-patches "debops-constants-for-external-program-names.patch" - "debops-debops-defaults-fall-back-to-less.patch")))) - (build-system python-build-system) - (native-inputs - (list git)) + (search-patches "debops-setup-py-avoid-git.patch")))) + (build-system pyproject-build-system) (inputs (list ansible encfs fuse-2 util-linux ;; for umount findutils + git + git-crypt gnupg which)) (propagated-inputs - (list python-future python-distro)) + (list python-distro + python-dotenv + python-future + python-gitpython + python-jinja2 + python-pyyaml + python-pyxdg + python-toml)) (arguments - `(#:tests? #f - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'nuke-debops-update - (lambda _ - (chmod "bin/debops-update" #o755) ; FIXME work-around git-fetch issue - (with-output-to-file "bin/debops-update" - (lambda () - (format #t "#!/bin/sh -echo 'debops is installed via guix. guix-update is useless in this case. -Please use `guix package -u debops` instead.'"))) - #t)) - ;; patch shebangs only in actuall scripts, not in files included in - ;; roles (which are to be delivered to the targte systems) - (delete `patch-generated-file-shebangs) - (replace 'patch-source-shebangs - (lambda _ - (for-each patch-shebang - (find-files "bin" - (lambda (file stat) - ;; Filter out symlinks. - (eq? 'regular (stat:type stat))) - #:stat lstat)))) - (add-after 'unpack 'fix-paths - (lambda _ - (define (substitute-program-names file) - ;; e.g. ANSIBLE_PLAYBOOK = '/gnu/store/…/bin/ansible-playbook' - (for-each - (lambda (name) - (let ((varname (string-upcase - (string-map - (lambda (c) (if (char=? c #\-) #\_ c)) - name)))) - (substitute* file - (((string-append "^(" varname " = )'.*'") line prefix) - (string-append prefix "'" (which name) "'"))))) - '("ansible-playbook" "encfs" "find" "fusermount" - "umount" "gpg" "ansible" "which"))) - (for-each substitute-program-names - '("bin/debops" - "bin/debops-padlock" - "bin/debops-task" - "debops/__init__.py" - "debops/cmds/__init__.py")) - #t))))) + (list + #:modules '((guix build pyproject-build-system) + (guix build utils) + (srfi srfi-26)) + #:phases #~(modify-phases %standard-phases + (add-after 'sanity-check 'wrap-script + (lambda* (#:key inputs #:allow-other-keys) + (wrap-program (string-append #$output "/bin/debops") + `("PATH" ":" prefix + ,(map dirname + (map (cut search-input-file inputs <>) + (list "bin/ansible" + "bin/gpg" + "bin/git" + "bin/git-crypt" + "bin/umount")))))))))) (home-page "https://www.debops.org/") (synopsis "Collection of general-purpose Ansible roles") (description "The Ansible roles provided by that can be used to manage diff --git a/gnu/packages/patches/debops-constants-for-external-program-names.patch b/gnu/packages/patches/debops-constants-for-external-program-names.patch deleted file mode 100644 index b3b34ed323..0000000000 --- a/gnu/packages/patches/debops-constants-for-external-program-names.patch +++ /dev/null @@ -1,276 +0,0 @@ -From 78d5cddafebb28e2e54efeb781495b5607ddb356 Mon Sep 17 00:00:00 2001 -From: Hartmut Goebel <h.goebel@crazy-compilers.com> -Date: Thu, 8 Aug 2019 15:19:48 +0200 -Subject: [PATCH] Scripts: Use constants for external program names. - -This makes it much, much easier to replace the program -with one using an absolute path. This is necessary for -e.g. Guix to keep references to these external programs. ---- - bin/debops | 10 +++++++--- - bin/debops-padlock | 21 +++++++++++++++------ - bin/debops-task | 7 +++++-- - bin/debops-update | 18 +++++++++++------- - debops/__init__.py | 17 ++++++++++++----- - debops/cmds/__init__.py | 6 +++++- - 6 files changed, 55 insertions(+), 24 deletions(-) - -diff --git a/bin/debops b/bin/debops -index 2b7ad3f88..caaeb892f 100755 ---- a/bin/debops -+++ b/bin/debops -@@ -59,6 +59,10 @@ ConfigFileHeader = """\ - # You can manipulate the contents of this file via `.debops.cfg`. - """ - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ANSIBLE_PLAYBOOK = 'ansible-playbook' -+ - - def write_config(filename, config): - cfgparser = configparser.ConfigParser() -@@ -131,7 +135,7 @@ def gen_ansible_cfg(filename, config, project_root, playbooks_path, - os.path.join(playbooks_path, "roles"), - "/etc/ansible/roles"))) - -- ansible_version_out = subprocess.check_output(["ansible-playbook", -+ ansible_version_out = subprocess.check_output([ANSIBLE_PLAYBOOK, - "--version"]).decode() - - # Get first line and split by spaces to get second 'word'. -@@ -197,7 +201,7 @@ def main(cmd_args): - playbooks_path = '/nonexistent' - - # Make sure required commands are present -- require_commands('ansible-playbook') -+ require_commands(ANSIBLE_PLAYBOOK) - - # Check if user specified a potential playbook name as the first - # argument. If yes, use it as the playbook name and remove it from -@@ -256,7 +260,7 @@ def main(cmd_args): - print("Running Ansible playbooks:") - for element in play_list: - print(element) -- return subprocess.call(['ansible-playbook'] + play_list + arg_list) -+ return subprocess.call([ANSIBLE_PLAYBOOK] + play_list + arg_list) - finally: - if revert_unlock: - padlock_lock(encfs_encrypted) -diff --git a/bin/debops-padlock b/bin/debops-padlock -index bfdfb8e06..2a97716cd 100755 ---- a/bin/debops-padlock -+++ b/bin/debops-padlock -@@ -67,6 +67,14 @@ devrandom = os.environ.get('DEVRANDOM', "/dev/urandom") - - SCRIPT_FILENAME = 'padlock-script' - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ENCFS = 'encfs' -+FIND = 'find' -+FUSERMOUNT = 'fusermount' -+UMOUNT = 'umount' -+GPG = 'gpg' -+ - # ---- DebOps environment setup ---- - - -@@ -80,9 +88,9 @@ def main(subcommand_func, **kwargs): - # Make sure required commands are present - # OS X compatibility - if sys.platform == 'darwin': -- require_commands('encfs', 'find', 'umount', 'gpg') -+ require_commands(ENCFS, FIND, UMOUNT, GPG) - else: -- require_commands('encfs', 'find', 'fusermount', 'gpg') -+ require_commands(ENCFS, FIND, FUSERMOUNT, GPG) - - inventory_path = find_inventorypath(project_root, required=False) - # If inventory hasn't been found automatically, assume it's the default -@@ -121,7 +129,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients): - # Generate a random password and encrypt it with GPG keys of recipients. - print("Generating a random", ENCFS_KEYFILE_LENGTH, "char password") - pwd = gen_pwd() -- gpg = subprocess.Popen(['gpg', '--encrypt', '--armor', -+ gpg = subprocess.Popen([GPG, '--encrypt', '--armor', - '--output', encfs_keyfile] + recipients, - stdin=subprocess.PIPE) - gpg.communicate(pwd.encode('utf-8')) -@@ -133,9 +141,10 @@ def init(encfs_decrypted, encfs_encrypted, recipients): - # NB2: We can not use padlock_unlock here, because the config file - # does not yet exist. - encfs = subprocess.Popen([ -- 'encfs', encfs_encrypted, encfs_decrypted, -+ ENCFS, encfs_encrypted, encfs_decrypted, - '--extpass', -- 'gpg --decrypt --no-mdc-warning --output - '+shquote(encfs_keyfile)], -+ GPG + ' --decrypt --no-mdc-warning --output - ' -+ + shquote(encfs_keyfile)], - stdin=subprocess.PIPE) - encfs.communicate(('p\n'+pwd).encode('utf-8')) - -@@ -154,7 +163,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients): - - # Protect the EncFS configuration file by also encrypting it with - # the GPG keys of recipients. -- subprocess.call(['gpg', '--encrypt', '--armor', -+ subprocess.call([GPG, '--encrypt', '--armor', - '--output', encfs_configfile+'.asc'] - + recipients + [encfs_configfile]) - os.remove(encfs_configfile) -diff --git a/bin/debops-task b/bin/debops-task -index 223e5f834..dc31ad4e6 100755 ---- a/bin/debops-task -+++ b/bin/debops-task -@@ -49,11 +49,14 @@ project_root = find_debops_project(required=True) - # todo: need to decide on semantics! - # config = read_config(project_root) - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ANSIBLE = 'ansible' - - # ---- Main script ---- - - # Make sure required commands are present --require_commands('ansible') -+require_commands(ANSIBLE) - - ansible_inventory = find_inventorypath(project_root) - -@@ -71,5 +74,5 @@ if INSECURE: - os.environ['ANSIBLE_HOST_KEY_CHECKING'] = 'False' - - # Run ansible with custom environment --cmd = ['ansible'] + module + sys.argv[1:] -+cmd = [ANSIBLE] + module + sys.argv[1:] - subprocess.call(cmd) -diff --git a/bin/debops-update b/bin/debops-update -index 88c5e2c82..cc7e57cb0 100755 ---- a/bin/debops-update -+++ b/bin/debops-update -@@ -90,6 +90,10 @@ GALAXY_REQUIREMENTS = "galaxy/requirements.txt" - # Default Ansible Galaxy user account name - GALAXY_ACCOUNT = "debops" - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+GIT = 'git' -+ - - # ---- Functions ---- - -@@ -137,7 +141,7 @@ def clone_git_repository(repo_uri, branch, destination, dry_run=False): - if dry_run: - print("Cloning '%s' to %s..." % (repo_uri, destination)) - else: -- subprocess.call(['git', 'clone', '--quiet', '--branch', branch, -+ subprocess.call([GIT, 'clone', '--quiet', '--branch', branch, - repo_uri, destination]) - - -@@ -152,22 +156,22 @@ def update_git_repository(path, dry_run=False, remote_uri=False): - os.chdir(path) - - if dry_run: -- subprocess.call(['git', 'fetch']) -- subprocess.call(['git', 'diff', 'HEAD', 'origin', '--stat']) -+ subprocess.call([GIT, 'fetch']) -+ subprocess.call([GIT, 'diff', 'HEAD', 'origin', '--stat']) - else: - # Get the current sha of the head branch - current_sha = subprocess.check_output( -- ['git', 'rev-parse', 'HEAD']).strip() -+ [GIT, 'rev-parse', 'HEAD']).strip() - - # Fetch it silently and store the new sha -- subprocess.call(['git', 'fetch', '--quiet']) -+ subprocess.call([GIT, 'fetch', '--quiet']) - fetch_sha = subprocess.check_output( -- ['git', 'rev-parse', 'FETCH_HEAD']).strip() -+ [GIT, 'rev-parse', 'FETCH_HEAD']).strip() - - if current_sha != fetch_sha: - print() - print('--') -- subprocess.call(['git', 'merge', fetch_sha]) -+ subprocess.call([GIT, 'merge', fetch_sha]) - - if remote_uri: - compare_uri = (remote_uri + '/compare/' + current_sha[:7] -diff --git a/debops/__init__.py b/debops/__init__.py -index 1c2cedcb0..da8430e41 100644 ---- a/debops/__init__.py -+++ b/debops/__init__.py -@@ -93,6 +93,13 @@ ENCFS_KEYFILE = ".encfs6.keyfile" - # Length of the random EncFS password stored in encrypted keyfile - ENCFS_KEYFILE_LENGTH = 256 - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ENCFS = 'encfs' -+FUSERMOUNT = 'fusermount' -+UMOUNT = 'umount' -+GPG = 'gpg' -+ - - # ---- Functions ---- - -@@ -180,9 +187,9 @@ def padlock_lock(encrypted_path): - return False - # OS X compatibility - if sys.platform == 'darwin': -- subprocess.call(['umount', decrypted_path]) -+ subprocess.call([UMOUNT, decrypted_path]) - else: -- subprocess.call(['fusermount', '-u', decrypted_path]) -+ subprocess.call([FUSERMOUNT, '-u', decrypted_path]) - return True - - -@@ -237,14 +244,14 @@ def padlock_unlock(encrypted_path): - # Start encfs. It will wait for input on the `configfile` named - # pipe. - encfs = subprocess.Popen([ -- 'encfs', encrypted_path, decrypted_path, -+ ENCFS, encrypted_path, decrypted_path, - '--extpass', -- 'gpg --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)]) -+ GPG + ' --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)]) - # now decrypt the config and write it into the named pipe - with open(configfile, 'w') as fh: - # NB: gpg must write to stdout to avoid it is asking whether - # the file should be overwritten -- subprocess.Popen(['gpg', -+ subprocess.Popen([GPG, - '--decrypt', '--no-mdc-warning', '--output', '-', - crypted_configfile], stdout=fh).wait() - encfs.wait() -diff --git a/debops/cmds/__init__.py b/debops/cmds/__init__.py -index b221fa191..9fabf43a5 100644 ---- a/debops/cmds/__init__.py -+++ b/debops/cmds/__init__.py -@@ -55,6 +55,10 @@ SCRIPT_NAME = os.path.basename(sys.argv[0]) - # command line) - INSECURE = bool(os.environ.get('INSECURE', False)) - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+WHICH = 'which' -+ - - def error_msg(message, severity="Error"): - """ -@@ -70,7 +74,7 @@ def require_commands(*cmd_names): - Check if required commands exist. - """ - def command_exists(cmd_name): -- which = "where" if platform.system() == "Windows" else "which" -+ which = "where" if platform.system() == "Windows" else WHICH - return not subprocess.call([which, cmd_name], - stdout=DEVNULL, stderr=subprocess.STDOUT) - --- -2.21.0 - diff --git a/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch b/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch deleted file mode 100644 index bbb6b7c08e..0000000000 --- a/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 5059daf8bd59a83f520c14731173ea76ce8b8661 Mon Sep 17 00:00:00 2001 -From: Hartmut Goebel <h.goebel@crazy-compilers.com> -Date: Sun, 8 Sep 2019 13:09:15 +0200 -Subject: [PATCH] [debops-defaults] If `view` is not available, try less, etc. - ---- - bin/debops-defaults | 21 +++++++++++++++------ - 1 file changed, 15 insertions(+), 6 deletions(-) - -diff --git a/bin/debops-defaults b/bin/debops-defaults -index 9dd87fe0a..3e3db4c41 100755 ---- a/bin/debops-defaults -+++ b/bin/debops-defaults -@@ -96,13 +96,22 @@ def main(role_list): - config = read_config(project_root) - playbooks_path = find_playbookpath(config, project_root, required=True) - -- # Make sure required commands are present -- require_commands('view') -- -- if sys.stdout.isatty(): -+ # Check if one of the output commands is present -+ sys.stdout = io.BytesIO() # suppress error message, if any -+ for cmd_args in (('view', '+set ft=yaml', '-'), -+ ('less', '-'), -+ ('more', '-')): -+ try: -+ require_commands(cmd_args[0]) -+ break -+ except SystemExit: -+ # this command was not found -+ cmd_args = None -+ sys.stdout = sys.__stdout__ -+ -+ if cmd_args and sys.stdout.isatty(): - # if script is run as standalone, redirect to view -- view = subprocess.Popen(['view', '+set ft=yaml', '-'], -- stdin=subprocess.PIPE) -+ view = subprocess.Popen(cmd_args, stdin=subprocess.PIPE) - try: - aggregate_defaults(playbooks_path, role_list, view.stdin) - except IOError as e: --- -2.21.0 - diff --git a/gnu/packages/patches/debops-setup-py-avoid-git.patch b/gnu/packages/patches/debops-setup-py-avoid-git.patch new file mode 100644 index 0000000000..7586e661db --- /dev/null +++ b/gnu/packages/patches/debops-setup-py-avoid-git.patch @@ -0,0 +1,38 @@ +From a6219db1c473f862a2dddbdef9593d8a57dfc9ae Mon Sep 17 00:00:00 2001 +From: Nicolas Graves <ngraves@ngraves.fr> +Date: Sat, 19 Oct 2024 19:49:30 +0200 +Subject: [PATCH] setup: Don't rely on git to set the version. + +--- + setup.py | 15 +-------------- + 1 file changed, 1 insertion(+), 14 deletions(-) + +diff --git a/setup.py b/setup.py +index 0fc4555a4..98e4bffac 100755 +--- a/setup.py ++++ b/setup.py +@@ -48,20 +48,7 @@ except NameError: + return s + return s and s.decode('utf-8') or None + +-# Retrieve the project version from 'git describe' command and store it in the +-# __version__.py and VERSION files, needed for correct installation of the +-# Python package +-try: +- with open(os.devnull, 'w') as devnull: +- GIT_RELEASE = subprocess.check_output( +- ['git', 'describe'], stderr=devnull +- ).strip().lstrip(b'v').decode('utf-8').split('-') +- if len(GIT_RELEASE) > 1: +- RELEASE = (GIT_RELEASE[0] + '.dev' + GIT_RELEASE[1] +- + '+' + GIT_RELEASE[2]) +- else: +- RELEASE = GIT_RELEASE[0] +-except subprocess.CalledProcessError: ++if True: + try: + RELEASE = open('VERSION').read().strip() + except Exception: +-- +2.46.0 + |