octopress-deploy 1.0.0.alpha.3 → 1.0.0.rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e4a09550ef9b0543cffbf51047b99ef82efa4c9
4
- data.tar.gz: 8bebda9735365b81fc5bd5feb7171bd91ffec4fe
3
+ metadata.gz: 3335ecc6a5982dd61e353698ee6ed3521a65b62f
4
+ data.tar.gz: 6b5fc858d82ed0290ea6553f2950f9741718a883
5
5
  SHA512:
6
- metadata.gz: 868c3859731c91f5cfefeb0507564d2c9bfda7d6c51209901aa8f6cffa7cd4099aa9a5c79074090deb395b3aad587f98a3cb92f03c62469e0184af393f5453ff
7
- data.tar.gz: a887ef627c3c0f4d8e90d8594670b4bb32686a4406192b5ca19a423aede8840539912a1845c487ec6a3713592d5f84fc0e5383674be3042624737872a49294d3
6
+ metadata.gz: 23b4efe0fd05a85e1a68b75a04e1b3397654b6d0ab0f245d4a69fe77355d81a75ad6936496babc3764e9cf703396a61839de8056f7030a1dc43abdd11740f997
7
+ data.tar.gz: 5ba60aa87c352378fe530213d068e54e6e0b23db48f994cfc644cf4c258e65da58a857967d68d2d64e8a7d785e58dbd0ebf8805b7564193a2758d532f867f37c
data/README.md CHANGED
@@ -2,8 +2,7 @@
2
2
 
3
3
  Deployment tools for Octopress and Jekyll blogs (or really any static site).
4
4
 
5
- Currently this supports deploying through S3, Git and Rsync. Requests for other
6
- deployment methods are welcome.
5
+ Currently this supports deploying through S3, Git and Rsync. Pull request to support other deployment methods are welcome.
7
6
 
8
7
  ## Installation
9
8
 
@@ -21,94 +20,129 @@ Or install it yourself as:
21
20
 
22
21
  ## Set up
23
22
 
24
- To deploy your site run:
23
+ First set up a configuration file for your deployment method.
25
24
 
26
- ```bash
27
- $ octopress deploy
25
+ ```sh
26
+ $ octopress deploy init git # or rsync, s3
28
27
  ```
29
28
 
30
- This will read from your configuration file `_deploy.yml` and deploy your site. If your site has no configuration file, you will be asked if you want to generate one and what deployment method you want to use.
29
+ This will generate a `_deploy.yml` file in your current
30
+ directory which you can edit to add any necessary configuration.
31
+ **Remember to add your configuration to `.gitignore` to be sure
32
+ you never commit sensitive information to your repository.**
33
+
34
+ ## Deploying
31
35
 
32
- You can also generate a `./_deploy.yml` configuration file by running:
36
+ Deployment is tailored to work with Jekyll, but it will work for
37
+ any static site. Simply make sure your configuration points to
38
+ the root directory of your static site (For Jekyll, that's
39
+ probably `_site`) then tell Octopress to deploy it.
33
40
 
34
- ```bash
35
- $ octopress deploy --init git # or 'rsync' or 's3'
41
+ ```sh
42
+ $ octopress deploy
36
43
  ```
37
44
 
38
- Once you've deployed your site, you can also pull it back down into a local directory. This is mostly useful for checking the results of a deploy. This will create the directory if it doesn't already exist.
45
+ This will read your `_deploy.yml` configuration and deploy your
46
+ site. If you like, you can specify a configuration file.
39
47
 
40
- ```ruby
41
- Octopress::Deploy.pull('some_directory')
48
+ ```sh
49
+ $ octopress deploy --config _staging.yml
42
50
  ```
43
51
 
44
- ### Configuration options
52
+ ## Pull down your site
45
53
 
46
- Configurations should be added to a `_deploy.yml` file in your project's root directory. You can pass options as a hash directy to the `push` method as well. Passed options will override options set in the config file.
54
+ With the `pull` command, you can pull your site down into a local directory.
47
55
 
48
- | Config | Description | Default
49
- |:--------------|:-------------------------------------------------|:---------------|
50
- | `config_file` | Path to the config file. | _config.yml |
51
- | `site_dir` | Path to comipled site files. | _site |
56
+ ```sh
57
+ octopress deploy pull <DIRECTORY>
58
+ ```
59
+
60
+ Mainly you'd do this if you're troubleshooting deployment and you want to see if it's working how you expected.
52
61
 
62
+ ## Amazon S3 Deployment Configuration
53
63
 
54
- #### Amazon S3
64
+ To deploy with Amazon S3 you will need to install the [aws-sdk gem](https://rubygems.org/gems/aws-sdk).
55
65
 
56
- Important: when using S3, you must add your _deploy.yml to your .gitignore to prevent accidentally sharing
57
- account access information. Octopress Deploy will offer to do it for you. If you don't, you won't be able to deploy.`
66
+ Important: when using S3, you must add your `_deploy.yml` to your .gitignore to prevent accidentally sharing
67
+ account access information.
58
68
 
