diff --git a/adopters/.gitignore b/adopters/.gitignore new file mode 100644 index 000000000..231a148ca --- /dev/null +++ b/adopters/.gitignore @@ -0,0 +1,3 @@ +Gemfile.lock +/vendor/ +.bundle \ No newline at end of file diff --git a/adopters/Gemfile b/adopters/Gemfile new file mode 100644 index 000000000..1cd3261e2 --- /dev/null +++ b/adopters/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } + +gem 'commonmarker' diff --git a/adopters/README.md b/adopters/README.md new file mode 100644 index 000000000..80b11c489 --- /dev/null +++ b/adopters/README.md @@ -0,0 +1,34 @@ +--- +description: The organizations that are using these InnerSource Patterns. +cover: https://todaysveterinarybusiness.com/wp-content/uploads/sites/2/2020/03/Innovation-Station.jpg +coverY: 232 +layout: + cover: + visible: true + size: hero + outline: + visible: false +--- + +# Adopters + +Each pattern in this book has been contributed by an organization. That confirms that a single organization is using a given approach. + +However the idea of a pattern is that they provide repeatable, proven solution that other organizations can apply in their own context. +Therefore these patterns become more powerful, when multiple organizations confirm that they have implemented a pattern. + +This provides a great low-friction way for all readers of this book to contribute! + +## Share your pattern adoption + +If you see a pattern in this book that you are using at your organization, please do the following: + +- on a given pattern page, click the 'Edit on GitHub' button +- add your own organization to the 'Known Instances' section +- then submit your changes as a Pull Request + +## Showcase your InnerSource approach + +Once the Pull Request with your changes has been merged, you will not only be listed on the pattern itself, but you will also get a dedicated page for your organization, showcasing all the patterns that you are using. + +See the pages below for all organization that have confirmed their adoption and implementation of some of our patterns. diff --git a/adopters/adopters.txt b/adopters/adopters.txt new file mode 100644 index 000000000..5e98eb69d --- /dev/null +++ b/adopters/adopters.txt @@ -0,0 +1,27 @@ +Airbus +American Airlines +Analog Devices +BBC +BBVA AI Factory +Banco Santander +Bitergia +Bosch +Comcast +DAZN +DB Systel +Elbit Systems +Entelgy +Europace +Flutter Entertainment +GitHub +Google +IBM +Mercado Libre +Mercedes-Benz +Microsoft +Nike +PayPal +SAP +Uber +WellSky +Zylk \ No newline at end of file diff --git a/adopters/airbus.md b/adopters/airbus.md new file mode 100644 index 000000000..7cffb984d --- /dev/null +++ b/adopters/airbus.md @@ -0,0 +1,13 @@ +# Airbus + +These are the InnerSource Patterns that **Airbus** has adopted: + +* [InnerSource License](../patterns/2-structured/innersource-license.md) +* [Repository Activity Score](../patterns/2-structured/repository-activity-score.md) +* [Start as an Experiment](../patterns/2-structured/start-as-experiment.md) +* [Maturity Model](../patterns/2-structured/maturity-model.md) +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) +* [Dedicated Community Leader](../patterns/2-structured/dedicated-community-leader.md) +* [Standard Base Documentation](../patterns/2-structured/project-setup/base-documentation.md) + +If you work at **Airbus** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/american-airlines.md b/adopters/american-airlines.md new file mode 100644 index 000000000..e85f8c72c --- /dev/null +++ b/adopters/american-airlines.md @@ -0,0 +1,7 @@ +# American Airlines + +These are the InnerSource Patterns that **American Airlines** has adopted: + +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) + +If you work at **American Airlines** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/analog-devices.md b/adopters/analog-devices.md new file mode 100644 index 000000000..87d40b127 --- /dev/null +++ b/adopters/analog-devices.md @@ -0,0 +1,7 @@ +# Analog Devices + +These are the InnerSource Patterns that **Analog Devices** has adopted: + +* [Standard Base Documentation](../patterns/2-structured/project-setup/base-documentation.md) + +If you work at **Analog Devices** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/banco-santander.md b/adopters/banco-santander.md new file mode 100644 index 000000000..89c99383b --- /dev/null +++ b/adopters/banco-santander.md @@ -0,0 +1,7 @@ +# Banco Santander + +These are the InnerSource Patterns that **Banco Santander** has adopted: + +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) + +If you work at **Banco Santander** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/bbc.md b/adopters/bbc.md new file mode 100644 index 000000000..23a5d0397 --- /dev/null +++ b/adopters/bbc.md @@ -0,0 +1,7 @@ +# BBC + +These are the InnerSource Patterns that **BBC** has adopted: + +* [Transparent Cross-Team Decision Making using RFCs](../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) + +If you work at **BBC** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/bbva-ai-factory.md b/adopters/bbva-ai-factory.md new file mode 100644 index 000000000..cf0818aa8 --- /dev/null +++ b/adopters/bbva-ai-factory.md @@ -0,0 +1,7 @@ +# BBVA AI Factory + +These are the InnerSource Patterns that **BBVA AI Factory** has adopted: + +* [Core Team](../patterns/2-structured/core-team.md) + +If you work at **BBVA AI Factory** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/bitergia.md b/adopters/bitergia.md new file mode 100644 index 000000000..a1e37db2a --- /dev/null +++ b/adopters/bitergia.md @@ -0,0 +1,7 @@ +# Bitergia + +These are the InnerSource Patterns that **Bitergia** has adopted: + +* [Maturity Model](../patterns/2-structured/maturity-model.md) + +If you work at **Bitergia** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/bosch.md b/adopters/bosch.md new file mode 100644 index 000000000..5772db5a5 --- /dev/null +++ b/adopters/bosch.md @@ -0,0 +1,12 @@ +# Bosch + +These are the InnerSource Patterns that **Bosch** has adopted: + +* [Review Committee](../patterns/2-structured/review-committee.md) +* [Start as an Experiment](../patterns/2-structured/start-as-experiment.md) +* [Document your Guiding Principles](../patterns/2-structured/document-your-guiding-principles.md) +* [Trusted Committer](../patterns/2-structured/trusted-committer.md) +* [Contracted Contributor](../patterns/2-structured/contracted-contributor.md) +* [Dedicated Community Leader](../patterns/2-structured/dedicated-community-leader.md) + +If you work at **Bosch** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/comcast.md b/adopters/comcast.md new file mode 100644 index 000000000..e0e746df3 --- /dev/null +++ b/adopters/comcast.md @@ -0,0 +1,7 @@ +# Comcast + +These are the InnerSource Patterns that **Comcast** has adopted: + +* [Standard Release Process](../patterns/2-structured/release-process.md) + +If you work at **Comcast** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/dazn.md b/adopters/dazn.md new file mode 100644 index 000000000..69d2c533f --- /dev/null +++ b/adopters/dazn.md @@ -0,0 +1,7 @@ +# DAZN + +These are the InnerSource Patterns that **DAZN** has adopted: + +* [Transparent Cross-Team Decision Making using RFCs](../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) + +If you work at **DAZN** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/db-systel.md b/adopters/db-systel.md new file mode 100644 index 000000000..4f14e1e6d --- /dev/null +++ b/adopters/db-systel.md @@ -0,0 +1,7 @@ +# DB Systel + +These are the InnerSource Patterns that **DB Systel** has adopted: + +* [InnerSource License](../patterns/2-structured/innersource-license.md) + +If you work at **DB Systel** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/elbit-systems.md b/adopters/elbit-systems.md new file mode 100644 index 000000000..1c2c350f7 --- /dev/null +++ b/adopters/elbit-systems.md @@ -0,0 +1,7 @@ +# Elbit Systems + +These are the InnerSource Patterns that **Elbit Systems** has adopted: + +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) + +If you work at **Elbit Systems** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/entelgy.md b/adopters/entelgy.md new file mode 100644 index 000000000..408f388e7 --- /dev/null +++ b/adopters/entelgy.md @@ -0,0 +1,7 @@ +# Entelgy + +These are the InnerSource Patterns that **Entelgy** has adopted: + +* [Maturity Model](../patterns/2-structured/maturity-model.md) + +If you work at **Entelgy** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/europace.md b/adopters/europace.md new file mode 100644 index 000000000..482ed2f34 --- /dev/null +++ b/adopters/europace.md @@ -0,0 +1,12 @@ +# Europace + +These are the InnerSource Patterns that **Europace** has adopted: + +* [Transparent Cross-Team Decision Making using RFCs](../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) +* [Document your Guiding Principles](../patterns/2-structured/document-your-guiding-principles.md) +* [Service vs. Library](../patterns/2-structured/service-vs-library.md) +* [Standard Base Documentation](../patterns/2-structured/project-setup/base-documentation.md) +* [Communication Tooling](../patterns/2-structured/project-setup/communication-tooling.md) +* [Issue Tracker Use Cases](../patterns/2-structured/project-setup/issue-tracker.md) + +If you work at **Europace** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/flutter-entertainment.md b/adopters/flutter-entertainment.md new file mode 100644 index 000000000..5fc118682 --- /dev/null +++ b/adopters/flutter-entertainment.md @@ -0,0 +1,7 @@ +# Flutter Entertainment + +These are the InnerSource Patterns that **Flutter Entertainment** has adopted: + +* [Service vs. Library](../patterns/2-structured/service-vs-library.md) + +If you work at **Flutter Entertainment** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/generate_adopters.rb b/adopters/generate_adopters.rb new file mode 100644 index 000000000..4550ee9a3 --- /dev/null +++ b/adopters/generate_adopters.rb @@ -0,0 +1,131 @@ +require 'rubygems' +require 'bundler/setup' +Bundler.require(:default) + +require 'pp' + +def collect_section_nodes(file, section_title) + markdown = open(file).readlines().join + doc = CommonMarker.render_doc(markdown) + + title_found = false + section_nodes = [] + + doc.walk do |node| + if node.type == :header + if title_found == false + node.each do |subnode| + if subnode.type == :text and subnode.string_content == section_title + title_found = true + end + end + # stop the recursion once the next header is reached + # TODO: is this correct, or should we check if this is another `##` header, rather than any header? + else + break + end + # once the title has been found, collect all nodes up to the next header + elsif title_found == true + section_nodes << node + end + end + + return section_nodes +end + +# Extracts the value of a specific section from a markdown file +def extract_section(file, section_title) + markdown = open(file).readlines().join + doc = CommonMarker.render_doc(markdown) + + title_found = false + section_nodes = [] + + # once the header in question is found, extract all the text nodes from the + # subsequent paragaph + doc.walk do |node| + if node.type == :header + node.each do |subnode| + if subnode.type == :text and subnode.string_content == section_title + title_found = true + end + end + elsif node.type == :paragraph && title_found == true + node.each do |subnode| + section_nodes += extract_text(subnode) + end + break # stop the recursion once the paragraph has been processed + end + end + + section_content = section_nodes.join("") + return section_content +end + +# extracts the pure text content from this CommonMarker node, and its children. +# returns an array of strings +def extract_text(node) + section_nodes = [] + if node.type == :softbreak + section_nodes << " " + elsif node.type == :text or node.type == :code + section_nodes << node.string_content + else + node.each do |subnode| + section_nodes += extract_text(subnode) + end + end + return section_nodes +end + +def generate_markdown_filename(org_name) + markdown_filename = org_name.downcase.tr(" ", "-").gsub(/[^\w.-]/, "") + markdown_filename = "#{markdown_filename}.md" + return markdown_filename +end + +PATTERNS = Dir["../patterns/2-structured/*.md","../patterns/2-structured/project-setup/*.md", "../patterns/3-validated/*.md"] +ORGS = File.readlines('adopters.txt').map(&:chomp) + +adopter_patterns = Hash.new() +pattern_titles = Hash.new() + +# init with empty lists +ORGS.each do |org| + adopter_patterns[org] = [] +end + +PATTERNS.each do |file| + title = extract_section(file, "Title") + pattern_titles[file] = title + + known_instances = collect_section_nodes(file, "Known Instances") + known_instances = known_instances.map{|n| extract_text(n)}.join(" ") + + ORGS.each do |org| + if known_instances.include? org + adopter_patterns[org] << file + end + end +end + +adopter_patterns.each do |org, patterns_files| + markdown_filename = generate_markdown_filename(org) + + file_content = "# #{org}\n\n" + file_content += "These are the InnerSource Patterns that **#{org}** has adopted:\n\n" + file_content += patterns_files.map{|f| "* [#{pattern_titles[f]}](#{f})"}.join("\n") + file_content += "\n\n" + file_content += "If you work at **#{org}** and want to modify the list above, please follow [these instructions](./README.md).\n" + + File.write(markdown_filename, file_content) + + # print in format required for inclusion in the ToC + puts "* [#{org}](../../adopters/#{markdown_filename})" +end + +# pp adopter_patterns + +# puts adopter_patterns.map{|patterns| patterns.count}.reduce(&:+) + + diff --git a/adopters/github.md b/adopters/github.md new file mode 100644 index 000000000..4c942c4cf --- /dev/null +++ b/adopters/github.md @@ -0,0 +1,11 @@ +# GitHub + +These are the InnerSource Patterns that **GitHub** has adopted: + +* [30 Day Warranty](../patterns/2-structured/30-day-warranty.md) +* [Transparent Cross-Team Decision Making using RFCs](../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) +* [Standard Release Process](../patterns/2-structured/release-process.md) +* [Document your Guiding Principles](../patterns/2-structured/document-your-guiding-principles.md) +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) + +If you work at **GitHub** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/google.md b/adopters/google.md new file mode 100644 index 000000000..5806cac9b --- /dev/null +++ b/adopters/google.md @@ -0,0 +1,7 @@ +# Google + +These are the InnerSource Patterns that **Google** has adopted: + +* [Transparent Cross-Team Decision Making using RFCs](../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) + +If you work at **Google** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/ibm.md b/adopters/ibm.md new file mode 100644 index 000000000..1d5d3ae00 --- /dev/null +++ b/adopters/ibm.md @@ -0,0 +1,7 @@ +# IBM + +These are the InnerSource Patterns that **IBM** has adopted: + +* [Extensions for Sustainable Growth](../patterns/2-structured/extensions-for-sustainable-growth.md) + +If you work at **IBM** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/mercado-libre.md b/adopters/mercado-libre.md new file mode 100644 index 000000000..c0dd0e647 --- /dev/null +++ b/adopters/mercado-libre.md @@ -0,0 +1,10 @@ +# Mercado Libre + +These are the InnerSource Patterns that **Mercado Libre** has adopted: + +* [Trusted Committer](../patterns/2-structured/trusted-committer.md) +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) +* [Standard Base Documentation](../patterns/2-structured/project-setup/base-documentation.md) +* [Communication Tooling](../patterns/2-structured/project-setup/communication-tooling.md) + +If you work at **Mercado Libre** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/mercedes-benz.md b/adopters/mercedes-benz.md new file mode 100644 index 000000000..2f42b7e18 --- /dev/null +++ b/adopters/mercedes-benz.md @@ -0,0 +1,7 @@ +# Mercedes-Benz + +These are the InnerSource Patterns that **Mercedes-Benz** has adopted: + +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) + +If you work at **Mercedes-Benz** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/microsoft.md b/adopters/microsoft.md new file mode 100644 index 000000000..09c12a703 --- /dev/null +++ b/adopters/microsoft.md @@ -0,0 +1,7 @@ +# Microsoft + +These are the InnerSource Patterns that **Microsoft** has adopted: + +* [30 Day Warranty](../patterns/2-structured/30-day-warranty.md) + +If you work at **Microsoft** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/nike.md b/adopters/nike.md new file mode 100644 index 000000000..2236ea9b2 --- /dev/null +++ b/adopters/nike.md @@ -0,0 +1,10 @@ +# Nike + +These are the InnerSource Patterns that **Nike** has adopted: + +* [Praise Participants](../patterns/2-structured/praise-participants.md) +* [Trusted Committer](../patterns/2-structured/trusted-committer.md) +* [Cross-Team Project Valuation](../patterns/2-structured/crossteam-project-valuation.md) +* [Core Team](../patterns/2-structured/core-team.md) + +If you work at **Nike** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/paypal.md b/adopters/paypal.md new file mode 100644 index 000000000..167105fb4 --- /dev/null +++ b/adopters/paypal.md @@ -0,0 +1,8 @@ +# PayPal + +These are the InnerSource Patterns that **PayPal** has adopted: + +* [30 Day Warranty](../patterns/2-structured/30-day-warranty.md) +* [Trusted Committer](../patterns/2-structured/trusted-committer.md) + +If you work at **PayPal** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/sap.md b/adopters/sap.md new file mode 100644 index 000000000..ccbcf74d6 --- /dev/null +++ b/adopters/sap.md @@ -0,0 +1,9 @@ +# SAP + +These are the InnerSource Patterns that **SAP** has adopted: + +* [Repository Activity Score](../patterns/2-structured/repository-activity-score.md) +* [InnerSource Portal](../patterns/2-structured/innersource-portal.md) +* [Gig Marketplace](../patterns/2-structured/gig-marketplace.md) + +If you work at **SAP** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/uber.md b/adopters/uber.md new file mode 100644 index 000000000..c0d327ba6 --- /dev/null +++ b/adopters/uber.md @@ -0,0 +1,7 @@ +# Uber + +These are the InnerSource Patterns that **Uber** has adopted: + +* [Transparent Cross-Team Decision Making using RFCs](../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) + +If you work at **Uber** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/wellsky.md b/adopters/wellsky.md new file mode 100644 index 000000000..d1c9495b2 --- /dev/null +++ b/adopters/wellsky.md @@ -0,0 +1,9 @@ +# WellSky + +These are the InnerSource Patterns that **WellSky** has adopted: + +* [Group Support](../patterns/2-structured/group-support.md) +* [Core Team](../patterns/2-structured/core-team.md) +* [Service vs. Library](../patterns/2-structured/service-vs-library.md) + +If you work at **WellSky** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/adopters/zylk.md b/adopters/zylk.md new file mode 100644 index 000000000..c4095566d --- /dev/null +++ b/adopters/zylk.md @@ -0,0 +1,7 @@ +# Zylk + +These are the InnerSource Patterns that **Zylk** has adopted: + +* [Maturity Model](../patterns/2-structured/maturity-model.md) + +If you work at **Zylk** and want to modify the list above, please follow [these instructions](./README.md). diff --git a/book/en/toc.md b/book/en/toc.md index 68a11386b..c98f64740 100644 --- a/book/en/toc.md +++ b/book/en/toc.md @@ -44,6 +44,37 @@ Instead edit toc_template.md * [Transparent Cross-Team Decision Making using RFCs](../../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) - InnerSource projects that want to achieve high participation rates and make the best possible decisions for everybody involved need to find ways to create participatory systems throughout the full software lifecycle. Publishing internal Requests for Comments (RFCs) documents allows for discussions early on in the design process, and increases the chances to build solutions with a high degree of commitment from all involved parties. * [Trusted Committer](../../patterns/2-structured/trusted-committer.md) - Many InnerSource projects will find themselves in a situation where they consistently receive feedback, features, and bug-fixes from contributors. In these situations, project maintainers seek ways to recognize and reward the work of the contributor above and beyond single contributions. +## Adopters + +* [Adopters](../../adopters/README.md) + * [Airbus](../../adopters/airbus.md) + * [American Airlines](../../adopters/american-airlines.md) + * [Analog Devices](../../adopters/analog-devices.md) + * [BBC](../../adopters/bbc.md) + * [BBVA AI Factory](../../adopters/bbva-ai-factory.md) + * [Banco Santander](../../adopters/banco-santander.md) + * [Bitergia](../../adopters/bitergia.md) + * [Bosch](../../adopters/bosch.md) + * [Comcast](../../adopters/comcast.md) + * [DAZN](../../adopters/dazn.md) + * [DB Systel](../../adopters/db-systel.md) + * [Elbit Systems](../../adopters/elbit-systems.md) + * [Entelgy](../../adopters/entelgy.md) + * [Europace](../../adopters/europace.md) + * [Flutter Entertainment](../../adopters/flutter-entertainment.md) + * [GitHub](../../adopters/github.md) + * [Google](../../adopters/google.md) + * [IBM](../../adopters/ibm.md) + * [Mercado Libre](../../adopters/mercado-libre.md) + * [Mercedes-Benz](../../adopters/mercedes-benz.md) + * [Microsoft](../../adopters/microsoft.md) + * [Nike](../../adopters/nike.md) + * [PayPal](../../adopters/paypal.md) + * [SAP](../../adopters/sap.md) + * [Uber](../../adopters/uber.md) + * [WellSky](../../adopters/wellsky.md) + * [Zylk](../../adopters/zylk.md) + ## Appendix * [Pattern Template](../../meta/pattern-template.md)