]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Add a simple script to generate SRI hashes for our assets. (#24814)
authorXhmikosR <xhmikosr@gmail.com>
Thu, 23 Nov 2017 08:22:54 +0000 (10:22 +0200)
committerGitHub <noreply@github.com>
Thu, 23 Nov 2017 08:22:54 +0000 (10:22 +0200)
build/generate-sri.js [new file with mode: 0644]
build/ship.sh
package-lock.json
package.json

diff --git a/build/generate-sri.js b/build/generate-sri.js
new file mode 100644 (file)
index 0000000..b21311b
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/env node
+
+/*!
+ * Script to generate SRI hashes for use in our docs.
+ * Remember to use the same vendor files as the CDN ones,
+ * otherwise the hashes won't match!
+ *
+ * Copyright 2017 The Bootstrap Authors
+ * Copyright 2017 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+'use strict'
+
+const fs = require('fs')
+const path = require('path')
+const sriToolbox = require('sri-toolbox')
+const sh = require('shelljs')
+const sed = sh.sed
+
+sh.config.fatal = true
+
+const configFile = path.join(__dirname, '..', '_config.yml')
+
+// Array of objects which holds the files to generate SRI hashes for.
+// `file` is the path from the root folder
+// `configPropertyName` is the _config.yml variable's name of the file
+const files = [
+  {
+    file: 'dist/css/bootstrap.min.css',
+    configPropertyName: 'css_hash'
+  },
+  {
+    file: 'dist/js/bootstrap.min.js',
+    configPropertyName: 'js_hash'
+  },
+  {
+    file: 'assets/js/vendor/jquery-slim.min.js',
+    configPropertyName: 'jquery_hash'
+  },
+  {
+    file: 'assets/js/vendor/popper.min.js',
+    configPropertyName: 'popper_hash'
+  }
+]
+
+files.forEach((file) => {
+  fs.readFile(file.file, 'utf8', (err, data) => {
+    if (err) {
+      throw err
+    }
+
+    const integrity = sriToolbox.generate({
+      algorithms: ['sha384']
+    }, data)
+
+    console.log(`${file.configPropertyName}: ${integrity}`)
+
+    sed('-i', new RegExp(`(\\s${file.configPropertyName}:\\s+"|')(\\S+)("|')`), '$1' + integrity + '$3', configFile)
+  })
+})
index cdd5ab8eb54fe08436781364b4953c3ee05e105d..d252cd38f3e947537b79b06fc586cfa5b8b970ec 100755 (executable)
@@ -40,6 +40,12 @@ printf "\n${magenta}Compile latest CSS and JS...${end}"
 printf "\n${magenta}=======================================================\n${end}"
 npm run dist
 
+# Generate the SRI hashes
+printf "\n${magenta}=======================================================${end}"
+printf "\n${magenta}Generate the SRI hashes...${end}"
+printf "\n${magenta}=======================================================\n${end}"
+npm run release-sri
+
 # Compress the dist files
 printf "\n${magenta}=======================================================${end}"
 printf "\n${magenta}Compressing the dist files...${end}"
index f2c231bf599b9752d602d4969944eacd56265574..cc79025a724ccb7d97ea6b38517ba209b6f56ada 100644 (file)
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
       "dev": true
     },
+    "sri-toolbox": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/sri-toolbox/-/sri-toolbox-0.2.0.tgz",
+      "integrity": "sha1-p/6lw/3lXmdc8cjAbz67XCk1g14=",
+      "dev": true
+    },
     "sshpk": {
       "version": "1.13.1",
       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
index 9eedd9b819aca3f26a26168dd1f71d72a9150959..e003847ac5ac812ccc6533a3fc0df833ffbc5d97 100644 (file)
@@ -55,6 +55,7 @@
     "docs-upload-preview": "build/upload-preview.sh",
     "docs-workbox-precache": "node build/workbox.js",
     "maintenance-dependencies": "ncu -a -x jquery && npm update && bundle update && shx echo \"Manually update assets/js/vendor/*, js/tests/vendor/* and .travis.yml\"",
+    "release-sri": "node build/generate-sri.js",
     "release-version": "node build/change-version.js",
     "release-zip": "cd dist/ && zip -r9 bootstrap-$npm_package_version-dist.zip * && shx mv bootstrap-$npm_package_version-dist.zip ..",
     "dist": "npm-run-all --parallel css js",
     "rollup-plugin-node-resolve": "^3.0.0",
     "shelljs": "^0.7.8",
     "shx": "^0.2.2",
+    "sri-toolbox": "^0.2.0",
     "stylelint": "^8.2.0",
     "stylelint-config-recommended-scss": "^2.0.0",
     "stylelint-config-standard": "^17.0.0",