Giter VIP home page Giter VIP logo

poosh's Introduction

poosh

Publish local files to virtually any remote endpoint (AWS S3, etc.)

npm version Travis Status Coverage Status MIT licensed

poosh cli screenshot

Short Example

Install poosh CLI and S3 plugin:

> npm install -g poosh-cli poosh-plugin-s3

Create a .poosh.json5 file at the root of your project:

{
  plugins : ["s3"],
  baseDir : "./deploy",
  remote  : "s3-us-west-2.amazonaws.com/my-bucket",

  each: [{
    headers   : { "cache-control": { cacheable: "public" } }
  }, {
    match     : "**/*.{html,css,js}",
    gzip      : true,
    headers   : { "cache-control": { maxAge: "48 hours" } }
  }, {
    match     : "**/*.{jpg,png,gif,ico}",
    gzip      : false,
    headers   : { "cache-control": { maxAge: "1 year" } }
  }, {
    match     : "**/*.html",
    priority  : -1
  }]
}

You can now upload:

> poosh

Or sync if you want to delete remote files that has been locally removed:

> poosh sync

Main Features

Glob Selection | GZIP | HTTP Headers | Upload Ordering | Automatic Redirection | Cache | Simulation

Poosh allow you to upload and sync local files to virtually any remote destination.

Glob Selection

Using the match option, local files that needs to be uploaded can be selected and configured with a glob string:

{
  each: [{
    match: "**/*.html"
  }]
}

or an array of patterns

{
  each: [{
    match: ["*.*", "!*.txt"]
  }]
}

Some supported glob features are:

Feature Example
Brace Expansion "foo/bar-{1..5}.html", "one/{two,three}/four.html"
Typical glob patterns "**/*", "a/b/*.js"
Logical OR "foo/bar/(abc|xyz).js"
Regex character classes "foo/bar/baz-[1-5].jpg"
POSIX bracket expressions "**/[[:alpha:][:digit:]]/"
extglobs "**/+(x|y)", "!(a|b)", etc.

GZIP

Using the GZIP option, files can be compressed at remote destination:

{
  each: [{
    match : "**/*.html",
    gzip  : true
  }]
}

content-encoding HTTP header will accordingly be set to gzip.

HTTP Headers

Using the headers option, HTTP headers can be configured for each files:

{
  each: [{
    match : "**/*.html",
    headers: {
      "cache-control": {
        maxAge      : "60 days",
        cacheable   : "public",
        noTransform : true,
        immutable   : true
      },
      "content-disposition" : "attachment; filename=\"foo.html\"",
      "content-encoding"    : "utf-8",
      "content-language"    : "en-us",
      "content-length"      : 500,
      "content-md5"         : "Q2hlY2sgSW50ZWdyaXR5IQ==",
      "content-type"        : "text/html; charset=utf-8",
      "expires"             : "0",
      "location"            : "http://www.zombo.com"
    }
  }]
}

content-encoding, content-length and content-type HTTP headers are automatically generated by default.

Upload Ordering

Sometimes some files must be uploaded before other ones to avoid inconsistency. The priority option can be used to order uploads:

{
  each: [{
    match     : "**/*.html",
    priority  : -1
  }]
}

Greatest values are uploaded first.

Automatic Redirection

Using the header-location-from-html plugin, the location HTTP header can be automatically generated from a file HTML http-equiv meta tag.

First install the plugin:

> npm install -g poosh-plugin-header-location-from-html

And then use it in your configuration file:

{
  plugins: ["header-location-from-html"],
  each: [{
    match     : "**/*.html",
    headers   : { location: { fromContent: true } }
  }]
}

Cache

When local files are processed, a .poosh.cache file is generated next to the .poosh.json5 configuration file.

Consecutive runs of poosh will use this file to avoid unnecessary remote requests.

Poosh CLI can be used with the --force options to bypass cache lookup:

> poosh --force cache

The cache file is written after each individual file processing (using the great NeDB append-only format). Cache file stores 3 separate hash keys for each processed local file:

  • File content hash key
  • HTTP headers hash key
  • Remote options hash key

This is useful to poosh to detect distinctive local changes in either file content, HTTP headers and remote options.

Simulation

Using the CLI --dry-run or --read-only options, no changes will be maid while output still showing potential changes:

> poosh --dry-run

or

> poosh sync --dry-run

Options

Option Default Description
plugins [] List of plugins to load and use. A single plugin is designed by it's package name (with or without it's poosh-plugin- prefix).
baseDir null The base directory of local files. This path can either be absolute or relative (to the configuration file).
remote null The remote client or a key/value map of remote clients to use for processing files. See your remote plugin documentation for more information (e.g. S3 Plugin).
concurrency 3 File processing concurrency.
each [] List of items used to select and process local files. Available options are described in the each section.
ignore [] List of glob strings identifying files to totally ignore (prevent files to be created, updated or deleted).

Each

All "each" items are applied to files in order. Same options are overridden by the last one.

Option Default Description
match null A glob string used to match files. If not specified, other options are applied to all files without marking them "to be processed".
priority null Greatest values are processed first.
gzip false If true, will gzip the file in remote destination.
headers [] List of headers options.
remote "default" The key of the remote client to use. Or an object with an id key and some other ones that will define specific remote client options.

Headers

Options used to control file's HTTP headers.

Option Default Description
cache-control null String or object. The object can be a combination of the following keys:
  • maxAge: A number (of seconds) or a string that will be parsed by ms. For example "60 days", "2.5 hours", "1 year", "35 minutes", etc.
  • cacheable: Can be one of the following values: null, "public", "private", "no-cache".
  • noTransform: Boolean.
All those keys are null by default.
content-disposition null String.
content-encoding null Content encoding header is automatically generated at runtime. Using this option will force the header to the specified value.
content-language null String.
content-length null Number. Content length header is automatically generated at runtime. Using this option will force the header to the specified value.
content-md5 null String.
content-type null Content type header is automatically generated at runtime. Using this option will force the header to the specified value.
expires null String.
location null String.

poosh's People

Contributors

yvele avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

martineboh

poosh's Issues

`poosh sync --help` should not sync

This was an unfortunate surprise

11:34 $ poosh sync --help
[updated] s3-us-west-2.amazonaws.com/www-mysite-com/index.html
[created] s3-us-west-2.amazonaws.com/www-mysite-com/404.html

Matched files: 5 (381 kB), 100%.
Uploaded files: 2 (3.57 kB), done.
Deleted remote files: 0 (0 B), done.
1 creation, 1 update, 0 deletions, 3 skips.
Elapsed time: 2 seconds.

InvalidOptions: Failed to parse "headers.cache-control.maxAge" option. Value "6 months" is invalid.

Matched files: 0 (0 B), 0%.
Uploaded files: 0 (0 B)
Deleted remote files: 0 (0 B)
0 creations, 0 updates, 0 deletions, 0 skips.
Elapsed time: 2 seconds.
InvalidOptions: Failed to parse "headers.cache-control.maxAge" option. Value "6 months" is invalid.
    at parseMs (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-common\lib\options\parseMs.js:37:11)
    at parseSeconds (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-common\lib\options\parseSeconds.js:35:34)
    at addMaxAgeDirective (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\pipeline\headers\appendCacheControl.js:26:45)
    at appendCacheControl (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\pipeline\headers\appendCacheControl.js:54:3)
    at appendHeaders (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\pipeline\appendHeaders.js:46:38)
    at Pipeline._callee$ (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\pipeline\Pipeline.js:104:45)
    at tryCatch (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:61:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:329:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:94:21)
    at step (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\pipeline\Pipeline.js:55:191)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\pipeline\Pipeline.js:55:368
    at run (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\core-js\modules\es6.promise.js:89:22)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\core-js\modules\es6.promise.js:102:28
    at flush (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\core-js\modules\_microtask.js:18:9)
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

This is the file, which is looking very much like the exemple provided in the readme :

{
  plugins : ["poosh-plugin-s3"],
  baseDir : ".",
  remote  : "s3-website.eu-central-1.amazonaws.com/xxxxxxxxxxx",

  each: [{
    headers   : { "cache-control": { cacheable: "public" } }
  }, {
    match     : "**/*.{html,css,js}",
    gzip      : true,
    headers   : { "cache-control": { maxAge: "48 hours" } }
  }, {
    match     : "**/*.{jpg,png,gif,ico}",
    gzip      : false,
    headers   : { "cache-control": { maxAge: "6 months" } }
  }, {
    match     : "**/*.html",
    priority  : -1
  }]
}

I don't know AWS API so this may be normal, but this is at least a documentation bug.

[Documentation] Explain how to figure out AWS remote URL

The documentation contains this :

  plugins : ["s3"],
  baseDir : "./deploy",
  remote  : "s3-us-west-2.amazonaws.com/my-bucket",

It's not immediately obvious what to put as a remote, considering that S3 URLs are different :
Endpoint: trololo.ch.s3-website.eu-central-1.amazonaws.com

  • The endpointURL is not suitable
  • Using s3-website.eu-central-1.amazonaws.com/trololo.ch isn't either
  • s3-eu-central-1.amazonaws.com/trololo.ch is the right one (ie without the 'website.' part

It's dictacted by AWS and is outside of the scope of your project, but as AWS noobs (like me) may use your project for convenience, it probably doesn't hurt to clarify how to get the right URL (I use S3 "static website" feature)

Multiple Environments

My repository has a staging and a production s3 bucket that I upload built assets to. Is there way to configure poosh so that it can upload to multiple destinations (either all-at-once or selectively)?

s-maxage

I'm no pro with node so I can't tell for sure but it seems to me like this handles only:

Cache-Control: max-age=nnnn

What would be useful is to support s-maxage as well, as Cloudfront will listen to this parameter and hold a file longer in the cloudfront cache if you want it to.

This would look like:

Cache-Control: max-age=xxx,s-maxage=yyy

Nice tool and will be using it.

--dry-run

Make a --dry-run option (equivalent to --readonly both)

I don't understand how `ignore` works

E.g.

ignore: ["node_modules/**/*"],

Is this what I'm supposed to use to block node_modules at the root? I wish it were just node_modules because e.g. if there's a nested node_modules it needs to have both the root and without the root: **/node_modules/**/*. I must be misunderstanding the syntax.

PooshError: Unable to resolve plugin "poosh-plugin-s3" (Windows)

Fresh install on windows 10 64 :

  • Node.js 5.11.0 x64
  • NPM 3.8.6
  • Poosh installed via npm install -g poosh-cli poosh-plugin-s3 with no apparent issue

I use the following poosh config, which apart from the remote, is the same as the example
I tried both with plugins : ["s3"] and the config below

{
  plugins : ["poosh-plugin-s3"],
  baseDir : ".",
  remote  : "s3-website.eu-central-1.amazonaws.com/xxxxxxxxxx",

  each: [{
    headers   : { "cache-control": { cacheable: "public" } }
  }, {
    match     : "**/*.{html,css,js}",
    gzip      : true,
    headers   : { "cache-control": { maxAge: "48 hours" } }
  }, {
    match     : "**/*.{jpg,png,gif,ico}",
    gzip      : false,
    headers   : { "cache-control": { maxAge: "6 months" } }
  }, {
    match     : "**/*.html",
    priority  : -1
  }]
}

Actual result :

D:\OneDrive\Projects\MailingMariage\site>poosh
PooshError: Unable to resolve plugin "s3" within "D:\OneDrive\Projects\MailingMariage\site".
    at resolvePlugin (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:73:11)
    at PluginCollection.addSingle (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:105:16)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:175:26
    at Array.forEach (native)
    at PluginCollection.add (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:174:13)
    at OptionManager.addOptions (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:121:21)
    at OptionManager.addConfigFile (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:163:12)
    at _callee$ (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:67:60)
    at tryCatch (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:61:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:329:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:94:21)
    at step (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:191)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:451
    at new Promise (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\core-js\modules\es6.promise.js:193:7)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:99
    at main (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:114:16)

D:\OneDrive\Projects\MailingMariage\site>poosh
PooshError: Unable to resolve plugin "s3" within "D:\OneDrive\Projects\MailingMariage\site".
    at resolvePlugin (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:73:11)
    at PluginCollection.addSingle (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:105:16)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:175:26
    at Array.forEach (native)
    at PluginCollection.add (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:174:13)
    at OptionManager.addOptions (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:121:21)
    at OptionManager.addConfigFile (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:163:12)
    at _callee$ (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:67:60)
    at tryCatch (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:61:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:329:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:94:21)
    at step (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:191)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:451
    at new Promise (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\core-js\modules\es6.promise.js:193:7)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:99
    at main (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:114:16)

D:\OneDrive\Projects\MailingMariage\site>poosh plugins
PooshError: Unable to resolve plugin "s3" within "D:\OneDrive\Projects\MailingMariage\site".
    at resolvePlugin (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:73:11)
    at PluginCollection.addSingle (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:105:16)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:175:26
    at Array.forEach (native)
    at PluginCollection.add (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:174:13)
    at OptionManager.addOptions (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:121:21)
    at OptionManager.addConfigFile (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:163:12)
    at _callee$ (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:67:60)
    at tryCatch (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:61:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:329:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:94:21)
    at step (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:191)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:451
    at new Promise (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\core-js\modules\es6.promise.js:193:7)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:99
    at main (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:114:16)

D:\OneDrive\Projects\MailingMariage\site>poosh
PooshError: Unable to resolve plugin "poosh-plugin-s3" within "D:\OneDrive\Projects\MailingMariage\site".
    at resolvePlugin (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:73:11)
    at PluginCollection.addSingle (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:105:16)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:175:26
    at Array.forEach (native)
    at PluginCollection.add (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\helpers\options\PluginCollection.js:174:13)
    at OptionManager.addOptions (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:121:21)
    at OptionManager.addConfigFile (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\poosh-core\lib\OptionManager.js:163:12)
    at _callee$ (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:67:60)
    at tryCatch (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:61:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:329:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\babel-regenerator-runtime\runtime.js:94:21)
    at step (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:191)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:451
    at new Promise (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\node_modules\core-js\modules\es6.promise.js:193:7)
    at C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:25:99
    at main (C:\Users\jubij\AppData\Roaming\npm\node_modules\poosh-cli\lib\main.js:114:16)

`[updated]` in `sync --dry-run` but not updated in `sync`

@yvele fyi this is a bit odd that I get all these [updated]marks on the dry-run. Makes the tool seem less reliable.

16:07 $ poosh sync --dry-run
[updated] s3-us-west-2.amazonaws.com/www-mysite-com/favicon.ico
[created] s3-us-west-2.amazonaws.com/www-mysite-com/careers
[updated] s3-us-west-2.amazonaws.com/www-mysite-com/support
[updated] s3-us-west-2.amazonaws.com/www-mysite-com/mysite-mark-5-12.svg
[updated] s3-us-west-2.amazonaws.com/www-mysite-com/404.html
[updated] s3-us-west-2.amazonaws.com/www-mysite-com/index.html

REMOTE & CACHE are READ-ONLY (no changes at all are committed).
Matched files: 6 (381 kB), 100%.
Uploaded files: 6 (376 kB), done.
Deleted remote files: 0 (0 B), done.
1 creation, 5 updates, 0 deletions, 0 skips.
Elapsed time: 2 seconds.
✔ ~/mysite/backend/sites/mysitecom [master ↓·4↑·1|✚ 11…3⚑ 3] 
16:07 $ poosh sync
[created] s3-us-west-2.amazonaws.com/www-mysite-com/careers

Matched files: 6 (381 kB), 100%.
Uploaded files: 1 (0 B), done.
Deleted remote files: 0 (0 B), done.
1 creation, 0 updates, 0 deletions, 5 skips.
Elapsed time: 3 seconds.
✔ ~/mysite/backend/sites/mysitecom [master ↓·4↑·1|✚ 11…3⚑ 3] 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.