Giter Club home page Giter Club logo

aws-ant-task's Introduction

#Simple AWS ANT Task

Features:

  • CloudFront invalidation requests
  • S3 File upload using fileset strategy
  • SimpleDB insert rows [dynamic attributes]
<?xml version="1.0" encoding="utf-8"?>
<project name="MyProjectName" basedir="." default="cdn-invalidation">

    <!-- Other ant tasks -->

    <target name="cdn-invalidation" description="Invalidation of static files">
        <taskdef name="cloudfront" classpath="aws-ant-task.jar" classname="it.corley.ant.CloudFront" />
        <cloudfront key="your-key" secret="your-secret-key" distributionId="your-distribution-id">
            <delete path="/js/folder/my-path.js"/>
            <delete path="/css/folder/my-path.css"/>
            <delete path="/direct-gen.txt"/>
        </cloudfront>
    </target>

    <!-- Or you can also use one string -->

    <target name="cdn-invalidation-through-list" description="Invalidation of static files">
        <taskdef name="cloudfront" classpath="aws-ant-task.jar" classname="it.corley.ant.CloudFront" />
        <cloudfront key="your-key" secret="your-secret-key" distributionId="your-distribution-id"
                    pathsString="/js/folder/my-path.js,/css/folder/my-path.css,/direct-gen.txt" />
    </target>

</project>

Simple S3 Task

Added a very simple S3 task that enable files upload

<taskdef name="s3" classpath="aws-ant-task.jar" classname="it.corley.ant.S3PutTask" />
<s3 endpoint="s3-eu-west-1.amazonaws.com" key="your-key" secret="your-secret" bucket="your-bucket-name" dest="path/to/file">
    <fileset dir="my/dir" includes="**/*.html" />
</s3>

File upload using default Ant fileset strategy.

<taskdef name="s3put" classpath="aws-ant-task.jar" classname="it.corley.ant.S3PutTask" />
<s3put endpoint="s3-eu-west-1.amazonaws.com" key="your-key" secret="your-secret" bucket="your-bucket-name" dest="path/to/file">
  <fileset dir="${public.src}" casesensitive="yes">
    <patternset id="non.test.sources">
      <include name="**/*.js"/>
      <exclude name="**/*Test*"/>
    </patternset>
  </fileset>
</s3put>

Mark public files using publicRead

Consider that public property (Grant Everyone open/doownload) is marked on each file scanned by fileset directive. Your bucket rule is never touched.

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    publicRead="true">
    <!-- fileset structure -->
</s3put>

Easily configure content types using contentType property or ContentTypeMapping type

Global Content-Type configuration:

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <!-- fileset structure -->
</s3put>

Content-Type mappers:

<typedef name="contenttypemapping" classname="it.corley.ant.ContentTypeMapping" classpathref="tasks.path"/>
<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <fileset dir="dist" include="**/*"/>
    <contenttypemapping extension=".crx" contenttype="application/x-chrome-extension"/>
    <contenttypemapping extension=".xpi" contenttype="application/x-xpinstall"/>
</s3put>

Note then when setting global content-type using contentType property of the s3put task and setting mapping using contenttype.mapping, the mapping takes precedence if given.

Easily configure cache control using cacheControl property

Global Cache-Control configuration:

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever"
    cacheControl="max-age=3600">
    <!-- fileset structure -->
</s3put>

Cache-Control mappers:

<typedef name="cachecontrol.mapping" classname="it.corley.ant.CacheControlMapping" classpathref="tasks.path"/>
<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <fileset dir="dist" include="**/*"/>
    <contenttypemapping extension=".crx" contenttype="application/x-chrome-extension"/>
    <contenttypemapping extension=".xpi" contenttype="application/x-xpinstall"/>
    <cachecontrolmapping extension=".js" maxage="14400"/>
    <cachecontrolmapping extension=".css" maxage="86400"/>
</s3put>

Easily configure content encoding using contentEncoding property

