class: center, middle, inverse # Vox Pupuli - The Funny Community Journey ## Fourth Edition? --- background-image: url(blue-skies.jpg) background-size: cover ## $ whoami * Tim 'bastelfreak' Meusel * DevOps Engineer for heg.com -> GoDaddy EMEA * Puppet Contributor since 2012 * Merging stuff on Vox Pupuli since 2015 * Vox Pupuli PMC member * Organizing BBQ events for Arch Linux Community --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ] .right-column[ ### How to write and pronounce * Vox Pupuli * VoxPupuli * Voxpupuli * voxpupuli * puppet-community -> Vox Pupuli ] .footnote[@bastelsblog for @voxpupuliorg] ??? * many people write it wrong * we agreed on Vox Pupuli * Nobody knows how to pronounce it? --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ###What? ] .right-column[ * Maintain many many modules ] .footnote[@bastelsblog for @voxpupuliorg] ??? * We maintain more modules than the company Puppet * This leads to some challenges, which I want to discuss today * 88 modules during puppetconf2017, 92 in January 2018 --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ] .right-column[ * Maintain many many modules * Be helpful and polite to each other ] .footnote[@bastelsblog for @voxpupuliorg] ??? * 24/7 someone is in the IRC to help you * We've a code of conduct but never had to enforce it * Everybody is friendly, which isn't common these days --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ] .right-column[ * Maintain many many modules * Be helpful and polite to each other * Be open-minded to people and technology ] .footnote[@bastelsblog for @voxpupuliorg] ??? * People get easily access to our repos * we encourage users to contribute * We're always happy to play with new software (automation scripts, IRC bots...) or adopt new modules --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ] .right-column[ * Maintain many many modules * Be helpful and polite to each other * Be open-minded to people and technology * Provide a home for orphaned Puppet modules ] .footnote[@bastelsblog for @voxpupuliorg] ??? * as a user, it's an awful experience to find a module for your usecase, and notice afterwards that it is dead * We want to avoid that as a collective of module developers --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ] .right-column[ * Maintain many many modules * Be helpful and polite to each other * Be open-minded to people and technology * Provide a home for orphaned Puppet modules * Unite lonely module and tooling authors to a collective ] .footnote[@bastelsblog for @voxpupuliorg] ??? * Developing alone sucks * There is a hard pressure on a single person, if your module gets famous * Sometimes you want to go on vacation, switch jobs, lose interest in developing --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ] .right-column[ * Maintain many many modules * Be helpful and polite to each other * Be open-minded to people and technology * Provide a home for orphaned Puppet modules * Unite lonely module and tooling authors to a collective * Ensure continued development for our code ] .footnote[@bastelsblog for @voxpupuliorg] --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ### Who? ] .right-column[ * Currently 113 people with merge permissions * We were 107 in October 2017 * We were 80 in November 2016 * Just a few people work for Puppet Inc. * Most of the contributors participate in their free time * Normal administrators that have to deal with puppet at work ] .footnote[@bastelsblog for @voxpupuliorg] ??? * only 5 regular contributors work at Puppet Inc, we're independent from the company --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ### Who? ] .right-column[ * Many git newbies * Rebasing a feature branch against upstream master is hard * Many newcomers to test frameworks * Dealing with rspec/rubocop/beaker is hard as well ] .footnote[@bastelsblog for @voxpupuliorg] ??? * Many contributors are new to git and github * Many never wrote tests * we don't have to teach them writing good puppet code, but all the related tooling --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ### Who? ] .right-column[ * Many administrators of legacy infrastructures * Puppet3, Ruby191, Ruby2.0 * November 2016: Puppet2.7, Ruby187 * Do we already call Puppet4 legacy? (yes pls) ] .footnote[@bastelsblog for @voxpupuliorg] ??? Was: Ruby hashrocket notation doesnt work on ruby187 Now: There is a strange datatype in my code (puppet4/5 code executed with puppet3) Now: Data-in-modules doesn't work --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### What? ### Who? ### Why? ] .right-column[ * Maintaining a module on your own is hard * Changing best practices, vacations, losing interest * Proper testing of a module requires a lot of stuff from the ruby ecosystem * Ruby ecosystem and related tools are changing too fast for a single person * Everything has to work on multiple Ruby/Puppet versions * Rubocop * Rubocop ] .footnote[@bastelsblog for @voxpupuliorg] ??? * Who tried to fix rubocop warnings in a module and couldn't fix all? * Shout out to hailee/HAIL9000 who fixed maaaaaaaany rubocop errors in the mongodb module for many days --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ## How? ### modulesync ] .right-column[ * We are managing 92 modules * We had 75 in november 2016 * modulesync was developed by Puppet Inc, moved to Vox Pupuli * It takes a config file + templates, throws it into every modules git repo * Works with GitHub Pull Requests * Everybody can start it * Every of our Collaborators can approve/merge it ] .footnote[@bastelsblog for @voxpupuliorg] ??? * amount of modules grows * Keeping generic files like Gemfile/Rakefile in sync is pain, if done by hand * modulesync saves us sooo much time --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ## How? ### modulesync ### travis ] .right-column[  * Free CI platform * Puppet Inc. sponsors us unlimited? concurrent travis slots * rpsec-puppet on common Puppet*Ruby versions * release modules to the forge * beaker acceptance tests ] .footnote[@bastelsblog for @voxpupuliorg] ??? * nobody knows how many travis slots we can use, but it works well! * Thanks to David Schmitt for organizing this --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ## How? ### modulesync ### travis ### Release task ] .right-column[ * Gem called voxpupuli-release * provides rake task to bump + tag a module * Also pushed to the forge * Upcoming: Also create a github release ] .footnote[@bastelsblog for @voxpupuliorg] ??? * everybody can start it, each collaborator can approve it * We encourage users to contribute by providing easy to use tools --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ## How? ### modulesync ### travis ### Release task ### Tooling ] .right-column[ * https://github.com/underscorgan/community_management * Open Issues and PRs sorted in different ways * https://voxpupuli-open-prs.herokuapp.com/ * Also open PRs * https://github.com/voxpupuli/thevoxfox * IRC bot, allows us to merge stuff + trigger modulesync (soon, maybe) * https://github.com/bastelfreak/contributorstats * count contributions ] .footnote[@bastelsblog for @voxpupuliorg] --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ## How? ### modulesync ### travis ### Release task ### Tooling ### Docs ] .right-column[ * Review Guidelines: https://voxpupuli.org/docs/#reviewing-a-module * puppet-strings generates html docs * https://voxpupuli.org/puppet-selinux * https://voxpupuli.org/puppet-autofs * https://voxpupuli.org/puppet-mumble * https://voxpupuli.org/puppet-cassandra (in the making) * https://voxpupuli.org/puppet-rabbitmq (in the making) ] .footnote[@bastelsblog for @voxpupuliorg] ??? * We now have a list of things that we check during a review! This allows us to get consistent code style and a better quality * We got a few modules with puppet-strings docs! * They are automagically published under our domain --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Governance? ###PMC ] .right-column[ * We elected a second Project Management Committee in 2017! * PMC enforces CoC * Brings Vox Pupuli into the Software Freedom Conservancy * PMC guidelines are created by the community https://tinyurl.com/voxpupuli-governance-md * Current members: * Tim ‘bastelfreak’ Meusel (reelected) * David ‘dhollinger’ Hollinger * Hunter ‘Hunner’ Haugen (works for Puppet Inc., reelected) * Alex ‘afisher’ Fisher * Eric ‘eputnam’ Putnam (works for Puppet Inc.) ] .footnote[@bastelsblog for @voxpupuliorg] --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Governance? ### PMC ### Collaborators ] .right-column[ * Review pull requests * Explain why we don't support ruby187 anymore * New: Explain why we don't support Puppet3 anymore * Help with git * Trigger the automated release process ] .footnote[@bastelsblog for @voxpupuliorg] --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * people are often scared to contribute * They often think they can't write the needed code, but they can! * encourage them --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * TL;DR still people use outdated ruby/puppet versions from time to time :( --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * travis cheets for 100: closing/reopen a PR will retrigger travis * A project admin can do this in the travis UI, outside-contributors can't * close/reopen can be triggered by the PR author --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * we try to get at least a unit test for all new features * on a bugfix: Dope to include a test that fails without the patch, but works with it * Always say thanks! Be friendly to contributors. We're always happy for a new Issue/PR (We prefer PRs) --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * everybody is good at blaming others * we rarely tell people that they made something good * bastelfreak is happy about all new datatypes --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * people often don't notice that travis has a failed job * Do we need to change the visibility? --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * for a clean history we want people to use a correct email address --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * Something that many people very often forget: Is the new feature documented in the README.md? --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[  ] .footnote[@bastelsblog for @voxpupuliorg] ??? * often people ask us to migrate a dead module into our namespace * we head out to the maintainer and ask for that --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ] .right-column[ .something2[  ] ] .footnote[@bastelsblog for @voxpupuliorg] ??? some explanation: bastelfreak noticed in the Archlinux community that people are happy, if you send them sweets We tried this in the Puppet community as well. Puppet Inc. received 15pounds of sweets for all their encouragement for the community. You all keep contributing and bastelfreak will send you sweets as well! --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ### Broken Stuff ] .right-column[ * Vox Pupuli is the place to be if something is broken * puppetlabs-stdlib * puppetlabs-stdlib again * puppetlabs-apt * puppet-systemd (sorry) ] ??? * story time: Everytime one popular module is broken, people will join the Vox Pupuli IRC channel * This happend twice for stdlib (we didn't break it, we just noticed it) * bastelfreak once added a breaking change to the systemd module which killed the openstack CI pipelines (happened twice) --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ### Daily Business ### Broken Stuff ### Quotes ] .right-column[ * 'Release early - release often' - Igor Galic * 'Version numbers are cheap - use them' - Igor Galic * 'DevOps is all about empathy' - Rob Nelson ] ??? * people are scared about making released because it could break things * release as often as possible. Less changes per release -> less broken releases * people are often scared to merge breaking changes. Merging them is totally okay if you do proper versioning * we don't delete broken releases and try to fix it, we just do a new release * working closely together, listen to users, always be constructive, don't blame others for mistakes, we all break stuff from time to time --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ## Summary ] .right-column[ * We have great tooling and automation * We have great people * You need help with Puppet? * Let us know, we help out! * You have an orphaned module or know one? * Ping us, migrate it to us * You have domain specific knowledge? * Ruby, Python, Rspec, Beaker, $software we automate ] .footnote[@bastelsblog for @voxpupuliorg] --- background-image: url(blue-skies.jpg) background-size: cover ## Vox Pupuli .left-column[ ## Summary ] .right-column[ * You want to help out? * We are always looking for new Collaborators and Maintainer Contact: * IRC #voxpupuli on freenode * Slack: #voxpupuli on puppetcommunity.slack.com * voxpupuli@groups.io * pmc@voxpupuli.org * tim@bastelfreak.de ### Thanks for your attention! ]