Created
December 14, 2015 18:52
-
-
Save mariano-aguero/61cb49523d2d7bc39456 to your computer and use it in GitHub Desktop.
Script de generación de proyectos
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
# CONSTANTS | |
$bitbucketUsername = 'BITBUCKET_USERNAME'; | |
$bitbucketPassword = 'BITBUCKET_PASSWORD'; | |
$zipname = "build.zip"; | |
$homeDirectory = "/Users/development2/"; | |
$phonegapUsername = 'PHONEGAP_USERNAME'; | |
$phonegapPassword = 'PHONEGAP_PASSWORD'; | |
try { | |
if (empty($argv[1])) { | |
throw new Exception('Debe pasar como argumento el nombre del proyecto'); | |
} | |
# Slug repository | |
$proyectTitle = $argv[1]; | |
$proyectTitleSlug = nameSlug($proyectTitle); | |
# Clone repository | |
exec("cd {$homeDirectory}Sites && git clone [email protected]:keetup-dev/starter-kit-mobile.git {$proyectTitleSlug}", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Create repository | |
exec("curl -k -X POST --user {$bitbucketUsername}:{$bitbucketPassword} 'https://api.bitbucket.org/1.0/repositories' -d 'full_name=keetup-dev/{$proyectTitleSlug}&name={$proyectTitleSlug}&owner=keetup-dev&is_private=true'", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Set origin | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug} && git remote set-url origin [email protected]:keetup-dev/{$proyectTitleSlug}.git", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Push to the repository | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; git push origin", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Npm install | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; /usr/local/bin/npm install", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Bower install | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; /usr/local/bin/bower install", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Build install | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; /usr/local/bin/gulp build --force-build --minify", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Build install | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; cp config.xml _config.xml; cp config_dev.xml config.xml", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Change name of the proyect | |
$str = file_get_contents("{$homeDirectory}Sites/{$proyectTitleSlug}/config.xml"); | |
$str = str_replace("Starter Kit Mobile - DEV", "$proyectTitleSlug DEV", $str); | |
file_put_contents("{$homeDirectory}Sites/{$proyectTitleSlug}/config.xml", $str); | |
# Change id of the proyect | |
$str = file_get_contents("{$homeDirectory}Sites/{$proyectTitleSlug}/config.xml"); | |
$str = str_replace("com.keetup.starterkit", "com.keetup.$proyectTitleSlug", $str); | |
file_put_contents("{$homeDirectory}Sites/{$proyectTitleSlug}/config.xml", $str); | |
# Create zip | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; zip -r '{$zipname}' config.xml www res", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Upload files to phonegap | |
$data = ["file" => new CurlFile("{$homeDirectory}Sites/{$proyectTitleSlug}/{$zipname}"), | |
"data" => json_encode(['title' => $proyectTitleSlug, 'create_method' => 'file']) | |
]; | |
$handle = curl_init(); | |
curl_setopt($handle, CURLOPT_USERPWD, $phonegapUsername . ':' . $phonegapPassword); | |
curl_setopt($handle, CURLOPT_URL, "https://build.phonegap.com/api/v1/apps"); | |
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, "POST"); | |
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); | |
curl_setopt($handle, CURLOPT_HTTPHEADER, ['Content-type: multipart/form-data;']); | |
curl_setopt($handle, CURLOPT_POSTFIELDS, $data); | |
$response = curl_exec($handle); | |
print_r($response); | |
# Delete zip | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; rm {$zipname}", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
# Restore config | |
exec("cd {$homeDirectory}Sites/{$proyectTitleSlug}; mv _config.xml config.xml", $output, $return); | |
if ($return) { | |
throw new Exception($return); | |
} | |
} catch (Exception $e) { | |
echo $e->getMessage(); | |
exit(1); | |
} | |
/** | |
* | |
* @param type $str | |
* @param type $options | |
* @return type | |
*/ | |
function nameSlug($str, $options = array()) | |
{ | |
// Make sure string is in UTF-8 and strip invalid UTF-8 characters | |
$str = mb_convert_encoding((string) $str, 'UTF-8', mb_list_encodings()); | |
$defaults = array( | |
'delimiter' => '-', | |
'limit' => null, | |
'lowercase' => true, | |
'replacements' => array(), | |
'transliterate' => false, | |
); | |
// Merge options | |
$options = array_merge($defaults, $options); | |
$char_map = array( | |
// Latin | |
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C', | |
'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', | |
'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O', | |
'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH', | |
'ß' => 'ss', | |
'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c', | |
'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', | |
'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o', | |
'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th', | |
'ÿ' => 'y', | |
// Latin symbols | |
'©' => '(c)', | |
// Greek | |
'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8', | |
'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P', | |
'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W', | |
'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I', | |
'Ϋ' => 'Y', | |
'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8', | |
'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p', | |
'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w', | |
'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's', | |
'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i', | |
// Turkish | |
'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G', | |
'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g', | |
// Russian | |
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh', | |
'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', | |
'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', | |
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu', | |
'Я' => 'Ya', | |
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', | |
'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', | |
'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', | |
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', | |
'я' => 'ya', | |
// Ukrainian | |
'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G', | |
'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g', | |
// Czech | |
'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U', | |
'Ž' => 'Z', | |
'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u', | |
'ž' => 'z', | |
// Polish | |
'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z', | |
'Ż' => 'Z', | |
'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z', | |
'ż' => 'z', | |
// Latvian | |
'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N', | |
'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z', | |
'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n', | |
'š' => 's', 'ū' => 'u', 'ž' => 'z' | |
); | |
// Make custom replacements | |
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str); | |
// Transliterate characters to ASCII | |
if ($options['transliterate']) { | |
$str = str_replace(array_keys($char_map), $char_map, $str); | |
} | |
// Replace non-alphanumeric characters with our delimiter | |
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str); | |
// Remove duplicate delimiters | |
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str); | |
// Truncate slug to max. characters | |
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8'); | |
// Remove delimiter from ends | |
$str = trim($str, $options['delimiter']); | |
return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment