Skip to content

Instantly share code, notes, and snippets.

@patcon
Last active December 24, 2015 04:09
Show Gist options
  • Save patcon/6742396 to your computer and use it in GitHub Desktop.
Save patcon/6742396 to your computer and use it in GitHub Desktop.
Little script to generate composer.json files for all modules/themes/profiles from root Drupal directory.

Usage

  • Copy script and template from this repo into root of 8.x branch of Drupal repo.
  • Run ruby -e "require './generate-composer-json-files.rb'; generate_composer_files"

TODO

  • Add ability to generate composer.json for Drupal components.
  • Add script to split out repos with git subtree split and push to github.
  • Add script to edit Drupal core's composer.json to pull in projects.
{
"name": "drupal/<%= @name %>",
"type": "drupal-<%= @type %>",
"description": "<%= @description %>",
"license": "GPLv2",
"authors": [
{
"name": "Dries Buytaert",
"email": "[email protected]"
}
],
"require": {
"php": ">=5.3.10",
"composer/installers": "~1.0"
}
}
#!/usr/bin/env ruby
require 'erb'
require 'yaml'
def project_types
["themes", "modules", "profiles"]
end
def projects
projects = []
project_types.each do |type|
globs = [
"core/#{type}/*/*.info.yml",
"core/#{type}/*/*/*.info.yml",
]
projects << Dir.glob(globs).map {|path| File.basename(path, ".info.yml") }
end
projects.flatten.delete_if {|name| name =~ /_test$/ }
end
def write_composer_json(project_name)
@name = project_name
@type = project_type(project_name).gsub(/s$/, '')
@description = project_description(project_name)
template = File.read File.expand_path('composer.json.erb')
renderer = ERB.new(template)
file_path = "#{project_path(project_name)}/composer.json"
File.open(file_path, "w+") do |f|
f.write(renderer.result)
end
end
def project_path(project_name)
glob_path = File.expand_path("core/**/#{project_name}.info.yml")
infofile_path = Dir.glob(glob_path).first
File.dirname(infofile_path)
end
def project_type(project_name)
path = project_path(project_name)
path.match /core\/([a-zA-Z_]+)\/.*$/
type = Regexp.last_match[1]
type
end
def project_description(project_name)
yaml = YAML.load_file "#{project_path(project_name)}/#{project_name}.info.yml"
yaml['description']
end
def generate_composer_files
projects.each do |name|
write_composer_json(name)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment