diff --git a/0001-Disable-running-gyp-on-shared-deps.patch b/0001-Disable-running-gyp-on-shared-deps.patch
index f6cb699..927de9f 100644
--- a/0001-Disable-running-gyp-on-shared-deps.patch
+++ b/0001-Disable-running-gyp-on-shared-deps.patch
@@ -1,34 +1,29 @@
-From e4d1665c49d00d19be0650f92b98308f3ed251d1 Mon Sep 17 00:00:00 2001
+From be67711060761dcb520dc538582bc497c978a211 Mon Sep 17 00:00:00 2001
 From: Zuzana Svetlikova <zsvetlik@redhat.com>
 Date: Thu, 27 Apr 2017 14:25:42 +0200
 Subject: [PATCH 1/3] Disable running gyp on shared deps
 
 ---
- Makefile | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Makefile b/Makefile
-index 3d8ef4dc5764bba4d6ed5bad3cc03a2045c3be86..bb75e85c345662ab5285f6f00be725f33c06cbf5 100644
+index d04aac3515a1812d120555297f2b340baaea58f8..a91651e22a9d6b7891255071b38217dc358781af 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -122,14 +122,13 @@ with-code-cache:
- 
+@@ -114,11 +114,11 @@ with-code-cache:
  .PHONY: test-code-cache
  test-code-cache: with-code-cache
- 	$(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) code-cache
+ 	echo "'test-code-cache' target is a noop"
  
--out/Makefile: common.gypi deps/uv/uv.gyp deps/http_parser/http_parser.gyp \
--              deps/zlib/zlib.gyp deps/v8/gypfiles/toolchain.gypi \
--              deps/v8/gypfiles/features.gypi deps/v8/gypfiles/v8.gyp node.gyp \
--              config.gypi
-+out/Makefile: common.gypi deps/http_parser/http_parser.gyp \
-+              deps/v8/gypfiles/toolchain.gypi deps/v8/gypfiles/features.gypi \
-+			  deps/v8/gypfiles/v8.gyp node.gyp config.gypi
+ out/Makefile: config.gypi common.gypi node.gyp \
+-  deps/uv/uv.gyp deps/http_parser/http_parser.gyp deps/zlib/zlib.gyp \
++  deps/http_parser/http_parser.gyp \
+   tools/v8_gypfiles/toolchain.gypi tools/v8_gypfiles/features.gypi \
+   tools/v8_gypfiles/inspector.gypi tools/v8_gypfiles/v8.gyp
  	$(PYTHON) tools/gyp_node.py -f make
  
  config.gypi: configure configure.py
- 	@if [ -x config.status ]; then \
- 		./config.status; \
 -- 
 2.21.0
 
diff --git a/0002-Suppress-NPM-message-to-run-global-update.patch b/0002-Suppress-NPM-message-to-run-global-update.patch
index 08f4571..ccf8774 100644
--- a/0002-Suppress-NPM-message-to-run-global-update.patch
+++ b/0002-Suppress-NPM-message-to-run-global-update.patch
@@ -1,4 +1,4 @@
-From aa203e18cd0a5398e5b7e1900ba71a0816c1fd3d Mon Sep 17 00:00:00 2001
+From a3aeb06b2ed164e220d1ef1ff42256c3e7d0ad25 Mon Sep 17 00:00:00 2001
 From: Stephen Gallagher <sgallagh@redhat.com>
 Date: Tue, 1 May 2018 08:05:30 -0400
 Subject: [PATCH 2/3] Suppress NPM message to run global update
@@ -9,10 +9,10 @@ Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
  1 file changed, 54 deletions(-)
 
 diff --git a/deps/npm/bin/npm-cli.js b/deps/npm/bin/npm-cli.js
-index 6f76b23828531e7af98a7e3cd7d5abfaac09b40c..98edb6f45fe073e03794a2ae6e7aa7f5500723ee 100755
+index 705aa472e7e5502311f24767adfb0aebab396772..e8aebe644f610bb09c3748338fd70e6c8c422cea 100755
 --- a/deps/npm/bin/npm-cli.js
 +++ b/deps/npm/bin/npm-cli.js
