Más contenido relacionado La actualidad más candente (20) Similar a Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond (20) Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond10. Core
Modules
Contributed, Custom, Patched
Themes
External Libraries
Installation Profile
Drupal site building blocks
14. Drush Make
Drush make is a Drush command that
can create a ready-to-use Drupal site,
pulling sources from various
locations. In practical terms, this
means that it is possible to distribute
a complicated Drupal distribution as a
single text file.
15. Drush Make
‣ A single .info file to describe
modules, dependencies and
patches
‣ A one-line command to download
contributed and custom code:
libraries, modules, themes, etc...
17. Minimal makefile: core only
; distro.make
; Usage:
; $ drush make distro.make [directory]
;
api = 2
core = 7.x
projects[drupal][type] = core
projects[drupal][version] = "7.7"
18. Minimal makefile: core only
$ drush make distro.make myproject
drupal-7.7 downloaded.
$ ls -al myproject
-rw-r--r-- 1 ademarco staff 174 May 16 20:04 .gitignore
drwxr-xr-x 49 ademarco staff 1666 May 16 20:04 includes/
-rw-r--r-- 1 ademarco staff 529 May 16 20:04 index.php
-rw-r--r-- 1 ademarco staff 688 May 16 20:04 install.php
drwxr-xr-x 70 ademarco staff 2380 May 16 20:04 misc/
drwxr-xr-x 43 ademarco staff 1462 May 16 20:04 modules/
drwxr-xr-x 6 ademarco staff 204 May 28 13:28 profiles/
-rw-r--r-- 1 ademarco staff 1561 May 16 20:04 robots.txt
drwxr-xr-x 13 ademarco staff 442 May 16 20:04 scripts/
drwxr-xr-x 5 ademarco staff 170 May 16 20:04 sites/
drwxr-xr-x 8 ademarco staff 272 May 16 20:04 themes/
-rw-r--r-- 1 ademarco staff 19338 May 16 20:04 update.php
-rw-r--r-- 1 ademarco staff 2051 May 16 20:04 web.config
-rw-r--r-- 1 ademarco staff 417 May 16 20:04 xmlrpc.php
19. Downloading a module
; views.make
; Usage:
; $ drush make views.make --no-core .
;
api = 2
core = 7.x
projects[views][subdir] = contrib
projects[views][version] = 3.1
20. Downloading a module
$ drush make views.make --no-core .
views-7.x-3.1 downloaded.
$ ls -al sites/all/modules/contrib/views/
total 64
...
-rw-r--r-- 1 ademarco staff 16067 May 28 13:28 views.info
-rw-r--r-- 1 ademarco staff 20358 May 28 13:28 views.install
-rw-r--r-- 1 ademarco staff 78204 May 28 13:28 views.module
...
22. Applying patches
; distro.make
; Usage:
; $ drush make distro.make [directory]
;
api = 2
core = 7.x
projects[drupal][type] = core
projects[drupal][version] = "7.7"
; Make system directories configurable to allow tests in profiles/[name]/modules
; http://drupal.org/node/911354
projects[drupal][patch][911354] = http://drupal.org/files/issues/911354.43.patch
; Missing drupal_alter() for text formats and filters
; http://drupal.org/node/903730
projects[drupal][patch][903730] = http://drupal.org/files/issues/drupal.filter-al
...
23. Applying patches
$ drush make distro.make myproject
drupal-7.7 downloaded.
drupal patched with 911354.43.patch.
drupal patched with drupal.filter-alter.82.patch.
drupal patched with 995156-5_portable_taxonomy_permissions.patch.
Generated PATCHES.txt file for drupal
27. flexslider / flexslider.make
; Flex Slider
api = 2
core = 7.x
libraries[flexslider][download][type] = "get"
libraries[flexslider][download][url] = "https://github.com/.../zipball/master"
libraries[flexslider][directory_name] = "flexslider"
libraries[flexslider][type] = "library"
29. Recursive makefile parsing
$ drush make flexslider-module.make --no-core .
Project flexslider contains 4 modules: flexslider_views_slideshow,
flexslider_views, flexslider_fields, flexslider.
flexslider-7.x-1.0-rc3 downloaded.
Found makefile: flexslider.make
flexslider downloaded from https://github.com/.../zipball/master.
$ tree -l sites/all/
sites/all/
!"" libraries
# %"" flexslider
...
%"" modules
%"" contrib
%"" flexslider
...
31. Including an external makefile
; distro.make
;
; $ drush make buildkit.make [directory]
;
api = 2
core = 7.x
; Include Build Kit distro makefile via URL
includes[] = http://drupalcode.org/project/buildkit.git/../7.x-2.x:/distro.make
34. Your project: 2 make files
‣ distro.make: Drupal core with possible core
patches and a link to download myproject.make
‣ myproject.make: includes BuildKit’s
drupal-org.make plus project-specific modules and
themes
41. Installation profile components
$ tree myproject-profile
myproject-profile
!"" README.txt
!"" distro.make
!"" drushrc.php
!"" myproject.info
!"" myproject.install
!"" myproject.make
%"" myproject.profile
42. Profiles: just like modules
‣ An .info file to specify installation
dependencies
‣ An .install file to perform
installation tasks and upgrades
‣ Fully customizable via .profile files
‣ Can include makefiles and other
stuff
43. myproject.info
name = Myproject
core = 7.x
description = Myproject installation profile.
; Core
dependencies[] = book
dependencies[] = field_ui
dependencies[] = file
...
; Contrib
dependencies[] = admin
dependencies[] = colorbox
dependencies[] = ds
...
; Features
dependencies[] = myproject_core
dependencies[] = myproject_blog
44. myproject.profile
/**
* Implements hook_install()
*/
function myproject_install() {
// Enable custom theme
theme_enable(array('custom_theme'));
variable_set('theme_default', 'custom_theme');
}
45. myproject.profile
/**
* Implements hook_form_FORM_ID_alter().
*/
function myproject_form_install_configure_form_alter(&$form, $form_state) {
$form['site_information']['site_name']
['#default_value'] = 'Drupalissimo';
$form['site_information']
['site_mail']['#default_value'] = 'info@drupalissimo.com';
$form['admin_account']['account']
['name']['#default_value'] = 'admin';
$form['admin_account']['account']
['mail']['#default_value'] = 'dev@nuvole.org';
$form['update_notifications']
['update_status_module']['#default_value'] = array(1 => FALSE, 2 => FALSE
}
47. myproject.install
/**
* Implements hook_install_tasks()
*/
function myproject_install_tasks() {
return array(
'myproject_create_terms' => array(
'display_name' => st('Create taxonomy terms'),
),
...
);
}
49. myproject.install
/**
* Implements hook_install_tasks() callback
*/
function myproject_create_terms() {
$terms = array();
$vocabulary = taxonomy_vocabulary_machine_name_load('category');
$terms[] = 'Solution';
$terms[] = 'Client';
$terms[] = 'Use case';
foreach ($terms as $name) {
$term = new stdClass();
$term->vid = $vocabulary->vid;
$term->name = $name;
taxonomy_term_save($term);
}
}
52. Installation profile template
$ git clone git.nuvole.org:/var/git/starter-profile.git
...
$ tree starter-profile
starter-profile/
!"" README.txt
!"" distro.make
!"" drushrc.php
!"" starter.info
!"" starter.install
!"" starter.make
%"" starter.profile
53. Bootstrap your project in 3 steps
$ drush bake starter-profile/distro.make myproject
$ git nuvole myproject-profile
$ drush make myproject-profile/distro.make myproject
57. What is a feature?
‣ A collection of Drupal elements
which taken together satisfy a
certain use-case.
‣ A modular piece of functionality for
a Drupal site.
‣ A way to export configuration into
PHP code, in the form of a module.
‣ http://drupal.org/project/features
61. A feature can have a .make file too
Drush Make operates recursively
63. api = 2
core = 7.x
; Modules =====================================================================
projects[colorbox][subdir] = contrib
projects[colorbox][version] = 1.0-beta4
projects[insert][subdir] = contrib
projects[insert][version] = 1.1
; Libraries ===================================================================
libraries[colorbox_library][download][type] = "get"
libraries[colorbox_library][download][url] = "http://colorpowered.com/colorbox/
libraries[colorbox_library][directory_name] = "colorbox"
libraries[colorbox_library][destination] = "libraries"
feature_core.make
A feature can specify where to find its own dependencies
65. $ cat starter-profile/starter.make
api = 2
core = 7.x
; Build Kit ===================================================================
includes[] = http://drupalcode.org/project/buildkit.git/blob_plain/refs/heads/7.x
; Modules =====================================================================
projects[libraries][subdir] = contrib
projects[libraries][version] = 1.0
; Features ====================================================================
projects[feature_core][type] = module
projects[feature_core][subdir] = features
projects[feature_core][download][type] = "git"
projects[feature_core][download][url] = git.nuvole.org:/var/git/feature_core.git
; Themes ======================================================================
projects[twist][type] = theme
projects[twist][download][type] = git
projects[twist][download][url] = git.nuvole.org:/var/git/twist.git
71. $ cat starter-profile/starter.make
api = 2
core = 7.x
; Build Kit ===================================================================
includes[] = http://drupalcode.org/project/buildkit.git/blob_plain/refs/heads/7.x-
; Modules =====================================================================
projects[libraries][subdir] = contrib
projects[libraries][version] = 1.0
; Features ====================================================================
projects[feature_core][subdir] = features
projects[feature_core][location] = http://fserver.nuvole.org/fserver
; Themes ======================================================================
projects[twist][type] = theme
projects[twist][location] = http://fserver.nuvole.org/fserver
76. Building a CI Job
‣ Create a job for testing your site
‣ Triggered:
‣ Manually
‣ Scheduled
‣ By events (git push or other jobs)
‣ A job can consist of ant scripts or simple shell
commands (including drush)
78. Test #1: Makefile
‣ Clone your code from git
‣ Run drush make
‣ Test that the profile is downloaded
‣ Test that modules are placed in the expected
folders
79. Test #1: Shell commands
‣ drush -y --pipe make distro.make
‣ test -d profiles/myproject
‣ test -d profiles/myproject/modules/contrib
‣ test -d profiles/myproject/modules/custom
‣ test -d profiles/myproject/modules/features
81. Test #2: Installation
‣ Triggered by successful completion of Test #1
‣ Run drush site-install:
drush -y site-install ... myproject
‣ Expect successful completion
83. Test #3: Configuration
‣ Triggered by successful completion of Test #2
‣ Relies on simpletest
‣ Run drush test-run
‣ Expect successful completion
85. Thank You.
More on Code-Driven Development
http://nuvole.org/blog
http://nuvole.org/trainings