diff --git a/README.md b/README.md
index 70560c5..8c907de 100644
--- a/README.md
+++ b/README.md
@@ -224,28 +224,6 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
-
- Facebook
-
-### Videos
-
-* [A Customer Service Approach to SRE](https://www.usenix.org/conference/srecon19emea/presentation/looney)
-* [How (Not) to Scale a Project: A Post-Mortem](https://www.usenix.org/conference/srecon19asia/presentation/bagnoli)
-* [Releasing the World's Largest Python Site Every 7 Minutes](https://www.usenix.org/conference/srecon19asia/presentation/wong-shuhong)
-* [Using ML to Automate Dynamic Error Categorization](https://www.usenix.org/conference/srecon19asia/presentation/davoli)
-
-
-
-
- Fastly
-
-### Videos
-
-* [SRE & Product Management: How to Level up Your Team (and Career!) by Thinking like a Product Manager](https://www.usenix.org/conference/srecon19americas/presentation/wohlner)
-* [Resilience Engineering Mythbusting](https://www.usenix.org/conference/srecon19americas/presentation/gallego)
-
-
-
eBay
@@ -291,6 +269,28 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
+
+ Facebook
+
+### Videos
+
+* [A Customer Service Approach to SRE](https://www.usenix.org/conference/srecon19emea/presentation/looney)
+* [How (Not) to Scale a Project: A Post-Mortem](https://www.usenix.org/conference/srecon19asia/presentation/bagnoli)
+* [Releasing the World's Largest Python Site Every 7 Minutes](https://www.usenix.org/conference/srecon19asia/presentation/wong-shuhong)
+* [Using ML to Automate Dynamic Error Categorization](https://www.usenix.org/conference/srecon19asia/presentation/davoli)
+
+
+
+
+ Fastly
+
+### Videos
+
+* [SRE & Product Management: How to Level up Your Team (and Career!) by Thinking like a Product Manager](https://www.usenix.org/conference/srecon19americas/presentation/wohlner)
+* [Resilience Engineering Mythbusting](https://www.usenix.org/conference/srecon19americas/presentation/gallego)
+
+
+
GitHub
@@ -360,6 +360,15 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
+
+ Gojek
+
+### Blog Posts
+
+* [Why We Swear by the RCA](https://blog.gojekengineering.com/why-we-swear-by-the-rca-f535fd5abbcb)
+
+
+
Google
@@ -408,15 +417,6 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
-
- Gojek
-
-### Blog Posts
-
-* [Why We Swear by the RCA](https://blog.gojekengineering.com/why-we-swear-by-the-rca-f535fd5abbcb)
-
-
-
Grab
@@ -666,25 +666,6 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
-
- Slalom Build
-
-### Blog Posts
-
-* [Beginners Guide to DevOps: How to Make It into the Industry](https://medium.com/slalom-build/beginners-guid-to-devops-how-to-make-it-into-the-industry-c1652d59807)
-* [GitHub Actions: Beyond CI/CD](https://medium.com/slalom-build/github-actions-beyond-ci-cd-cb3ddc6abaa)
-* [Why isn’t all test automation run on the pipeline?](https://medium.com/slalom-build/why-isnt-all-test-automation-run-on-the-pipeline-b2c57afbdf5a)
-* [The Many Shapes of Site Reliability Engineering](https://medium.com/slalom-build/the-many-shapes-of-site-reliability-engineering-468359866517)
-* [How to build a secure by default Kubernetes cluster with a basic CI/CD pipeline on AWS](https://medium.com/slalom-build/how-to-build-a-secure-by-default-kubernetes-cluster-with-a-basic-ci-cd-pipeline-on-aws-ebfe0da1c7c9)
-* [Secret Management Architectures: Finding the balance between security and complexity](https://medium.com/slalom-build/secret-management-architectures-finding-the-balance-between-security-and-complexity-d857ceaa2300)
-* [Detecting Malicious Requests with Keras & Tensorflow](https://medium.com/slalom-build/detecting-malicious-requests-with-keras-tensorflow-5d5db06b4f28)
-* [The Lego Monolith — A Monolith Microservice Proof of Concept](https://medium.com/slalom-build/the-lego-monolith-a-monolith-microservice-proof-of-concept-a402ca1654e4)
-* [Managing Secrets Using Hashicorp Vault](https://medium.com/slalom-build/managing-secrets-using-hashicorp-vault-ed6b9e0375ac)
-* [Packaging Spring Boot Applications for Deployment on Kubernetes](https://medium.com/slalom-build/packaging-spring-boot-applications-for-deployment-on-kubernetes-5fb64bc65406)
-* [Immutable Infrastructure and Continuous Delivery in the Cloud](https://medium.com/slalom-build/immutable-infrastructure-and-continuous-delivery-in-the-cloud-56ee4b31b8d5)
-
-
-
Scribd
@@ -733,6 +714,25 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
+
+ Slalom Build
+
+### Blog Posts
+
+* [Beginners Guide to DevOps: How to Make It into the Industry](https://medium.com/slalom-build/beginners-guid-to-devops-how-to-make-it-into-the-industry-c1652d59807)
+* [GitHub Actions: Beyond CI/CD](https://medium.com/slalom-build/github-actions-beyond-ci-cd-cb3ddc6abaa)
+* [Why isn’t all test automation run on the pipeline?](https://medium.com/slalom-build/why-isnt-all-test-automation-run-on-the-pipeline-b2c57afbdf5a)
+* [The Many Shapes of Site Reliability Engineering](https://medium.com/slalom-build/the-many-shapes-of-site-reliability-engineering-468359866517)
+* [How to build a secure by default Kubernetes cluster with a basic CI/CD pipeline on AWS](https://medium.com/slalom-build/how-to-build-a-secure-by-default-kubernetes-cluster-with-a-basic-ci-cd-pipeline-on-aws-ebfe0da1c7c9)
+* [Secret Management Architectures: Finding the balance between security and complexity](https://medium.com/slalom-build/secret-management-architectures-finding-the-balance-between-security-and-complexity-d857ceaa2300)
+* [Detecting Malicious Requests with Keras & Tensorflow](https://medium.com/slalom-build/detecting-malicious-requests-with-keras-tensorflow-5d5db06b4f28)
+* [The Lego Monolith — A Monolith Microservice Proof of Concept](https://medium.com/slalom-build/the-lego-monolith-a-monolith-microservice-proof-of-concept-a402ca1654e4)
+* [Managing Secrets Using Hashicorp Vault](https://medium.com/slalom-build/managing-secrets-using-hashicorp-vault-ed6b9e0375ac)
+* [Packaging Spring Boot Applications for Deployment on Kubernetes](https://medium.com/slalom-build/packaging-spring-boot-applications-for-deployment-on-kubernetes-5fb64bc65406)
+* [Immutable Infrastructure and Continuous Delivery in the Cloud](https://medium.com/slalom-build/immutable-infrastructure-and-continuous-delivery-in-the-cloud-56ee4b31b8d5)
+
+
+
Soundcloud
@@ -876,8 +876,7 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
-
- SRECon Mix Playlist
+## SRECon Mix Playlist
### Videos
@@ -910,8 +909,6 @@ _Note to readers: This list refers to some of the articles, posts, videos, tools
* [Yelp - What I Wish I Knew before Going On-Call](https://www.usenix.org/conference/srecon19emea/presentation/shu)
* [Zendesk - Latency and Availability Error Budgets Done Right at Scale](https://www.usenix.org/conference/srecon20americas/presentation/moyer)
-
-
---
## Resources
diff --git a/package-lock.json b/package-lock.json
index 9c0bda5..ae5fbab 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -110,6 +110,18 @@
"type-detect": "^4.0.5"
}
},
+ "chai-arrays": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/chai-arrays/-/chai-arrays-2.2.0.tgz",
+ "integrity": "sha512-4awrdGI2EH8owJ9I58PXwG4N56/FiM8bsn4CVSNEgr4GKAM6Kq5JPVApUbhUBjDakbZNuRvV7quRSC38PWq/tg==",
+ "dev": true
+ },
+ "chai-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz",
+ "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==",
+ "dev": true
+ },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
diff --git a/package.json b/package.json
index 0a857ec..2669589 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,9 @@
"homepage": "https://github.com/upgundecha/howtheysre#readme",
"devDependencies": {
"chai": "^4.3.0",
+ "chai-arrays": "^2.2.0",
+ "chai-string": "^1.5.0",
"mocha": "^8.3.0"
- }
+ },
+ "dependencies": {}
}
diff --git a/test/main.spec.js b/test/main.spec.js
index 18f456e..cca4099 100644
--- a/test/main.spec.js
+++ b/test/main.spec.js
@@ -1,18 +1,36 @@
const fs = require('fs');
-const { assert } = require('chai');
+const chai = require('chai');
+
+chai.use(require('chai-arrays'));
+chai.use(require('chai-string'));
+
+var expect = chai.expect;
const srcMd = fs.readFileSync('README.md', 'utf8');
describe('Header', function() {
it('Starts with #', function() {
- assert.isOk(srcMd.startsWith('# How they SRE'), 'Header is broken');
+ expect(srcMd).to. startsWith('# How they SRE');
});
});
describe('Sections', function() {
- ['Introduction', 'Organizations', 'Resources', 'Credits', 'Other How They... repos', 'Contribute', 'License'] .forEach(function (section) {
+ ['Introduction',
+ 'Organizations',
+ 'Resources',
+ 'Credits',
+ 'Other How They... repos',
+ 'Contribute',
+ 'License'].forEach(function (section) {
it(`${section}`, function() {
- assert.isOk(srcMd.includes(`## ${section}`), `${section} section is missing`);
+ expect(srcMd).to.contain(`## ${section}`);
});
});
+});
+
+describe('Order', function() {
+ it('Organization list is sorted', function() {
+ var list = srcMd.match(/(?<=)(.*?)(?=<\/summary>)/g);
+ expect(list).to.be.sorted(Intl.Collator().compare);
+ });
});
\ No newline at end of file