-@@ -67,69 +67,15 @@
+@@ -66,69 +66,15 @@
    if (conf.usage && npm.command !== 'help') {
      npm.argv.unshift(npm.command)
      npm.command = 'help'
diff --git a/0003-Install-both-binaries-and-use-libdir.patch b/0003-Install-both-binaries-and-use-libdir.patch
index 2b77ef0..cfd7de0 100644
--- a/0003-Install-both-binaries-and-use-libdir.patch
+++ b/0003-Install-both-binaries-and-use-libdir.patch
@@ -1,4 +1,4 @@
-From bf276a108cf7710220c3ed2a8bd0685478703c9b Mon Sep 17 00:00:00 2001
+From 7e18c5370e11d7cecc1801756870c036cf26dd12 Mon Sep 17 00:00:00 2001
 From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
 Date: Tue, 19 Mar 2019 23:22:40 -0400
 Subject: [PATCH 3/3] Install both binaries and use libdir.
@@ -13,10 +13,10 @@ Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
  2 files changed, 20 insertions(+), 16 deletions(-)
 
 diff --git a/configure.py b/configure.py
-index 9f780ab9bca150df7a635af00c2976c1fb8156a7..f1f2b129466334436747c3e7f95b7bb6dc245253 100755
+index 1a0819e74113bc22a2e92eb08502b1fc33874343..caeb29d2868e0b88c98c3a5261dedd6305c5bc50 100755
 --- a/configure.py
 +++ b/configure.py
-@@ -560,10 +560,16 @@ parser.add_option('--shared',
+@@ -529,10 +529,16 @@ parser.add_option('--shared',
      action='store_true',
      dest='shared',
      help='compile shared library for embedding node in another project. ' +
@@ -33,11 +33,11 @@ index 9f780ab9bca150df7a635af00c2976c1fb8156a7..f1f2b129466334436747c3e7f95b7bb6
      dest='without_v8_platform',
      default=False,
      help='do not initialize v8 platform during node.js startup. ' +
-@@ -1106,10 +1112,11 @@ def configure_node(o):
- 
+@@ -1053,10 +1059,11 @@ def configure_node(o):
    o['variables']['node_no_browser_globals'] = b(options.no_browser_globals)
-   if options.code_cache_path:
-     o['variables']['node_code_cache_path'] = options.code_cache_path
+   # TODO(refack): fix this when implementing embedded code-cache when cross-compiling.
+   if o['variables']['want_separate_host_toolset'] == 0:
+     o['variables']['node_code_cache_path'] = 'yes'
    o['variables']['node_shared'] = b(options.shared)
 +  o['variables']['libdir'] = options.libdir
    node_module_version = getmoduleversion.get_version()
@@ -46,12 +46,12 @@ index 9f780ab9bca150df7a635af00c2976c1fb8156a7..f1f2b129466334436747c3e7f95b7bb6
      shlib_suffix = '%s.dylib'
    elif sys.platform.startswith('aix'):
 diff --git a/tools/install.py b/tools/install.py
-index 3befec213b1ce68b234f0a2602a8acd302fd8422..e7a6c67c3a72ee7745ba45049552a4e8feee5a61 100755
+index 655802980a6ea94d1d4ca1dc63c8c8e905fbb83a..fe4723bf15012c8aacacb0393dc8294c049b0503 100755
 --- a/tools/install.py
 +++ b/tools/install.py
-@@ -120,30 +120,27 @@ def subdir_files(path, dest, action):
-   for subdir, files in ret.items():
-     action(files, subdir + '/')
+@@ -119,30 +119,27 @@ def subdir_files(path, dest, action):
+   for subdir, files_in_path in ret.items():
+     action(files_in_path, subdir + '/')
  
  def files(action):
    is_windows = sys.platform == 'win32'
diff --git a/nodejs.spec b/nodejs.spec
index ff77541..69cb8ee 100644
--- a/nodejs.spec
+++ b/nodejs.spec
@@ -11,12 +11,12 @@
 # feature releases that are only supported for nine months, which is shorter
 # than a Fedora release lifecycle.
 %global nodejs_epoch 1
-%global nodejs_major 11
-%global nodejs_minor 14
+%global nodejs_major 12
+%global nodejs_minor 0
 %global nodejs_patch 0
 %global nodejs_abi %{nodejs_major}.%{nodejs_minor}
 # nodejs_soversion - from NODE_MODULE_VERSION in src/node_version.h
-%global nodejs_soversion 67
+%global nodejs_soversion 72
 %global nodejs_version %{nodejs_major}.%{nodejs_minor}.%{nodejs_patch}
 %global nodejs_release 1
 
@@ -25,9 +25,9 @@
 # Epoch is set to ensure clean upgrades from the old v8 package
 %global v8_epoch 1
 %global v8_major 7
-%global v8_minor 0
-%global v8_build 276
-%global v8_patch 38
+%global v8_minor 4
+%global v8_build 288
+%global v8_patch 21
 # V8 presently breaks ABI at least every x.y release while never bumping SONAME
 %global v8_abi %{v8_major}.%{v8_minor}
 %global v8_version %{v8_major}.%{v8_minor}.%{v8_build}.%{v8_patch}
@@ -48,18 +48,18 @@
 # llhttp - from deps/llhttp/include/llhttp.h
 %global llhttp_major 1
 %global llhttp_minor 1
-%global llhttp_patch 0
+%global llhttp_patch 1
 %global llhttp_version %{llhttp_major}.%{llhttp_minor}.%{llhttp_patch}
 
 # libuv - from deps/uv/include/uv/version.h
 %global libuv_major 1
-%global libuv_minor 27
+%global libuv_minor 28
 %global libuv_patch 0
 %global libuv_version %{libuv_major}.%{libuv_minor}.%{libuv_patch}
 
 # nghttp2 - from deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
 %global nghttp2_major 1
-%global nghttp2_minor 34
+%global nghttp2_minor 38
 %global nghttp2_patch 0
 %global nghttp2_version %{nghttp2_major}.%{nghttp2_minor}.%{nghttp2_patch}
 
@@ -85,7 +85,7 @@
 # npm - from deps/npm/package.json
 %global npm_epoch 1
 %global npm_major 6
-%global npm_minor 7
+%global npm_minor 9
 %global npm_patch 0
 %global npm_version %{npm_major}.%{npm_minor}.%{npm_patch}
 
@@ -324,7 +324,7 @@ The API documentation for the Node.js JavaScript runtime.
 rm -rf deps/zlib
 
 # Replace any instances of unversioned python' with python2
-pathfix.py -i %{__python2} -pn $(find -type f)
+pathfix.py -i %{__python2} -pn $(find -type f ! -name "*.js")
 find . -type f -exec sed -i "s~/usr\/bin\/env python~/usr/bin/python2~" {} \;
 find . -type f -exec sed -i "s~/usr\/bin\/python\W~/usr/bin/python2~" {} \;
 sed -i "s~python~python2~" $(find . -type f | grep "gyp$")
@@ -560,6 +560,10 @@ end
 %{_pkgdocdir}/npm/doc
 
 %changelog
+* Tue Apr 23 2019 Stephen Gallagher <sgallagh@redhat.com> - 1:12.0.0-1
+- Release 12.0.0
+- https://nodejs.org/en/blog/release/v12.0.0/
+
 * Thu Apr 11 2019 Stephen Gallagher <sgallagh@redhat.com> - 1:11.13.0-1
 - Update to 11.13.0
 - https://nodejs.org/en/blog/release/v11.13.0/
diff --git a/sources b/sources
index 0162cfe..8ee313f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (node-v11.14.0-stripped.tar.gz) = a54c5b885fdbff8de7233f2d88667a0638676fb3461cc99e50e5a022170233f10c6a55cd86e4321fd143f48654dcceca924807aed574558e47e4c821780755f2
+SHA512 (node-v12.0.0-stripped.tar.gz) = 68bec09de987059f361a9a7fb25a66eab35bd848a8dd2e000000ac6cc0c6fa2e7ec901ed0cd12e609b3303ecb6b598a10054afc66764d3d43153c323e773cb86