From f80e20c4aa83797ceec103e1d4ba08351b4e035e Mon Sep 17 00:00:00 2001
From: ArthurSonzogni <sonzogniarthur@gmail.com>
Date: Sat, 9 Jul 2022 18:39:01 +0200
Subject: [PATCH] Build documents and examples on master.

---
 .github/workflows/build.yaml | 21 +++++++++++++++++----
 examples/CMakeLists.txt      |  1 +
 examples/index.html          | 12 ++++++++++++
 examples/sw.js               | 23 +++++++++++++++++++++++
 4 files changed, 53 insertions(+), 4 deletions(-)
 create mode 100644 examples/sw.js

diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 342aec63..b653ea26 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -169,7 +169,7 @@ jobs:
           overwrite: true
   
   documentation:
-    needs: package
+    if: github.ref == 'refs/heads/master'
     runs-on: ubuntu-latest
     steps:
       - name: "Checkout repository"
@@ -190,9 +190,22 @@ jobs:
         run: >
           mkdir build;
           cd build;
-          emcmake cmake ..;
-          cmake --build . --target doc;
-          rsync -amv --include='*/' --include='*.html' --include='*.js' --include='*.wasm' --exclude='*' examples doc/doxygen/html;
+          emcmake cmake ..
+          -DCMAKE_BUILD_TYPE=Release
+          -DFTXUI_BUILD_DOCS=ON
+          -DFTXUI_BUILD_EXAMPLES=ON
+          -DFTXUI_BUILD_TESTS=OFF
+          -DFTXUI_BUILD_TESTS_FUZZER=OFF
+          -DFTXUI_ENABLE_INSTALL=OFF;
+          cmake --build .;
+          rsync -amv
+          --include='*/'
+          --include='*.html'
+          --include='*.js'
+          --include='*.wasm'
+          --exclude='*'
+          examples
+          doc/doxygen/html;
 
       - name: "Deploy"
         uses: peaceiris/actions-gh-pages@v3
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 74f295d7..7b02d17e 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -19,6 +19,7 @@ if (EMSCRIPTEN)
   get_property(EXAMPLES GLOBAL PROPERTY FTXUI::EXAMPLES)
   foreach(file
       "index.html"
+      "sw.js"
       "run_webassembly.py")
     configure_file(${file} ${file})
   endforeach(file)
diff --git a/examples/index.html b/examples/index.html
index 717a5fe3..c714d54c 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -5,6 +5,18 @@
     <script src="https://cdn.jsdelivr.net/npm/xterm@4.18.0/lib/xterm.min.js"></script>
     <script src="https://cdn.jsdelivr.net/npm/xterm-addon-webgl@0.11.4/lib/xterm-addon-webgl.min.js"></script>
     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@4.11.0/css/xterm.css"></link>
+    <!--Add COOP/COEP via a ServiceWorker to use SharedArrayBuffer-->
+    <script>
+      if ("serviceWorker" in navigator && !window.crossOriginIsolated) {
+        navigator.serviceWorker.register(new URL("./sw.js", location.href)).then(
+          registration => {
+            if (registration.active && !navigator.serviceWorker.controller) {
+              window.location.reload();
+            }
+          },
+        );
+      } 
+    </script>
   </head>
   <body>
     <script id="example_script"></script>
diff --git a/examples/sw.js b/examples/sw.js
new file mode 100644
index 00000000..3e3877a0
--- /dev/null
+++ b/examples/sw.js
@@ -0,0 +1,23 @@
+// sw.js
+self.addEventListener("install", () => self.skipWaiting());
+self.addEventListener("activate", e => e.waitUntil(self.clients.claim()));
+self.addEventListener("fetch", e => {
+  if (e.request.mode != 'navigate')
+    return;
+
+  e.respondWith((async () => {
+    const response = await fetch(e.request);
+
+    const newHeaders = new Headers(response.headers);
+    newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp");
+    newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
+
+    const moddedResponse = new Response(response.body, {
+      status: response.status,
+      statusText: response.statusText,
+      headers: newHeaders,
+    });
+
+    return moddedResponse;
+  })());
+});
-- 
GitLab