= Working with Launchpad Production Configs = This page describes how you edit the configurations that you find in Launchpad's {{{config/}}} directory. '''TODO: Link to documentation for canonical.config.''' '''TODO: Link to documentation for config files.''' == Config branches == This page uses variables that are defined in {{{~/.rocketfuel-env.sh}}}. You may want to run it before you start, but don't just execute it. If run that way it'll fork and define variables in the child process, and then the child process will exit without complaints—but taking all the variables with it. So instead: {{{ . ~/.rocketfuel-env.sh }}} Only the current shell session will be affected. === Set up a repository === This is not a regular launchpad branch but once from a separate project, so you'll want to create your local branch outside the directory where you keep your regular Launchpad branches ({{{$LP_SHARED_REPO}}}). I'd suggest setting up a new repository next to the one that holds your Launchpad branches: {{{ cd "$LP_PROJECT_ROOT" # Set up a place for lp-production-configs branches. bzr init-repo lp-production-configs cd lp-production-configs bzr branch lp:~launchpad-pqm/lp-production-configs/trunk }}} Even if you don't create a repository, you'll have to add wherever you put your {{{lp-production-configs}}} branch to {{{.bazaar/locations.conf}}} to make things work: {{{ [/home/me/canonical/lp-production-configs] pqm_email = launchpad@pqm.canonical.com submit_branch = bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/lp-production-configs/trunk public_branch = bzr+ssh://bazaar.launchpad.net/~me/lp-production-configs public_branch:policy = appendpath push_location = bzr+ssh://me@bazaar.launchpad.net/%7Eme/lp-production-configs push_location:policy = appendpath }}} You now have a setup very smilar to the one for Launchpad branches: a repository with a local {{{trunk}}} branch in it. === Create a branch === Make sure you have a fresh checkout of {{{lp-production-configs}}} trunk. Then create your own branch to, for instance, fix bug 999999. {{{ cd "$LP_PROJECT_ROOT/lp-production-configs" cd trunk ; bzr pull ; cd .. bzr branch trunk production-configs-bug-999999 cd production-configs-bug-999999 }}} Now make your changes in production-configs-bug-999999, commit, and push. All just as you would with a Launchpad devel or db-devel branch. === Get a review === When you're done, propose your branch for merging into {{{lp:~launchpad-pqm/lp-production-configs}}}. This is the default target for the merge proposal. The branch needs to be reviewed by one of the LOSA's ("canonical-losas"); this is also the default choice of reviewer. === Pre-landing Q/A === If there is any risk that your change might break things, test it on staging after your review but ''before'' you land your branch. To do this, ask the LOSAs to cowboy-patch it onto staging. Make sure that you left no subtle differences between the staging config and the production config that might break things! That's a spot our automated test suite can't reach. === Land === Once you've very very sure everything works as expected, land your branch: {{{ bzr pqm-submit -m "[r=myreviewer][bug=999999] Configure oops logging for frobnicate." }}} And... wait. === Q/A === Even if you tested on staging before landing, test (again) on {{{edge}}} after your branch has rolled out there. This helps guard against those subtle differences between configs.