59
- | Config | Description | Default
60
- |:--------------------|:-----------------------------------------|:-------------|
61
- | `bucket_name` | S3 bucket name | |
62
- | `access_key_id` | AWS access key | |
63
- | `secret_access_key` | AWS secret key | |
64
- | `remote_path` | Directory files should be synced to. | / |
65
- | `delete` | Delete files to create a 1:1 file sync. | false |
66
- | `verbose` | Display all file actions during deploy. | true |
67
- | `region` | Region for your AWS bucket | us-east-1 |
69
+ | Config | Description | Default
70
+ |:--------------------|:------------------------------------------------------|:-------------|
71
+ | `method` | Deployment method, in this case use 's3' | |
72
+ | `site_dir` | Path to static site files | _site |
73
+ | `bucket_name` | S3 bucket name | |
74
+ | `access_key_id` | AWS access key | |
75
+ | `secret_access_key` | AWS secret key | |
76
+ | `remote_path` | Directory files should be synced to. | / |
77
+ | `verbose` | [optional] Display all file actions during deploy. | true |
78
+ | `region` | [optional] Region for your AWS bucket | us-east-1 |
79
+ | `delete` | Delete files in `remote_path` not found in `site_dir` | false |
68
80
 
69
81
  If you choose a bucket which doesn't yet exist, Octopress Deploy will offer to create it for you, and offer to configure it as a static website.
70
82
 
71
- ##### ENV config
83
+ If you configure Octopress to delete files, all files found in the `remote_path` on S3 bucket will be removed unless they match local site files.
84
+ If `remote_path` is a subdirectory, only files in that subdirectory will be evaluated for deletion.
85
+
86
+ ### AWS config via ENV
72
87
 
73
- For the following configurations you can set environment vars instead of adding items to your config file.
88
+ If you prefer, you can store AWS access credentials in environment variables instead of a conifiguration file.
74
89
 
75
90
  | Config | ENV var |
76
91
  |:--------------------|:-------------------------------|
77
92
  | `access_key_id` | AWS_ACCESS_KEY_ID |
78
93
  | `secret_access_key` | AWS_SECRET_ACCESS_KEY |
79
- | `region` | AWS_DEFAULT_REGIONS |
80
94
 
95
+ Note: configurations in `_deploy.yml` will override environment variables so be sure to remove those if you decide to use environment variables.
81
96
 
82
- ##### Deleting files from S3
97
+ ### Add a new bucket
83
98
 
84
- If the `delete` option is true, files in the `remote_path` on the bucket will be removed if they do not match local site files.
85
- If `remote_path` is a subdirectory, only files in that subdirectory will be evaluated for deletion.
99
+ If your AWS credentials are properly configured, you can add a new bucket with this command.
100
+
101
+ ```sh
102
+ octopress deploy add_bucket
103
+ ```
86
104
 
87
- #### Git
105
+ This will connect to AWS, create a new S3 bucket, and configure it for static website hosting. This command can use the settings in your deployment configuration or you can pass options to override those settings.
106
+
107
+ | Option | Description | Default
108
+ |:--------------|:-------------------------------------------------|:---------------|
109
+ | `--name` | Override the `bucket_name` configuration | |
110
+ | `--region` | Override the `region` configuration | |
111
+ | `--index` | Specify an index page for your site | index.html |
112
+ | `--error` | Specify an error page for your site | error.html |
113
+ | `--config` | Use a custom configuration file | _deploy.yml |
114
+
115
+ You'll only need to pass options if you want to override settings in your deploy config file.
116
+
117
+ ## Git Deployment Configuration
88
118
 
89
119
  Only `git_url` is required. Other options will default as shown below.
90
120
 
91
121
  | Config | Description | Default
92
122
  |:--------------|:-------------------------------------------------|:---------------|
93
- | `git_url` | Url for remote git repository. | |
94
- | `git_branch` | Deployment branch for git repository. | master |
95
- | `deploy_dir` | Directory where deployment files are staged. | .deploy |
96
- | `remote` | Name of git remote. | deploy |
123
+ | `method` | Deployment method, in this case use 'git' | |
124
+ | `site_dir` | Path to static site files | _site |
125
+ | `git_url` | Url for remote git repository | |
126
+ | `git_branch` | Deployment branch for git repository | master |
127
+ | `deploy_dir` | Directory where deployment files are staged | .deploy |
128
+ | `remote` | Name of git remote | deploy |
97
129
 