Global Content-Encoding configuration:

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever"
    contentEncoding="UTF-8">
    <!-- fileset structure -->
</s3put>

Content-Encoding mappers:

<typedef name="contentencoding.mapping" classname="it.corley.ant.ContentEncodingMapping" classpathref="tasks.path"/>
<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <fileset dir="dist" include="**/*"/>
    <contenttypemapping extension=".crx" contenttype="application/x-chrome-extension"/>
    <contenttypemapping extension=".xpi" contenttype="application/x-xpinstall"/>
    <cachecontrolmapping extension=".js" maxage="14400"/>
    <cachecontrolmapping extension=".css" maxage="86400"/>
    <contentencoding extension=".js" encoding="gzip"/>
    <contentencoding extension=".css" encoding="gzip"/>
</s3put>

Easily download a file from S3

<taskdef name="s3get" classpath="aws-ant-task.jar" classname="it.corley.ant.S3GetTask" />
<s3get endpoint="s3-eu-west-1.amazonaws.com"
       key="your-key" secret="your-secret"
       bucket="your-bucket-name" src="path/to/file"
       dest="path/to/file" />

SimpleDB Task

Read attributes from a row in your SimpleDB domain using

<taskdef name="simpledbget" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.SimpleDBGetTask" />
<simpledbget key="your-key" secret="your-secret"
             domain="your-domain" region="your-sdb-region"
             itemName="1234" attributes="my_property,another_property"
             propertyprefix="row" />

<echo message="my_property=${row.my_property}" />
<echo message="another_property=${row.another_property}." />

This task will fail if an unknown item name or attribute is used.

Insert new rows into your SimpleDB domain using

<taskdef name="simpledb" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.SimpleDB" />
<simpledb key="your-key" secret="your-secret" domain="your-domain" region="your-sdb-region">
    <attribute name="my_property" value="my first value" />
    <attribute name="another_property" value="value for this property" />
</simpledb>

You can replace existing rows into your SimpleDB domain using

<taskdef name="simpledb" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.SimpleDB" />
<simpledb key="your-key" secret="your-secret" domain="your-domain" region="your-sdb-region">
    <attribute name="itemName()" value="my first value" />
    <attribute name="another_property" value="new value for this property" />
    <attribute name="yet_another_property" value="new value for this property" append="true" />
</simpledb>

By default the attribute values for the row will be replaced. Add append="true" to your attribute to append the value, instead of overwriting it.

You have to download the latest aws-ant-task.jar binary file and add it into your project. Configure a new task as previous example.

Building and installing

With tests:

cp test.properties.dist test.properties
# Fill the test.properties accordingly
mvn package

or without them:

mvn package -Dmaven.test.skip=true

After properly building the tasks, all the jars needed to use them can be found in target/aws-ant-tasks-0.1-SNAPSHOT-bin directory. Just copy it whenever you like and use external classpath when defining the tasks:

<!-- Task for setting up the aws-ant-tasks -->
<target name="awstasks.setup">
    <path id="tasks.path">
        <fileset dir="target/aws-ant-tasks-0.1-SNAPSHOT-bin" includes="*.jar"/>
    </path>

    <taskdef name="s3put" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.S3PutTask"
             classpathref="tasks.path"/>
    <typedef name="contenttype.mapping" classname="it.corley.ant.ContentTypeMapping" classpathref="tasks.path"/>
</target>


<!--Actual use -->
<target name="use" description="Use the Task" depends="awstasks.setup">

</target>

Or copy them to the $ANT_HOME/libs directory and use directly, without specifying the classpath.

Contributors

This project is maintained by Corley S.r.l. and released under MIT license. A special thanks goes to our contributors! Thanks guys!

https://github.com/corley/aws-ant-task/graphs/contributors

Feel free to contribute to this project with your requests and pull requests!

aws-ant-task's People

Contributors

wdalmut avatar stoiczek avatar elieladelrom avatar arjenvanderende avatar shalupov avatar q42jaap avatar webrat avatar

Watchers

James Cloos avatar  avatar

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.