#!/usr/bin/expect -f # OMG THIS WAS A PAIN TO CREATE if {$argc == 0} { # No template specified, iterate over all templates. set templates [list jquery commonjs node gruntplugin gruntfile] } else { # One or more templates were specified, iterate over those. set templates [lrange $argv 0 end] } foreach template $templates { set project "grunt-$template-example" # Disable git pushing when debugging. set gitpush 1 # Grunt version set version [exec grunt --version] # Stop any already-running logging. log_file # Start logging fresh, saving output for later use. log_file -noappend /tmp/grunt-expect-out # Spawn bash without all my crazy dotfiles stuff. set timeout -1 spawn bash --noprofile --norc match_max 100000 # Make the prompt look nice. expect "$ " send "PS1='\n$ '\r" expect "\r" # Cleanup any existing session. expect "$ " send "cd /tmp\r" expect "$ " send "rm -rf /tmp/$project\r" # Session logging starts here. expect "$ " send "mkdir $project && cd $project\r" # Initialize the current directory. expect "$ " send "git init\r" expect "$ " send "git remote add origin git@github.com:cowboy/$project.git\r" # Note that the "--no-color" will be stripped out later. expect "$ " send "grunt init:$template --no-color\r" # Don't start answering prompts until this line is encountered. expect "Please answer the following:" # Loop over all prompts. expect { "Do you need to make any changes to the above before continuing? (y/N)" {send "\r"} "Project name (jquery.grunt-jquery-example)" {send "jquery.grunt-example\r"; exp_continue} "Project title (jQuery Grunt Example)" {send "Grunt jQuery Example Plugin\r"; exp_continue} "Description" {send "This is example output generated by the \"grunt init:$template\" task."; exp_continue} ") " {send "\r"; exp_continue} } # Pre-grunt file structure. expect "$ " send "tree\r" # Let grunt grunt the newly-created file structure. expect "$ " send "grunt --no-color\r" # Post-grunt file structure. Any built files should appear here. expect "$ " send "tree\r" # Commit everything. expect "$ " send "git add .\r" expect "$ " send "git commit -m 'Committing example \"grunt init:$template\" task output.'\r" # Session logging stops here. expect "$ " send "# EOF\n" # Add meta-content to the README. expect "$ " send "echo -e '# Grunt \"init:$template\" example This is example output generated by the \"grunt init:$template\" task. _Note: this repository was generated dynamically using $version. Instead of reporting issues here, please report any issues with this repository as \[grunt issues\]\[issues\]. Instead of watching or forking this repository, watch \[grunt\]\[grunt\] and use the grunt \[init task\]\[init\]._ ## Project Creation Transcript The following is a transcript of the session in which this project and repository were created. This is not actually a part of the \[grunt\]\[grunt\] \"init:$template\" template, this session transcript was added afterwards. The text after the `$` are the commands that were executed, and everything else is program output. If you want to see the repository exactly as it was created by grunt, view \[the previous commit\]\[prev\].' > README.md\r" expect "$ " send "echo -e ' Want to learn more? Check \[grunt\]\[grunt\] out. \[grunt\]: https://github.com/cowboy/grunt \[issues\]: https://github.com/cowboy/grunt/issues \[init\]: https://github.com/cowboy/grunt/blob/master/docs/task_init.md \[expect\]: https://github.com/cowboy/grunt/blob/master/dev/init.exp \[prev\]: https://github.com/cowboy/$project/tree/HEAD~1 Note that this entire build process is automated by a rather complex \[expect script\]\[expect\], which is used to automate grunt in order to facilitate the creation of this and other \[init task\]\[init\] example repositories. ```' >> README.md\r" expect "$ " # Strip out everything before the "mkdir" and after the "EOF". Also remove any "--no-color" bits. send "cat /tmp/grunt-expect-out | perl -ne's/ --no-color//;if(/^\\\$ mkdir/){\$x=1}elsif(/^\\\$ # EOF/){\$x=0}\$x&&print\$_' >> README.md\r" expect "$ " send "echo -e '``` ## License Copyright (c) 2012 \"Cowboy\" Ben Alman Licensed under the MIT license.' >> README.md\r" # Commit again. expect "$ " send "git add .\r" expect "$ " send "git commit -m 'Adding project creation transcript.'\r" # Push to GitHub. if {$gitpush} { expect "$ " send "git push -uf origin master\r" } expect "$ " send "exit\r" expect eof }