98
- #### Rsync
99
-
100
- Only `remote_path` is required. If `user` is not present, Rsync will sync between two locally available directories. Do this if your site root is mounted locally.
130
+ ## Rsync Deployment Configuration
101
131
 
102
132
  | Config | Description | Default
103
133
  |:---------------|:--------------------------------------------------|:---------------|
134
+ | `method` | Deployment method, in this case use 'rsync' | |
135
+ | `site_dir` | Path to static site files | _site |
104
136
  | `user` | ssh user, e.g user@host.com | |
105
137
  | `port` | ssh port | 22 |
106
- | `remote_path` | Remote destination's document root. | |
107
- | `exclude_file` | Path to a file containing rsync exclusions. | |
108
- | `exclude` | Inline list of rsync exclusions. | |
109
- | `include` | Inline list of inclusions to override exclusions. | |
138
+ | `remote_path` | Remote destination's document root | |
139
+ | `exclude_file` | Path to a file containing rsync exclusions | |
140
+ | `exclude` | Inline list of rsync exclusions | |
141
+ | `include` | Inline list of inclusions to override exclusions | |
110
142
  | `delete` | Delete files in destination not found in source | false |
111
143
 
144
+ You can rsync to a local directory by configuring `remote_path` and leaving off `user` and `port`.
145
+
112
146
  ## Contributing
113
147
 
114
148
  1. Fork it
@@ -1,14 +1,12 @@
1
1
  $LOAD_PATH.unshift File.expand_path("../", __FILE__)
2
-
3
- require 'octopress-deploy/version'
4
- require 'octopress-deploy/core_ext'
2
+ #
5
3
  require 'colorator'
6
4
  require 'yaml'
7
- require 'pathname'
5
+ require 'octopress'
8
6
 
9
- if defined? Octopress::Command
10
- require 'octopress-deploy/commands'
11
- end
7
+ require 'octopress-deploy/version'
8
+ require 'octopress-deploy/core_ext'
9
+ require 'octopress-deploy/commands'
12
10
 
13
11
 
14
12
  module Octopress
@@ -18,34 +16,44 @@ module Octopress
18
16
  autoload :S3, 'octopress-deploy/s3'
19
17
 
20
18
  METHODS = {
21
- 'git'=> Git,
22
- 'rsync'=> Rsync,
23
- 's3'=> S3
19
+ 'git' => Git,
20
+ 'rsync' => Rsync,
21
+ 's3' => S3
24
22
  }
25
23
 
26
24
  def self.push(options={})
27
25
  init_options(options)
28
26
  if !File.exists? @options[:config_file]
29
- init_config if ask_bool("Deployment config file not found. Create #{@options[:config_file]}?")
27
+ abort "File not found: #{@options[:config_file]}. Create a deployment config file with `octopress deploy init <METHOD>`."
30
28
  else
31
29
  parse_options
32
30
  deploy_method.new(@options).push()
33
31
  end
34
32
  end
35
33
 
36
- def self.pull(dir='site-pull', options={})
34
+ def self.pull(options={})
37
35
  init_options(options)
38
36
  if !File.exists? @options[:config_file]
39
- init_config if ask_bool("Deployment config file not found. Create #{@options[:config_file]}?")
37
+ abort "No deployment config found. Create one with: octopress deploy init #{@options[:config_file]}"
40
38
  else
41
39
  parse_options
42
- if !File.exists? @options[:pull_dir] = dir
43
- FileUtils.mkdir_p @options[:pull_dir]
40
+ if !File.exists? @options[:dir]
41
+ FileUtils.mkdir_p @options[:dir]
44
42
  end
45
43
  deploy_method.new(@options).pull()
46
44
  end
47
45
  end
48
46
 
47
+ def self.add_bucket(options={})
48
+ init_options(options)
49
+ if !File.exists? @options[:config_file]
50
+ abort "File not found: #{@options[:config_file]}. Create a deployment config file with `octopress deploy init <METHOD>`."
51
+ else
52
+ parse_options
53
+ deploy_method.new(@options).add_bucket()
54
+ end
55
+ end
56
+
49
57
  def self.parse_options
50
58
  config = YAML.load(File.open(@options[:config_file])).to_symbol_keys
51
59
  @options = @options.to_symbol_keys
@@ -53,9 +61,9 @@ module Octopress
53
61
  end
54
62
 
55
63
  def self.init_options(options={})
56
- @options = options.to_symbol_keys
64
+ @options = options.to_symbol_keys
57
65
  @options[:config_file] ||= '_deploy.yml'
58
- @options[:site_dir] ||= site_dir
66
+ @options[:site_dir] ||= site_dir
59
67
  end
60
68
 
61
69
  def self.deploy_method
@@ -72,26 +80,21 @@ module Octopress
72
80
 
73
81
  # Create a config file
74
82
  #
