You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.1 KiB
152 lines
4.1 KiB
#!/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-init-$template-sample"
|
|
|
|
# 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:gruntjs/$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 (grunt-init-jquery-sample)" {send "grunt-sample\r"; exp_continue}
|
|
"Project title (Grunt Sample)" {send "Sample Grunt jQuery Plugin\r"; 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 sample \"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\" sample
|
|
|
|
This is sample 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 init template 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 \"generated\" branch\]\[prev\].**' > README.md\r"
|
|
expect "$ "
|
|
send "echo -e '
|
|
|
|
\[grunt\]: http://gruntjs.com/
|
|
\[issues\]: https://github.com/gruntjs/grunt/issues
|
|
\[init\]: https://github.com/gruntjs/grunt/blob/master/docs/task_init.md
|
|
\[expect\]: https://github.com/gruntjs/grunt/blob/master/dev/init.exp
|
|
\[prev\]: https://github.com/gruntjs/$project/tree/generated
|
|
|
|
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\] sample 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 '```
|
|
' >> README.md\r"
|
|
|
|
# Commit again.
|
|
expect "$ "
|
|
send "git branch generated\r"
|
|
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 --all origin\r"
|
|
}
|
|
|
|
expect "$ "
|
|
send "exit\r"
|
|
|
|
expect eof
|
|
|
|
}
|