#!/usr/bin/env perl use strict; use warnings; my $project = shift; my $description = shift; my $homepage = shift; unless($project && $description && $homepage) { die "Erlang Service Creator v0.1.0\n". "(c) Aleksander Alekseev 2014, http://eax.me/\n\n". "Usage: $0 \n". "Example: $0 accessdb 'Access Database' http://eax.me/erlang-deb-package/\n"; } unless($project =~ /^\w+$/) { die "Invalid characters in project name!\n"; } unless($description =~ /^[\w\ \.\-]+$/) { die "Invalid characters in description!\n"; } unless($homepage =~ /^[\w\.\/\:\-]+$/) { die "Invalid characters in homepage url!\n"; } my $diff1 = qq! 3,4c3,4 < {description, ""}, < {vsn, "1"}, --- > {description, "$description"}, > {vsn, git}, 8c8,9 < stdlib --- > stdlib, > lager !; my $diff2 = qq! 2c2 < {lib_dirs, []}, --- > {lib_dirs, ["apps","deps"]}, 34c34 < {copy, "files/$project", "bin/$project"}, --- > {template, "files/$project", "bin/$project"}, 38,39c38,39 < {copy, "files/sys.config", "releases/\\{\\{rel_vsn\\}\\}/sys.config"}, < {copy, "files/vm.args", "releases/\\{\\{rel_vsn\\}\\}/vm.args"} --- > {template, "files/app.config", "etc/app.config"}, > {template, "files/vm.args", "etc/vm.args"} !; my $diff3 = q! 5c5 < RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd) --- > RUNNER_SCRIPT_DIR={{runner_script_dir}} 9,10c9,10 < RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*} < RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc --- > RUNNER_BASE_DIR={{runner_base_dir}} > RUNNER_ETC_DIR={{runner_etc_dir}} 12,13c12,13 < PIPE_DIR=/tmp/$RUNNER_BASE_DIR/ < RUNNER_USER= --- > PIPE_DIR={{pipe_dir}} > RUNNER_USER={{runner_user}} 41c41 < RUNNER_LOG_DIR=$USE_DIR/log --- > RUNNER_LOG_DIR={{runner_log_dir}} !; my $i = 0; my @diff_list = ($diff1, $diff2, $diff3); for my $diff (@diff_list) { $i++; $diff =~ s/^\s+//; open my $fid, '>', "d$i.diff" or die $!; print $fid $diff; close $fid; } my @commands = ( "wget https://github.com/afiskon/erl-min-prj/raw/master/.gitignore", "wget https://github.com/afiskon/erl-min-prj/raw/master/Makefile", "wget https://github.com/afiskon/erl-min-prj/raw/master/rebar.config", "wget https://github.com/afiskon/erl-min-prj/raw/master/rebar", "chmod u+x rebar", "./rebar create-node nodeid=$project", "mkdir -p apps/$project", "cd apps/$project && ../../rebar create-app appid=$project", "wget raw.github.com/afiskon/erl-min-prj/master/files/vars.config -P ./files", "wget raw.github.com/afiskon/erl-min-prj/master/files/vars-dev.config -P ./files", "wget https://raw.github.com/afiskon/erl-min-prj/master/files/init -P ./files", "wget https://raw.github.com/afiskon/erl-min-prj/master/files/postinst -P ./files", "wget https://raw.github.com/afiskon/erl-min-prj/master/files/postrm -P ./files", "rm ./files/sys.config", "wget https://raw.github.com/afiskon/erl-min-prj/master/files/app.config -P ./files", "find ./ -type f -exec sed -i 's/phonebook/4384e3dc562d2fa6fd34f076b9bb1fef/g' {} \\;", "find ./ -type f -exec sed -i 's/Simple Phonebook/1739c5b646c7eee652b1ed90aa33e53e/g' {} \\;", "find ./ -type f -exec sed -i 's!http://eax.me/!18606c9d31938b9bf1e1045d34f760c8!g' {} \\;", "find ./ -type f -exec sed -i 's/4384e3dc562d2fa6fd34f076b9bb1fef/$project/g' {} \\;", "find ./ -type f -exec sed -i 's/1739c5b646c7eee652b1ed90aa33e53e/$description/g' {} \\;", "find ./ -type f -exec sed -i 's!18606c9d31938b9bf1e1045d34f760c8!$homepage!g' {} \\;", "patch apps/$project/src/$project.app.src d1.diff", "patch reltool.config d2.diff", "patch ./files/$project d3.diff", "rm *.diff", ); run($_) for @commands; print "All done!\n"; sub run { my ($cmd) = @_; print "Executing `$cmd`\n"; system($cmd); die "Failed to execute: $cmd" if $?; }