75
- def self.init_config(method=nil, options=nil)
76
- if options
77
- options[:method] = method
78
- init_options(options)
79
- end
83
+ def self.init_config(options={})
84
+ options = options.to_symbol_keys
80
85
 
81
- unless @options[:method]
82
- @options[:method] = ask("How would you like to deploy your site?", METHODS.keys)
86
+ if !options[:method]
87
+ abort "Please provide a deployment method. e.g. #{METHODS.keys}"
83
88
  end
84
89
 
90
+ init_options(options)
85
91
  write_config
86
92
  check_gitignore
87
93
  end
88
94
 
89
95
  def self.write_config
90
- if !@options[:force_write_config]
91
- if File.exist?(@options[:config_file]) &&
92
- !ask_bool("A config file already exists at #{@options[:config_file]}. Overwrite?")
93
- return puts "No config file written."
94
- end
96
+ if File.exist?(@options[:config_file]) && !@options[:force]
97
+ abort "A config file already exists at #{@options[:config_file]}. Use --force to overwrite."
95
98
  end
96
99
 
97
100
  config = get_config.strip
@@ -100,71 +103,31 @@ module Octopress
100
103
  puts "------------------"
101
104
  puts "#{config.yellow}"
102
105
  puts "------------------"
103
- puts "Please add your configurations to this file."
106
+ puts "Modify these configurations as necessary."
104
107
  end
105
108
 
106
109
  def self.get_config
107
110
  <<-FILE
108
- method: #{@options[:method]}
109
- site_dir: #{@options[:site_dir]}
111
+ #{"method: #{@options[:method]}".ljust(40)} # How do you want to deploy? git, rsync or s3.
112
+ #{"site_dir: #{@options[:site_dir]}".ljust(40)} # Location of your your static site files.
113
+
110
114
  #{deploy_method.default_config(@options)}
111
115
  FILE
112
116
  end
113
117
 
118
+ # Checks the repository's .gitignore for the config file
119
+ #
120
+ # returns: Boolean - whether it is present or not.
121
+ #
114
122
  def self.check_gitignore
115
123
  gitignore = File.join(`git rev-parse --show-toplevel`.strip, ".gitignore")
