Contribution guide draft

Initial version of Community portal contribution guide.

Change-Id: I7acb3cde22f905ec4ae8379fa8990266a447cd3e
This commit is contained in:
Marton Kiss 2014-08-28 21:38:07 +02:00
parent a90d9ec01f
commit ca5490f974
1 changed files with 199 additions and 0 deletions

View File

@ -0,0 +1,199 @@
OpenStack Groups Portal Contribution Guide
=============================================
The Groups Portal based on Drupal 7.x [1] and Drupal Commons [2] distribution, and
the entire development process is integrated into the OpenStack CI system
including the code-review and automatic deployment of development and production
branch. If you want to contribute back a new portal feature or just simply
resolve a bug it is very important to setup a local development environment
with proper application stack to match the environment of staging and production
servers and avoid a lot's of unwanted issues. As we are using the OpenStack CI
the contribution process exactly match the official way [3], so this paper contains
additional project specific details.
Prerequisites
-------------
The Groups Portal production and development currently based on the following
application stack:
- Ubuntu 12.04 LTS
- Apache 2.2.22
- MySQL database server 5.5.38
- PHP 5.3.10 (extensions: mysql, gd)
- Drush 6.0
- Git
- Git-review
- Compass
Development workflow
--------------------
## Install site from scratch ##
As the first step of the development workflow we need to prepare an empty
database, register a drush site alias, clone the site source code from
git repository and finally install the site into an apache vhost docroot
directory.
### Create a mysql database ###
Create a new mysql database and grant permissions:
$ mysqladmin -u username -p create groupsdev
$ mysql -u username -p
$ GRANT ALL ON groupsdev.* TO groupsdev@'localhost' IDENTIFIED BY 'urs3cr3tpassw0rd';
Where groupsdev will be the user name and urs3cr3tpassw0rd will be the password.
### Define drush site alias ###
Drush alias helps to shorten the access of local or remote Drupal installation.
For example you can set an alias as a default site root with `drush use @sitealias`
command.
The alias files must be placed in the global /etc/drush/aliases.drushrc.php or
in the local ~/.drush/aliases.drushrc.php files.
Example aliases.drushrc.php configuration:
<?php
$aliases['groupsdev'] = array(
'uri' => 'groups-dev.local',
'root' => '/var/www/groups-dev.local',
'db-url' => 'mysql://groupsdev:12345678@localhost/groupsdev',
'databases' => array(
'default' => array(
'driver' => 'mysql',
'username' => 'groupsdev',
'password' => 'urs3cr3tpassw0rd',
'port' => '',
'host' => 'localhost',
'database' => 'groupsdev',
),
),
);
Further alias configuration examples available here [4].
Query available site aliases:
$ drush sa
@groupsdev
default
### Build a working copy ###
The Groups Portal based on a Drupal Installation Profile, it means we are
keeping only the portal related modules in the git repository, and define all
of the original Drupal contributed modules and their patches in make files. The
drupal-org-core.make contains the defintion of Drupal core distribution and the
required core patches, the drupal-org.make file includes the defintion of
contrib modules, patches, themes and libraries.
Fetch the git repository and clone a working copy, then build the distribution
into site vhost directory:
$ git clone git://git.openstack.org/openstack-infra/groups groups
$ cd groups
$ bash scripts/dev-build.sh /var/www/groups-dev.local
The /var/www/groups-dev.local is the site root registered in your apache
vhost file, this can be different in your local environment.
### Install Groups portal ###
$ drush use @groupsdev
$ drush si groups -y
$ drush features-revert-all -y
$ drush cc all
Now the portal available at your local site url, for example at
`http://groups-dev.local`.
### Rebuild theme css files ###
$ cd /var/www/groups-dev.local/profiles/groups/themes/openstack
$ bundle exec compass compile
## Import contents ##
The default installation will come with a really minimal content set, so
we need to import some initial content for testing.
### Import user group data ###
The user group data located at https://git.openstack.org/cgit/openstack-infra/groups-static-pages/tree/groups.json file, so you can easily modify or contribute back modification
through openstack-infra/groups-static project.
$ drush import-user-groups
### Import static pages content ###
The static pages are holding markdown formatted content, during development
clone to a local directory from openstack-infra/groups-static-pages repository
and don't forget to set the groups_feeds_markdown_directory variable to
specify the location of the files
$ git://git.openstack.org/openstack-infra/groups-static-pages /var/www/groups-static-pages
$ drush vset groups_feeds_markdown_directory /var/www/groups-static-pages
$ drush import-static-pages
### Import meetup events ###
The meetup events can be imported directly from meetup.com calendars, and
related user group meetup.com location extracted from meetup attribute of the
uploaded user group content.
$ drush import-meetup-events
## Submit a patch ##
Start with low-hanging fruits and first try to fix a small bug or
do some housekeeping. The entire code-space maintained by the Groups
Portal team lives under the profiles/groups directory. If you like
to change anything, add a new drupal module, create a new feature,
you must place the files there. It is very important to know that
Drupal 7 store a lot of configuration setting, variable in database
and to make the code portable, we need to move those settings out
to code, using the Features module [5].
Follow the development workflow of OpenStack [6] and post
your patches to gerrit code review system.
$ git checkout -b TOPIC-BRANCH
$ git commit -a
$ git review
Example commit message:
Security upgrade of core and date module
Update Drupal Core to 7.30 and Date module to 2.8.
Related release notes available here:
https://www.drupal.org/drupal-7.30-release-notes
https://www.drupal.org/node/231188
Change-Id: Ia2d04322fff4bc1f49e8cccada2ac2b267a3f9ca
After execution of successful jenkins check jobs, you need to get a
manual approval from project owners. If everything works well your
approved code will be automatically deployed into
groups-dev.openstack.org staging site.
[1] Drupal Core
https://www.drupal.org/project/drupal
[2] Drupal Commons
https://www.drupal.org/project/commons
[3] OpenStack How To Contribute
https://wiki.openstack.org/wiki/How_To_Contribute
[4] Drush alias examples
http://drush.ws/examples/example.aliases.drushrc.php
[5] Drupal Features module
https://www.drupal.org/project/features
[6] Gerrit workflow
https://wiki.openstack.org/wiki/Gerrit_Workflow