From 1f73bf630a708eb16c1f53a7fcb342dd9dc731b7 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Sun, 19 Feb 2023 23:42:53 +0100
Subject: [PATCH] Pass on yarn's exit code

---
 CHANGELOG.rst                                      | 5 +++++
 django_yarnpkg/management/base.py                  | 2 +-
 django_yarnpkg/management/commands/yarn.py         | 6 ++++--
 django_yarnpkg/management/commands/yarn_install.py | 4 +++-
 django_yarnpkg/yarn.py                             | 4 ++--
 5 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 0001720..6088610 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,3 +1,8 @@
+Version 6.1.0 (2023-02-19)
+=====================================================
+
+* Pass on yarn's exit code
+
 Version 6.0.3 (2022-11-01)
 =====================================================
 
diff --git a/django_yarnpkg/management/base.py b/django_yarnpkg/management/base.py
index 4b4b1cc..59aee0e 100644
--- a/django_yarnpkg/management/base.py
+++ b/django_yarnpkg/management/base.py
@@ -24,4 +24,4 @@ class BaseYarnCommand(BaseCommand):
             raise YarnNotInstalled()
 
     def _install(self, args):
-        yarn_adapter.install(settings.YARN_INSTALLED_APPS, *args)
+        return yarn_adapter.install(settings.YARN_INSTALLED_APPS, *args)
diff --git a/django_yarnpkg/management/commands/yarn.py b/django_yarnpkg/management/commands/yarn.py
index f330e31..5b018d7 100644
--- a/django_yarnpkg/management/commands/yarn.py
+++ b/django_yarnpkg/management/commands/yarn.py
@@ -1,3 +1,4 @@
+import sys
 from ...yarn import yarn_adapter
 from ..base import BaseYarnCommand
 from argparse import REMAINDER
@@ -14,9 +15,10 @@ class Command(BaseYarnCommand):
         super(Command, self).handle(*args, **options)
         args = args or tuple(options.pop('command'))
         if self._is_single_command('install', args):
-            self._install([])
+            ret = self._install([])
         else:
-            yarn_adapter.call_yarn(args)
+            ret = yarn_adapter.call_yarn(args)
+        sys.exit(ret)
 
     def _is_single_command(self, name, args):
         return len(args) == 1 and args[0] == name
diff --git a/django_yarnpkg/management/commands/yarn_install.py b/django_yarnpkg/management/commands/yarn_install.py
index 807eac4..ef8ed95 100644
--- a/django_yarnpkg/management/commands/yarn_install.py
+++ b/django_yarnpkg/management/commands/yarn_install.py
@@ -1,3 +1,4 @@
+import sys
 from optparse import make_option
 from ..base import BaseYarnCommand
 
@@ -7,4 +8,5 @@ class Command(BaseYarnCommand):
 
     def handle(self, *args, **options):
         super(Command, self).handle(*args, **options)
-        self._install(args)
+        ret = self._install(args)
+        sys.exit(ret)
diff --git a/django_yarnpkg/yarn.py b/django_yarnpkg/yarn.py
index fa25547..c252dc0 100644
--- a/django_yarnpkg/yarn.py
+++ b/django_yarnpkg/yarn.py
@@ -31,11 +31,11 @@ class YarnAdapter(object):
         proc = subprocess.Popen(
             [self._yarn_path] + list(args),
             cwd=self._node_modules_root)
-        proc.wait()
+        return proc.wait()
 
     def install(self, packages, *options):
         """Install packages from yarn"""
-        self.call_yarn(['add'] + list(options) + list(packages))
+        return self.call_yarn(['add'] + list(options) + list(packages))
 
     def _accumulate_dependencies(self, data):
         """Accumulate dependencies"""
-- 
GitLab