116
- if !File.exist?(gitignore) ||
117
- Pathname.new(gitignore).read.match(/^#{@options[:config_file]}/i).nil?
118
- if ask_bool("Do you want to add #{@options[:config_file]} to your .gitignore?")
119
- git_ignore_config_file gitignore
120
- return true
121
- end
122
- else
123
- return true
124
- end
125
- end
126
-
127
- def self.git_ignore_config_file(gitignore)
128
- File.open(gitignore, 'a') { |f| f.write(@options[:config_file]) }
129
- end
130
-
131
- def self.ask_bool(message)
132
- ask_or_default(true, message) do
133
- ask(message, ['y','n']) == 'y'
134
- end
135
- end
136
124
 
137
- def self.ask(message, valid_options)
138
- ask_or_default(false, message) do
139
- if valid_options
140
- options = valid_options.join '/'
141
- answer = get_stdin("#{message} [#{options}]: ").downcase.strip
142
- if valid_options.map{|o| o.downcase}.include?(answer)
143
- return answer
144
- else
145
- return false
146
- end
147
- else
148
- answer = get_stdin("#{message}: ")
149
- end
150
- answer
151
- end
152
- end
153
-
154
- def self.get_stdin(message)
155
- print message
156
- STDIN.gets.chomp
157
- end
158
-
159
- def self.should_ask?
160
- !ENV['NO_ASK']
161
- end
162
-
163
- def self.ask_or_default(default, message)
164
- if should_ask?
165
- yield
125
+ if !File.exist?(gitignore) ||
126
+ File.open(gitignore).read.match(/^#{@options[:config_file]}/i).nil?
127
+ puts "Remember to add #{@options[:config_file]} to your .gitignore."
128
+ false
166
129
  else
167
- puts "Assuming '#{default}' for '#{message}'."
130
+ true
168
131
  end
169
132
  end
170
133
  end
@@ -3,20 +3,47 @@ module Octopress
3
3
  class Commands < Octopress::Command
4
4
  def self.init_with_program(p)
5
5
  p.command(:deploy) do |c|
6
- c.syntax "octopress deploy [options]"
6
+ c.syntax "deploy [options]"
7
7
  c.description "Deploy your Octopress site."
8
- c.option "using", "--using METHOD", "Define the push method to use, overriding your configuration file's setting"
9
8
  c.option "config_file", "--config FILE", "The path to your config file (default: _deploy.yml)"
10
- c.option "init", "--init METHOD", "Initialize a config file with the options for the given method."
11
- c.option "pull", "--pull DIRECTORY", "Pull down the published copy of your site into a directory (default: ./site-pull)"
12
9
 
13
- c.action do |_, options|
14
- if options["init"] and options["init"].is_a?(String)
15
- Octopress::Deploy.init_config(options["init"], options)
16
- elsif options["pull"] and options["pull"].is_a?(String)
17
- Octopress::Deploy.pull(options["pull"], options)
18
- else
19
- Octopress::Deploy.push(options)
10
+ c.action do |args, options|
11
+ Octopress::Deploy.push(options)
12
+ end
13
+
14
+ c.command(:pull) do |c|
15
+ c.syntax "pull <DIRECTORY>"
16
+ c.description "Pull down the published copy of your site into a directory (default: ./site-pull)"
17
+ c.option "config_file", "--config FILE", "The path to your config file (default: _deploy.yml)"
18
+
19
+ c.action do |args, options|
20
+ options['dir'] = args.first
21
+ Octopress::Deploy.pull(options)
22
+ end
23
+ end
24
+
25
+ c.command(:init) do |c|
26
+ c.syntax 'init <METHOD> [options]'
27
+ c.description "Create a configuration file for a deployment method (#{Deploy::METHODS.keys.join(', ')})."
28
+ c.option 'force', '--force', 'Initialize a config file even if it already exists.'
29
+
30
+ c.action do |args, options|
31
+ options['method'] = args.first
32
+ Octopress::Deploy.init_config(options)
33
+ end
34
+ end
35
+
36
+ c.command(:add_bucket) do |c|
37
+ c.syntax 'add_bucket [options]'
38
+ c.description "Add a new S3 bucket and configure it for static websites."
39
+ c.option 'bucket_name','--name NAME','Choose a bucket name. (Defaults: to bucket_name in config file)'
40
+ c.option 'region','--region REGION','Choose a region. (Defaults: to region in config file)'
41
+ c.option 'index_page','--index PAGE','Specify an index page. (Default: index.html)'
42
+ c.option 'error_page','--error PAGE','Specify an error page. (Default: 404.html)'
43
+ c.option "config_file", "--config FILE", "The path to your config file (default: _deploy.yml)"
44
+
45
+ c.action do |args, options|
46
+ Octopress::Deploy.add_bucket(options)
20
47
  end
21
48
  end
22
49
  end
@@ -5,13 +5,13 @@ module Octopress
5
5
  def initialize(options={})
6
6
  @options = options
7
7
  @repo = @options[:git_url]
8
- @branch = @options[:git_branch]
8
+ @branch = @options[:git_branch] || 'master'
9
9
  @remote = @options[:remote] || 'deploy'
10
10
  @remote_path = @options[:remote_path] || ''
11
11
  @remote_path = @remote_path.sub(/^\//,'') #remove leading slash
12
- @site_dir = File.expand_path(@options[:site_dir])
12
+ @site_dir = File.expand_path(@options[:site_dir]) || '_site'
13
13
  @deploy_dir = File.expand_path(@options[:deploy_dir] || '.deploy')
14
- @pull_dir = @options[:pull_dir]
14
+ @pull_dir = @options[:dir]
15
15
  abort "Deploy Failed: Configure a git_url in #{@options[:config_file]} before deploying.".red if @repo.nil?
16
16
  end
17
17
 
@@ -44,8 +44,14 @@ module Octopress
44
44
 
45
45
  def self.default_config(options={})
46
46
  <<-CONFIG
47
- git_url: #{options[:git_url]}
48
- git_branch: #{options[:git_branch] || 'master'}
47
+ #{"git_url: #{options[:git_url]}".ljust(40)} # remote repository url, e.g. git@github.com:username/repo_name
48
+ #{"git_branch: #{options[:git_branch] || 'master'}".ljust(40)} # Git branch where static site files are commited
49
+
50
+ # Note on git_branch:
51
+ # If using GitHub project pages, set the branch to 'gh-pages'.
52
+ # For GitHub user/organization pages or Heroku, set the branch to 'master'.
53
+
54
+ #{"# remote_path: #{options[:remote_path]}".ljust(40)} # Destination directory
49
55
  CONFIG
50
56
  end
51
57
 
@@ -12,9 +12,11 @@ module Octopress
12
12
  @exclude_file = @options[:exclude_file]
13
13
  @exclude_file = File.expand_path(@exclude_file) if @exclude_file
14
14
  @include = @options[:include]
15
- @delete = @options[:delete]
15
+ @exclude_file = @options[:include_file]
16
+ @exclude_file = File.expand_path(@include_file) if @include_file
17
+ @delete = @options[:delete] || false
16
18
  @remote_path = @remote_path.sub(/^\//,'') #remove leading slash
17
- @pull_dir = @options[:pull_dir]
19
+ @pull_dir = @options[:dir]
18
20
  end
19
21
 
20
22
  def push
@@ -35,6 +37,7 @@ module Octopress
35
37
  cmd << " -e " if @exclude_file || @exclude
36
38
  cmd << " --exclude-from #{@exclude_file} " if @exclude_file
37
39
  cmd << " --exclude #{@exclude} " if @exclude
40
+ cmd << " --include-from #{@include_file} " if @include_file
38
41
  cmd << " --include #{@include} " if @include
39
42
  cmd << " --rsh='ssh -p#{@port}' " if @user && @port
40
43
  cmd << " --delete " if @delete
@@ -52,10 +55,16 @@ module Octopress
52
55
 
53
56
  def self.default_config(options={})
54
57
  <<-CONFIG
55
- user: #{options[:user]}
56
- port: #{options[:port]}
57
- remote_path: #{options[:remote_path]}
58
- delete: #{options[:delete]}
58
+ #{"user: #{options[:user]}".ljust(40)} # The user for your host, e.g. user@host.com
59
+ #{"remote_path: #{options[:remote_path]}".ljust(40)} # Destination directory
60
+ #{"delete: #{options[:delete]}".ljust(40)} # Remove files from destination which don't match files in source
61
+
62
+ #{"# port: #{options[:port]}".ljust(40)} # If your host requires a non standard port
63
+ #{"# exclude: ".ljust(40)} # Path to file containing list of files to exclude
64
+ #{"# exclude-file: ".ljust(40)} # Path to file containing list of files to exclude
65
+ #{"# include: ".ljust(40)} # Path to file containing list of files to include
66
+ #{"# include-file: ".ljust(40)} # Path to file containing list of files to include
67
+
59
68
  CONFIG
60
69
  end
61
70
 
@@ -1,12 +1,17 @@
1
1
  require 'find'
2
2
  require 'fileutils'
3
- require 'aws-sdk'
4
3
 
5
4
  module Octopress
6
5
  module Deploy
7
6
  class S3
8
7
 
9
8
  def initialize(options)
9
+ begin
10
+ require 'aws-sdk'
11
+ rescue LoadError
12
+ abort "Please install the aws-sdk gem first."
13
+ end
14
+ @options = options
10
15
  @local = options[:site_dir]
11
16
  @bucket_name = options[:bucket_name]
12
17
  @access_key = options[:access_key_id] || ENV['AWS_ACCESS_KEY_ID']
@@ -16,40 +21,48 @@ module Octopress
16
21
  @verbose = options[:verbose] || true
17
22
  @delete = options[:delete]
18
23
  @remote_path = @remote_path.sub(/^\//,'') # remove leading slash
19
- @pull_dir = options[:pull_dir]
24
+ @pull_dir = options[:dir]
20
25
  connect
21
26
  end
22
27
 
23
28
  def push
24
- abort "Seriously, you should. Quitting..." unless Deploy.check_gitignore
25
- puts "Syncing #{@local} files to #{@bucket_name} on S3."
26
- write_files
27
- delete_files if delete_files?
28
- status_message
29
+ #abort "Seriously, you should. Quitting..." unless Deploy.check_gitignore
30
+ @bucket = @s3.buckets[@bucket_name]
31
+ if !@bucket.exists?
32
+ abort "Bucket not found: '#{@bucket_name}'. Check your configuration or create a bucket using: `octopress deploy add_bucket`"
33
+ else
34
+ puts "Syncing #{@local} files to #{@bucket_name} on S3."
35
+ write_files
36
+ delete_files if delete_files?
37
+ status_message
38
+ end
29
39
  end
30
40
 
31
41
  def pull
32
- puts "Syncing #{@bucket_name} files to #{@pull_dir} on S3."
33
- @bucket.objects.each do |object|
34
- path = File.join(@pull_dir, object.key)
35
- dir = File.dirname(path)
36
- FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
37
- File.open(path, 'w') { |f| f.write(object.read) }
42
+ @bucket = @s3.buckets[@bucket_name]
43
+ if !@bucket.exists?
44
+ abort "Bucket not found: '#{@bucket_name}'. Check your configuration or create a bucket using: `octopress deploy add_bucket`"
45
+ else
46
+ puts "Syncing #{@bucket_name} files to #{@pull_dir} on S3."
47
+ @bucket.objects.each do |object|
48
+ path = File.join(@pull_dir, object.key)
49
+ dir = File.dirname(path)
50
+ FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
51
+ File.open(path, 'w') { |f| f.write(object.read) }
52
+ end
38
53
  end
39
54
  end
40
55
 
41
56
  # Connect to S3 using the AWS SDK
42
57
  # Retuns an aws bucket
58
+ #
43
59
  def connect
44
60
  AWS.config(access_key_id: @access_key, secret_access_key: @secret_key, region: @region)
45
- s3 = AWS.s3
46
- @bucket = s3.buckets[@bucket_name]
47
- unless @bucket.exists? || create_bucket(s3.buckets)
48
- abort "No bucket created. Change your config to point to an existing bucket."
49
- end
61
+ @s3 = AWS.s3
50
62
  end
51
63
 
52
64
  # Write site files to the selected bucket
65
+ #
53
66
  def write_files
54
67
  puts "Writing #{pluralize('file', site_files.size)}:" if @verbose
55
68
  site_files.each do |file|
@@ -64,6 +77,7 @@ module Octopress
64
77
  end
65
78
 
66
79
  # Delete files from the bucket, to ensure a 1:1 match with site files
80
+ #
67
81
  def delete_files
68
82
  if deletable_files.size > 0
69
83
  puts "Deleting #{pluralize('file', deletable_files.size)}:" if @verbose
@@ -78,30 +92,24 @@ module Octopress
78
92
  end
79
93
  end
80
94
 
81
- def create_bucket(buckets)
82
-
83
- if Deploy.ask_bool("S3 bucket '#{@bucket_name}' not found. Create one in region #{@region}?")
84
- @bucket = buckets.create(@bucket_name)
85
- puts "Created new bucket #{@bucket_name} in region #{@region}."
86
-
87
- configure_bucket
88
- true
89
- end
95
+ # Create a new S3 bucket
96
+ #
97
+ def add_bucket
98
+ puts @bucket_name
99
+ @bucket = @s3.buckets.create(@bucket_name)
100
+ puts "Created new bucket '#{@bucket_name}' in region '#{@region}'."
101
+ configure_bucket
90
102
  end
91
103
 
92
104
  def configure_bucket
93
- error_page = remote_path('404.html')
94
- index_page = remote_path('index.html')
105
+ error_page = @options['error_page'] || remote_path('404.html')
106
+ index_page = @options['index_page'] || remote_path('index.html')
95
107
 
96
- if Deploy.ask_bool("Bucket is not currently configured as a static websites. Configure it with index_page: #{index_page} and error_page: #{error_page}?")
97
- config = @bucket.configure_website do |cfg|
98
- cfg.index_document_suffix = index_page
99
- cfg.error_document_key = error_page
100
- end
101
- puts "Bucket configured with index_document: #{index_page} and error_document: #{error_page}."
102
- else
103
- puts "You'll want to configure your new bucket using the AWS management console."
108
+ config = @bucket.configure_website do |cfg|
109
+ cfg.index_document_suffix = index_page
110
+ cfg.error_document_key = error_page
104
111
  end
112
+ puts "Bucket configured with index_document: #{index_page} and error_document: #{error_page}."
105
113
  end
106
114
 
107
115
  def delete_files?
@@ -161,13 +169,14 @@ module Octopress
161
169
  # Return default configuration options for this deployment type
162
170
  def self.default_config(options={})
163
171
  <<-CONFIG
164
- bucket_name: #{options[:bucket_name]}
165
- access_key_id: #{options[:access_key_id]}
166
- secret_access_key: #{options[:secret_access_key]}
167
- region: #{options[:region] || 'us-east-1'}
168
- remote_path: #{options[:remote_path] || '/'}
169
- delete: #{options[:delete] || 'false'}
170
- verbose: #{options[:verbose] || 'true'}
172
+ #{"bucket_name: #{options[:bucket_name]}".ljust(40)} # Name of the S3 bucket where these files will be stored.
173
+ #{"access_key_id: #{options[:access_key_id]}".ljust(40)} # Get this from your AWS console at aws.amazon.com.
174
+ #{"secret_access_key: #{options[:secret_access_key]}".ljust(40)} # Keep it safe; keep it secret. Keep this file in your .gitignore.
175
+ #{"remote_path: #{options[:remote_path] || '/'}".ljust(40)} # relative path on bucket where files should be copied.
176
+
177
+ #{"# region: #{options[:region] || 'us-east-1'}".ljust(40)} # Region where your bucket is located.
178
+ #{"# delete: #{options[:delete] || 'true'}".ljust(40)} # Remove files from destination which do not match source files.
179
+ #{"# verbose: #{options[:verbose] || 'true'}".ljust(40)} # Print out all file operations.
171
180
  CONFIG
172
181
  end
173
182
 
@@ -1,5 +1,5 @@
1
1
  module Octopress
2
2
  module Deploy
3
- VERSION = "1.0.0.alpha.3"
3
+ VERSION = "1.0.0.rc.1"
4
4
  end
5
5
  end
@@ -17,8 +17,8 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
+ spec.add_runtime_dependency "octopress", "~> 3.0.0.rc.1"
20
21
  spec.add_runtime_dependency "colorator"
21
- spec.add_runtime_dependency "aws-sdk"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake"
data/test/Gemfile CHANGED
@@ -1,6 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem "octopress", '~> 3.0.0.alpha.5'
4
3
  gem "octopress-deploy", path: "../"
5
4
  gem "pry-debugger"
6
5
  gem "aws-sdk"
data/test/test.rb CHANGED
@@ -67,9 +67,9 @@ def test_remote_git
67
67
 
68
68
  # Test remote git deployment
69
69
  #
70
- Octopress::Deploy.init_config('git', config_file: config, force_write_config: true, git_branch: 'test_git_deploy', git_url: repo)
70
+ Octopress::Deploy.init_config(method: 'git', config_file: config, force: true, git_branch: 'test_git_deploy', git_url: repo)
71
71
  Octopress::Deploy.push(config_file: config)
72
- Octopress::Deploy.pull('pull-git', config_file: config)
72
+ Octopress::Deploy.pull(dir: 'pull-git', config_file: config)
73
73
  diff_dir('_site', 'pull-git')
74
74
  end
75
75
 
@@ -86,7 +86,7 @@ def test_local_git
86
86
  # Test local git deployment
87
87
  #
88
88
  Octopress::Deploy.push(config_file: config, git_url: File.expand_path(repo), remote_path: 'site')
89
- Octopress::Deploy.pull('pull-git', config_file: config, git_url: File.expand_path(repo), remote_path: 'site')
89
+ Octopress::Deploy.pull(dir: 'pull-git', config_file: config, git_url: File.expand_path(repo), remote_path: 'site')
90
90
  diff_dir('_site', 'pull-git/site')
91
91
  end
92
92
 
@@ -99,9 +99,9 @@ def test_remote_rsync
99
99
 
100
100
  # Test remote git deployment
101
101
  #
102
- Octopress::Deploy.init_config('rsync', config_file: config, force_write_config: true, user: 'imathis@imathis.com', remote_path: '~/octopress-deploy/rsync/')
102
+ Octopress::Deploy.init_config(method: 'rsync', config_file: config, force: true, user: 'imathis@imathis.com', remote_path: '~/octopress-deploy/rsync/')
103
103
  Octopress::Deploy.push(config_file: config)
104
- Octopress::Deploy.pull('pull-rsync', config_file: config)
104
+ Octopress::Deploy.pull(dir: 'pull-rsync', config_file: config)
105
105
  diff_dir('_site', 'pull-rsync')
106
106
 
107
107
  end
@@ -115,9 +115,9 @@ def test_local_rsync
115
115
 
116
116
  # Test local git deployment
117
117
  #
118
- Octopress::Deploy.init_config('rsync', config_file: config, force_write_config: true, remote_path: 'local-rsync')
118
+ Octopress::Deploy.init_config(method: 'rsync', config_file: config, force: true, remote_path: 'local-rsync')
119
119
  Octopress::Deploy.push(config_file: config)
120
- Octopress::Deploy.pull('pull-rsync', config_file: config, user: false, remote_path: 'local-rsync')
120
+ Octopress::Deploy.pull(dir: 'pull-rsync', config_file: config, user: false, remote_path: 'local-rsync')
121
121
  diff_dir('_site', 'pull-rsync')
122
122
  end
123
123
 
@@ -126,7 +126,7 @@ def test_s3
126
126
  config = "_s3_deploy.yml"
127
127
  `rm -rf pull-s3`
128
128
  Octopress::Deploy.push(config_file: config)
129
- Octopress::Deploy.pull('pull-s3', config_file: config)
129
+ Octopress::Deploy.pull(dir: 'pull-s3', config_file: config)
130
130
  diff_dir('_site', 'pull-s3')
131
131
  end
132
132
 
metadata CHANGED
@@ -1,31 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octopress-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha.3
4
+ version: 1.0.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Mathis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-20 00:00:00.000000000 Z
11
+ date: 2014-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: colorator
14
+ name: octopress
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 3.0.0.rc.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 3.0.0.rc.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: aws-sdk
28
+ name: colorator
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '>='
@@ -75,7 +75,6 @@ extra_rdoc_files: []
75
75
  files:
76
76
  - .gitignore
77
77
  - Gemfile
78
- - History.markdown
79
78
  - LICENSE.txt
80
79
  - README.md
81
80
  - Rakefile
data/History.markdown DELETED
@@ -1,13 +0,0 @@
1
- ## HEAD
2
-
3
- ### Major Enhancements
4
-
5
- ### Minor Enhancements
6
-
7
- * Ask user if they would like to ignore the `_deploy.yml` file & automate (#7)
8
-
9
- ### Bug Fixes
10
-
11
- * Symbolize all incoming keys to `Octopress::Deploy.init_config` (#4)
12
-
13
- ### Development Fixes