Current section
Files
Jump to
Current section
Files
lib/mix/tasks/s3.ex
defmodule Mix.Tasks.Publishex.S3 do
use Mix.Task
@shortdoc "Publish a directory to S3"
@moduledoc """
Publish directory to S3
## Usage
mix publishex.s3 --bucket bucket_name --region us-west-1 --access_key_id access_key_id --secret_access_key secret_access_key --acl public_read
# Set a custom directory
mix publishex.s3 --bucket bucket_name --region us-west-1 --access_key_id access_key_id --secret_access_key secret_access_key --acl public_read --directory "some_dir"
You have to explicitly pass the acl so files are not accidentally made public
The values can be any of the following `private`, `public_read`, `public_read_write`, `authenticated_read`, `bucket_owner_read` or `bucket_owner_full_control`.
"""
@impl Mix.Task
def run(argv) do
Application.ensure_all_started(:httpoison)
parse_options = [
strict: [
bucket: :string,
region: :string,
directory: :string,
secret_access_key: :string,
access_key_id: :string,
acl: :string
]
]
{opts, _args, _} = OptionParser.parse(argv, parse_options)
directory = Keyword.get(opts, :directory, "doc")
bucket = Keyword.fetch!(opts, :bucket)
region = Keyword.fetch!(opts, :region)
access_key_id = Keyword.fetch!(opts, :access_key_id)
secret_access_key = Keyword.fetch!(opts, :secret_access_key)
acl = Keyword.fetch!(opts, :acl)
Publishex.publish(directory,
adapter: Publishex.Adapter.S3,
adapter_opts: [
bucket: bucket,
region: region,
access_key_id: access_key_id,
secret_access_key: secret_access_key,
acl: String.to_atom(acl)
]
)
end
end