title: Upload entire Bitbucket repo to S3 using Bitbucket Pipeline
body: <p>I'm using Bitbuckets Pipeline.  I want it to push the entire contents of my repo (very small) to S3.  I don't want to have to zip it up, push to S3 and then unzip things.  I just want it to take the existing file/folder structure in my Bitbucket repo and push that to S3.</p>
  
  <p>What should the yaml file and .py file look like to accomplish this?  </p>
  
  <p>Here is the current yaml file:</p>
  
  <pre><code>image: python:3.5.1
  
  pipelines:
    branches:
      master:
        - step:
            script:
              # - apt-get update # required to install zip
              # - apt-get install -y zip # required if you want to zip repository objects
              - pip install boto3==1.3.0 # required for s3_upload.py
              # the first argument is the name of the existing S3 bucket to upload the artefact to
              # the second argument is the artefact to be uploaded
              # the third argument is the the bucket key
              # html files
              - python s3_upload.py my-bucket-name html/index_template.html html/index_template.html # run the deployment script
              # Example command line parameters. Replace with your values
              #- python s3_upload.py bb-s3-upload SampleApp_Linux.zip SampleApp_Linux # run the deployment script
  </code></pre>
  
  <p>And here is my current python:</p>
  
  <pre><code>from __future__ import print_function
  import os
  import sys
  import argparse
  import boto3
  from botocore.exceptions import ClientError
  
  def upload_to_s3(bucket, artefact, bucket_key):
      """
      Uploads an artefact to Amazon S3
      """
      try:
          client = boto3.client('s3')
      except ClientError as err:
          print("Failed to create boto3 client.\n" + str(err))
          return False
      try:
          client.put_object(
              Body=open(artefact, 'rb'),
              Bucket=bucket,
              Key=bucket_key
          )
      except ClientError as err:
          print("Failed to upload artefact to S3.\n" + str(err))
          return False
      except IOError as err:
          print("Failed to access artefact in this directory.\n" + str(err))
          return False
      return True
  
  
  def main():
  
      parser = argparse.ArgumentParser()
      parser.add_argument("bucket", help="Name of the existing S3 bucket")
      parser.add_argument("artefact", help="Name of the artefact to be uploaded to S3")
      parser.add_argument("bucket_key", help="Name of the S3 Bucket key")
      args = parser.parse_args()
  
      if not upload_to_s3(args.bucket, args.artefact, args.bucket_key):
          sys.exit(1)
  
  if __name__ == "__main__":
      main()
  </code></pre>
  
  <p>This requires me to list every single file in the repo in the yaml file as another command.  I just want it to grab everything and upload it to S3.</p>