From c06a1f305d9081db64e39ce98b82f9add74f86e7 Mon Sep 17 00:00:00 2001
From: XhmikosR <xhmikosr@gmail.com>
Date: Wed, 29 Apr 2020 21:21:53 +0300
Subject: [PATCH] Backport #30130

Add a script to zip the built examples
---
 _config.yml                               |  1 +
 build/zip-examples.js                     | 55 +++++++++++++++++++++++
 package.json                              |  3 +-
 site/_layouts/simple.html                 |  1 +
 site/docs/4.4/getting-started/download.md |  6 +++
 5 files changed, 65 insertions(+), 1 deletion(-)
 create mode 100644 build/zip-examples.js

diff --git a/_config.yml b/_config.yml
index fb91401114..c0fdfab473 100644
--- a/_config.yml
+++ b/_config.yml
@@ -51,6 +51,7 @@ icons:                "https://icons.getbootstrap.com"
 download:
   source:           "https://github.com/twbs/bootstrap/archive/v4.4.1.zip"
   dist:             "https://github.com/twbs/bootstrap/releases/download/v4.4.1/bootstrap-4.4.1-dist.zip"
+  dist_examples:    "https://github.com/twbs/bootstrap/releases/download/v4.4.1/bootstrap-4.4.1-examples.zip"
 
 cdn:
   # See https://www.srihash.org for info on how to generate the hashes
diff --git a/build/zip-examples.js b/build/zip-examples.js
new file mode 100644
index 0000000000..884044fd88
--- /dev/null
+++ b/build/zip-examples.js
@@ -0,0 +1,55 @@
+#!/usr/bin/env node
+
+/*!
+ * Script to create the built examples zip archive;
+ * requires the `zip` command to be present!
+ * Copyright 2020 The Bootstrap Authors
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+'use strict'
+
+const path = require('path')
+const sh = require('shelljs')
+
+const {
+  version, version_short: versionShort
+} = require('../package.json')
+
+const folderName = `bootstrap-${version}-examples`
+
+sh.config.fatal = true
+
+if (!sh.test('-d', '_gh_pages')) {
+  throw new Error('The _gh_pages folder does not exist, did you forget building the docs?')
+}
+
+// switch to the root dir
+sh.cd(path.join(__dirname, '..'))
+
+// remove any previously created folder with the same name
+sh.rm('-rf', folderName)
+sh.mkdir('-p', folderName)
+
+// copy the examples and dist folders; for the examples we use `*`
+// so that its content are copied to the root dist dir
+sh.cp('-Rf', [
+  `_gh_pages/docs/${versionShort}/examples/*`,
+  `_gh_pages/docs/${versionShort}/dist/`
+], folderName)
+sh.rm(`${folderName}/index.html`)
+
+// sed-fu
+sh.find(`${folderName}/**/*.html`).forEach((file) => {
+  sh.sed('-i', new RegExp(`"/docs/${versionShort}/`, 'g'), '"../', file)
+  sh.sed('-i', /(<link href="\.\.\/.*) integrity=".*>/g, '$1>', file)
+  sh.sed('-i', /(<script src="\.\.\/.*) integrity=".*>/g, '$1></script>', file)
+})
+
+// create the zip file
+sh.exec(`zip -r9 "${folderName}.zip" "${folderName}"`, {
+  fatal: true
+})
+
+// remove the folder we created
+sh.rm('-rf', folderName)
diff --git a/package.json b/package.json
index 387e8b9708..8e58ee3754 100644
--- a/package.json
+++ b/package.json
@@ -73,10 +73,11 @@
     "docs-serve-only": "npm run docs-serve -- --skip-initial-build --no-watch",
     "lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
     "update-deps": "ncu -u -x \"jquery,karma-browserstack-launcher,popper.js,qunit,sinon\" && npm update && bundle update && cross-env-shell echo Manually update \\\"site/docs/$npm_package_version_short/assets/js/vendor/\\\"",
-    "release": "npm-run-all dist release-sri release-zip docs-production",
+    "release": "npm-run-all dist release-sri docs-build release-zip*",
     "release-sri": "node build/generate-sri.js",
     "release-version": "node build/change-version.js",
     "release-zip": "cross-env-shell \"shx rm -rf bootstrap-$npm_package_version-dist && shx cp -r dist/ bootstrap-$npm_package_version-dist && zip -r9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && shx rm -rf bootstrap-$npm_package_version-dist\"",
+    "release-zip-examples": "node build/zip-examples.js",
     "dist": "npm-run-all --parallel css js",
     "test": "npm-run-all lint dist js-test docs-compile docs-lint",
     "netlify": "npm-run-all dist release-sri docs-netlify",
diff --git a/site/_layouts/simple.html b/site/_layouts/simple.html
index bbf808df33..9d869be514 100644
--- a/site/_layouts/simple.html
+++ b/site/_layouts/simple.html
@@ -8,6 +8,7 @@ layout: default
     <p class="bd-lead">{{ page.description | smartify }}</p>
     {%- if page.title == "Examples" -%}
     <a href="{{ site.download.source }}" class="btn btn-lg btn-bd-primary" onclick="ga('send', 'event', 'Examples', 'Hero', 'Download');">Download source code</a>
+    <a href="{{ site.download.dist_examples }}" class="btn btn-lg btn-bd-primary mt-3 mt-sm-0 ml-sm-3 ml-md-5" onclick="ga('send', 'event', 'Examples', 'Hero', 'Download Examples');">Download Examples</a>
     {%- endif -%}
   </div>
   {% include ads.html %}
diff --git a/site/docs/4.4/getting-started/download.md b/site/docs/4.4/getting-started/download.md
index aed9be5beb..79d8d17522 100644
--- a/site/docs/4.4/getting-started/download.md
+++ b/site/docs/4.4/getting-started/download.md
@@ -28,6 +28,12 @@ Should you require [build tools]({{ site.baseurl }}/docs/{{ site.docs_version }}
 
 <a href="{{ site.download.source }}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download source');">Download source</a>
 
+## Examples
+
+If you want to download and examine our [examples]({{ site.baseurl }}/docs/{{ site.docs_version }}/examples/), you can grab the already built examples:
+
+<a href="{{ site.download.dist_examples }}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Examples');">Download Examples</a>
+
 ## BootstrapCDN
 
 Skip the download with [BootstrapCDN](https://www.bootstrapcdn.com/) to deliver cached version of Bootstrap's compiled CSS and JS to your project.
-- 
GitLab