All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.carousell.aws.UploadExtraData Maven / Gradle / Ivy

package io.github.carousell.aws;

import com.amazonaws.services.devicefarm.model.AWSDeviceFarmException;
import com.amazonaws.services.devicefarm.model.UploadType;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.UpdateItemRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** Mojo for uploading extra data to AWS Device Farm */
@Mojo(name = "uploadExtraData")
public class UploadExtraData extends AbstractMojo {

  private static final Logger LOG = LoggerFactory.getLogger(UploadExtraData.class);

  @Parameter(defaultValue = "${project}", readonly = true, required = true)
  private MavenProject project;

  @Parameter(required = true)
  private String awsDeviceFarmAccessKey;

  @Parameter(required = true)
  private String awsDeviceFarmSecretKey;
  
  @Parameter(required = true)
  private String awsDynamoAccessKey;

  @Parameter(required = true)
  private String awsDynamoSecretKey;

  @Parameter(defaultValue = "us-east-1")
  private String awsRegion;

  @Parameter(required = true)
  private String projectArn;

  @Parameter(required = false)
  private String extraData;
  
  @Parameter(required = true)
  private String testPackageName;

  public void execute() throws MojoExecutionException, MojoFailureException {
    try {
      AWSDeviceFarmService awsService = new AWSDeviceFarmService(awsDeviceFarmAccessKey, awsDeviceFarmSecretKey, awsRegion);

      // upload extra data
      LOG.info("Uploading extra data from {}", extraData);
      String extraDataArn = null;
      if (extraData != null && !extraData.isEmpty()) {
        extraDataArn =
            awsService
                .upload(new File(extraData), projectArn, UploadType.EXTERNAL_DATA, true)
                .getArn();
      }

      LOG.info("Setting extraDataArn {} as Maven property", extraDataArn);
      project.getProperties().put("extraDataArn", extraDataArn);
      
      LOG.info("Publishing extraDataArn {} to DynamoDB", extraDataArn);
      updateDynamoValue(testPackageName, extraDataArn);

    } catch (AWSDeviceFarmException | InterruptedException | IOException exception) {
      LOG.error("Error while triggering AWS test", exception);
    }
  }
  
  private void updateDynamoValue(String key, String arn) {
    AWSDynamoService awsDynamoService =
        new AWSDynamoService(awsDynamoAccessKey, awsDynamoSecretKey, awsRegion);
    HashMap keyMap = new HashMap();
    keyMap.put("key", new AttributeValue().withS(key));

    Map expressionAttributeValues = new HashMap();
    expressionAttributeValues.put(":arn", new AttributeValue().withS(arn));

    UpdateItemRequest updateItemRequest =
        new UpdateItemRequest()
            .withTableName("testPackages")
            .withKey(keyMap)
            .withUpdateExpression("set extraDataArn = :arn")
            .withExpressionAttributeValues(expressionAttributeValues);

    awsDynamoService.getAwsDynamo().updateItem(updateItemRequest);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy