2.0.533 • Published 8 months ago

cdk-databrew-cicd v2.0.533

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
8 months ago

cdk-databrew-cicd

This construct creates a CodePipeline pipeline where users can push a DataBrew recipe into the CodeCommit repository and the recipe will be pushed to a pre-production AWS account and a production AWS account by order automatically.

npm (JS/TS)PyPI (Python)Maven (Java)GoNuGet
LinkLinkLinkLinkLink

License Release npm downloads pypi downloads NuGet downloads repo languages

Table of Contents

Serverless Architecture

image Romi B. and Gaurav W., 2021

Introduction

The architecture was introduced by Romi Boimer and Gaurav Wadhawan and was posted on the AWS Blog as Set up CI/CD pipelines for AWS Glue DataBrew using AWS Developer Tools.
I converted the architecture into a CDK construct for 5 programming languages. Before applying the AWS construct, make sure you've set up a proper IAM role for the pre-production and production AWS accounts. You could achieve it either by creating manually or creating through a custom construct in this library.

import { IamRole } from 'cdk-databrew-cicd';

new IamRole(this, 'AccountIamRole', {
    environment: 'preproduction', // or 'production'
    accountID: 'ACCOUNT_ID',
    // roleName: 'OPTIONAL'
});

Example

Typescript

You could also refer to here.

$ cdk --init language typescript
$ yarn add cdk-databrew-cicd
import * as cdk from '@aws-cdk/core';
import { DataBrewCodePipeline } from 'cdk-databrew-cicd';

class TypescriptStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const preproductionAccountId = 'PREPRODUCTION_ACCOUNT_ID';
    const productionAccountId = 'PRODUCTION_ACCOUNT_ID';

    const dataBrewPipeline = new DataBrewCodePipeline(this, 'DataBrewCicdPipeline', {
      preproductionIamRoleArn: `arn:${cdk.Aws.PARTITION}:iam::${preproductionAccountId}:role/preproduction-Databrew-Cicd-Role`,
      productionIamRoleArn: `arn:${cdk.Aws.PARTITION}:iam::${productionAccountId}:role/production-Databrew-Cicd-Role`,
      // bucketName: 'OPTIONAL',
      // repoName: 'OPTIONAL',
      // branchName: 'OPTIONAL',
      // pipelineName: 'OPTIONAL'
    });

    new cdk.CfnOutput(this, 'OPreproductionLambdaArn', { value: dataBrewPipeline.preproductionFunctionArn });
    new cdk.CfnOutput(this, 'OProductionLambdaArn', { value: dataBrewPipeline.productionFunctionArn });
    new cdk.CfnOutput(this, 'OCodeCommitRepoArn', { value: dataBrewPipeline.codeCommitRepoArn });
    new cdk.CfnOutput(this, 'OCodePipelineArn', { value: dataBrewPipeline.codePipelineArn });
  }
}

const app = new cdk.App();
new TypescriptStack(app, 'TypescriptStack', {
  stackName: 'DataBrew-CICD'
});

Python

You could also refer to here.

# upgrading related Python packages
$ python -m ensurepip --upgrade
$ python -m pip install --upgrade pip
$ python -m pip install --upgrade virtualenv
# initialize a CDK Python project
$ cdk init --language python
# make packages installed locally instead of globally
$ source .venv/bin/activate
$ cat <<EOL > requirements.txt
aws-cdk.core
cdk-databrew-cicd
EOL
$ python -m pip install -r requirements.txt
from aws_cdk import core as cdk
from cdk_databrew_cicd import DataBrewCodePipeline

class PythonStack(cdk.Stack):

    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        preproduction_account_id = "PREPRODUCTION_ACCOUNT_ID"
        production_account_id = "PRODUCTION_ACCOUNT_ID"

        databrew_pipeline = DataBrewCodePipeline(self,
        "DataBrewCicdPipeline",
        preproduction_iam_role_arn=f"arn:{cdk.Aws.PARTITION}:iam::{preproduction_account_id}:role/preproduction-Databrew-Cicd-Role",
        production_iam_role_arn=f"arn:{cdk.Aws.PARTITION}:iam::{production_account_id}:role/preproduction-Databrew-Cicd-Role",
            # bucket_name="OPTIONAL",
            # repo_name="OPTIONAL",
            # repo_name="OPTIONAL",
            # branch_namne="OPTIONAL",
            # pipeline_name="OPTIONAL"
            )

        cdk.CfnOutput(self, 'OPreproductionLambdaArn', value=databrew_pipeline.preproduction_function_arn)
        cdk.CfnOutput(self, 'OProductionLambdaArn', value=databrew_pipeline.production_function_arn)
        cdk.CfnOutput(self, 'OCodeCommitRepoArn', value=databrew_pipeline.code_commit_repo_arn)
        cdk.CfnOutput(self, 'OCodePipelineArn', value=databrew_pipeline.code_pipeline_arn)
$ deactivate

Java

You could also refer to here.

$ cdk init --language java
$ mvn package
.
.
<properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <cdk.version>2.87.0</cdk.version>
      <constrcut.verion>2.0.196</constrcut.verion>
      <junit.version>5.7.1</junit.version>
</properties>
 .
 .
 <dependencies>
     <!-- AWS Cloud Development Kit -->
      <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>aws-cdk-lib</artifactId>
            <version>${cdk.version}</version>
      </dependency>
      <dependency>
        <groupId>io.github.hsiehshujeng</groupId>
        <artifactId>cdk-databrew-cicd</artifactId>
        <version>${constrcut.verion}</version>
        </dependency>
     .
     .
     .
 </dependencies>
package com.myorg;

import software.amazon.awscdk.core.CfnOutput;
import software.amazon.awscdk.core.CfnOutputProps;
import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.StackProps;
import io.github.hsiehshujeng.cdk.databrew.cicd.DataBrewCodePipeline;
import io.github.hsiehshujeng.cdk.databrew.cicd.DataBrewCodePipelineProps;

public class JavaStack extends Stack {
    public JavaStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public JavaStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);
        String preproductionAccountId = "PREPRODUCTION_ACCOUNT_ID";
        String productionAccountId = "PRODUCTION_ACCOUNT_ID";
        DataBrewCodePipeline databrewPipeline = new DataBrewCodePipeline(this, "DataBrewCicdPipeline",
                DataBrewCodePipelineProps.builder().preproductionIamRoleArn(preproductionAccountId)
                        .productionIamRoleArn(productionAccountId)
                        // .bucketName("OPTIONAL")
                        // .branchName("OPTIONAL")
                        // .pipelineName("OPTIONAL")
                        .build());

        new CfnOutput(this, "OPreproductionLambdaArn",
                CfnOutputProps.builder()
                    .value(databrewPipeline.getPreproductionFunctionArn())
                    .build());
        new CfnOutput(this, "OProductionLambdaArn",
                CfnOutputProps.builder()
                    .value(databrewPipeline.getProductionFunctionArn())
                    .build());
        new CfnOutput(this, "OCodeCommitRepoArn",
                CfnOutputProps.builder()
                    .value(databrewPipeline.getCodeCommitRepoArn())
                    .build());
        new CfnOutput(this, "OCodePipelineArn",
                CfnOutputProps.builder()
                    .value(databrewPipeline.getCodePipelineArn())
                    .build());
    }
}

C

You could also refer to here.

$ cdk init --language csharp
$ dotnet add src/Csharp package Databrew.Cicd --version 2.0.196
using Amazon.CDK;
using ScottHsieh.Cdk;

namespace Csharp
{
    public class CsharpStack : Stack
    {
        internal CsharpStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var preproductionAccountId = "PREPRODUCTION_ACCOUNT_ID";
            var productionAccountId = "PRODUCTION_ACCOUNT_ID";

            var dataBrewPipeline = new DataBrewCodePipeline(this, "DataBrewCicdPipeline", new DataBrewCodePipelineProps
            {
                PreproductionIamRoleArn = $"arn:{Aws.PARTITION}:iam::{preproductionAccountId}:role/preproduction-Databrew-Cicd-Role",
                ProductionIamRoleArn = $"arn:{Aws.PARTITION}:iam::{productionAccountId}:role/preproduction-Databrew-Cicd-Role",
                // BucketName = "OPTIONAL",
                // RepoName = "OPTIONAL",
                // BranchName = "OPTIONAL",
                // PipelineName = "OPTIONAL"
            });
            new CfnOutput(this, "OPreproductionLambdaArn", new CfnOutputProps
            {
                Value = dataBrewPipeline.PreproductionFunctionArn
            });
            new CfnOutput(this, "OProductionLambdaArn", new CfnOutputProps
            {
                Value = dataBrewPipeline.ProductionFunctionArn
            });
            new CfnOutput(this, "OCodeCommitRepoArn", new CfnOutputProps
            {
                Value = dataBrewPipeline.CodeCommitRepoArn
            });
            new CfnOutput(this, "OCodePipelineArn", new CfnOutputProps
            {
                Value = dataBrewPipeline.CodeCommitRepoArn
            });
        }
    }
}

Go

You could also refer to here.

# Initialize a new AWS CDK application in the current directory with the Go programming language
cdk init app -l go
# Add this custom CDK construct to your project
go get github.com/HsiehShuJeng/cdk-databrew-cicd-go/cdkdatabrewcicd/v2@v2.0.196
# Ensure all dependencies are properly listed in the go.mod file and remove any unused ones
go mod tidy
# Upgrade all Go modules in your project to their latest minor or patch versions
go get -u ./...
package main

import (
	"fmt"

	"github.com/aws/aws-cdk-go/awscdk/v2"

	// "github.com/aws/aws-cdk-go/awscdk/v2/awssqs"
	"github.com/HsiehShuJeng/cdk-databrew-cicd-go/cdkdatabrewcicd/v2"
	"github.com/aws/constructs-go/constructs/v10"
	"github.com/aws/jsii-runtime-go"
)

type GoLangStackProps struct {
	awscdk.StackProps
}

func NewGoLangStack(scope constructs.Construct, id string, props *GoLangStackProps) awscdk.Stack {
	var sprops awscdk.StackProps
	if props != nil {
		sprops = props.StackProps
	}
	stack := awscdk.NewStack(scope, &id, &sprops)

	preproductionAccountId := "PREPRODUCTION_ACCOUNT_ID"
	productionAccountId := "PRODUCTION_ACCOUNT_ID"

	dataBrewPipeline := cdkdatabrewcicd.NewDataBrewCodePipeline(stack, jsii.String("DataBrewCicdPipeline"), &cdkdatabrewcicd.DataBrewCodePipelineProps{
		PreproductionIamRoleArn: jsii.String(fmt.Sprintf("arn:%s:iam::%s:role/preproduction-Databrew-Cicd-Role", *awscdk.Aws_PARTITION(), preproductionAccountId)),
		ProductionIamRoleArn:    jsii.String(fmt.Sprintf("arn:%s:iam::%s:role/production-Databrew-Cicd-Role", *awscdk.Aws_PARTITION(), productionAccountId)),
		// BucketName:   jsii.String("OPTIONAL"),
		// RepoName:     jsii.String("OPTIONAL"),
		// BranchName:   jsii.String("OPTIONAL"),
		// PipelineName: jsii.String("OPTIONAL"),
	})

	awscdk.NewCfnOutput(stack, jsii.String("OPreproductionLambdaArn"), &awscdk.CfnOutputProps{Value: dataBrewPipeline.PreproductionFunctionArn()})
	awscdk.NewCfnOutput(stack, jsii.String("OProductionLambdaArn"), &awscdk.CfnOutputProps{Value: dataBrewPipeline.ProductionFunctionArn()})
	awscdk.NewCfnOutput(stack, jsii.String("OCodeCommitRepoArn"), &awscdk.CfnOutputProps{Value: dataBrewPipeline.CodeCommitRepoArn()})
	awscdk.NewCfnOutput(stack, jsii.String("OCodePipelineArn"), &awscdk.CfnOutputProps{Value: dataBrewPipeline.CodePipelineArn()})

	return stack
}

func main() {
	defer jsii.Close()

	app := awscdk.NewApp(nil)

	NewGoLangStack(app, "GoLangStack", &GoLangStackProps{
		awscdk.StackProps{
			Env: env(),
		},
	})

	app.Synth(nil)
}

func env() *awscdk.Environment {
	return nil
}

Some Efforts after Stack Creation

CodeCommit

  1. Create HTTPS Git credentials for AWS CodeCommit with an IAM user that you're going to use.
    image
  2. Run through the steps noted on the README.md of the CodeCommit repository after finishing establishing the stack via CDK. The returned message with success should be looked like the following (assume you have installed git-remote-codecommit):
    $ git clone codecommit://scott.codecommit@DataBrew-Recipes-Repo
    Cloning into 'DataBrew-Recipes-Repo'...
    remote: Counting objects: 6, done.
    Unpacking objects: 100% (6/6), 2.03 KiB | 138.00 KiB/s, done.
  3. Add a DataBrew recipe into the local repositroy (directory) and commit the change. (either directly on the main branch or merging another branch into the main branch)

Glue DataBrew

  1. Download any recipe either generated out by following Getting started with AWS Glue DataBrew or made by yourself as JSON file.
    image
  2. Move the recipe from the download directory to the local directory for the CodeCommit repository.
    $ mv ${DOWNLOAD_DIRECTORY}/chess-project-recipe.json ${CODECOMMIT_LOCAL_DIRECTORY}/
  3. Commit the change to a branch with a name you prefer.
    $ cd ${{CODECOMMIT_LOCAL_DIRECTORY}}
    $ git checkout -b add-recipe main
    $ git add .
    $ git commit -m "first recipe"
    $ git push --set-upstream origin add-recipe
  4. Merge the branch into the main branch. Just go to the AWS CodeCommit web console to do the merge as its process is purely the same as you've already done thousands of times on Github but only with different UIs.

How Successful Commits Look Like

  1. In the infrastructure account, the status of the CodePipeline DataBrew pipeline should be similar as the following:
    image
  2. In the pre-production account with the same region as where the CICD pipeline is deployed at the infrastructue account, you'll see this.
    image
  3. In the production account with the same region as where the CICD pipeline is deployed at the infrastructue account, you'll see this.
    image
2.0.529

8 months ago

2.0.528

8 months ago

2.0.533

8 months ago

2.0.532

8 months ago

2.0.531

8 months ago

2.0.530

8 months ago

2.0.527

8 months ago

2.0.526

8 months ago

2.0.525

8 months ago

2.0.524

8 months ago

2.0.523

8 months ago

2.0.522

8 months ago

2.0.515

8 months ago

2.0.514

8 months ago

2.0.519

8 months ago

2.0.518

8 months ago

2.0.517

8 months ago

2.0.516

8 months ago

2.0.521

8 months ago

2.0.520

8 months ago

2.0.509

9 months ago

2.0.513

9 months ago

2.0.512

9 months ago

2.0.511

9 months ago

2.0.510

9 months ago

2.0.508

9 months ago

2.0.507

9 months ago

2.0.506

9 months ago

2.0.505

9 months ago

2.0.504

9 months ago

2.0.503

9 months ago

2.0.502

9 months ago

2.0.501

9 months ago

2.0.500

9 months ago

2.0.499

9 months ago

2.0.498

9 months ago

2.0.497

9 months ago

2.0.496

9 months ago

2.0.495

9 months ago

2.0.494

9 months ago

2.0.493

9 months ago

2.0.492

9 months ago

2.0.491

9 months ago

2.0.490

9 months ago

2.0.489

9 months ago

2.0.488

9 months ago

2.0.487

9 months ago

2.0.486

9 months ago

2.0.485

10 months ago

2.0.484

10 months ago

2.0.483

10 months ago

2.0.482

10 months ago

2.0.479

10 months ago

2.0.478

10 months ago

2.0.477

10 months ago

2.0.476

10 months ago

2.0.475

10 months ago

2.0.481

10 months ago

2.0.480

10 months ago

2.0.474

10 months ago

2.0.473

10 months ago

2.0.472

10 months ago

2.0.471

10 months ago

2.0.470

10 months ago

2.0.469

10 months ago

2.0.468

10 months ago

2.0.467

10 months ago

2.0.466

10 months ago

2.0.465

10 months ago

2.0.464

10 months ago

2.0.459

10 months ago

2.0.458

11 months ago

2.0.457

11 months ago

2.0.463

10 months ago

2.0.462

10 months ago

2.0.461

10 months ago

2.0.460

10 months ago

2.0.456

11 months ago

2.0.455

11 months ago

2.0.454

11 months ago

2.0.453

11 months ago

2.0.452

11 months ago

2.0.451

11 months ago

2.0.450

11 months ago

2.0.449

11 months ago

2.0.448

11 months ago

2.0.447

11 months ago

2.0.446

11 months ago

2.0.445

11 months ago

2.0.444

11 months ago

2.0.443

11 months ago

2.0.442

11 months ago

2.0.441

11 months ago

2.0.440

11 months ago

2.0.438

11 months ago

2.0.437

11 months ago

2.0.439

11 months ago

2.0.436

11 months ago

2.0.435

11 months ago

2.0.434

11 months ago

2.0.433

11 months ago

2.0.432

11 months ago

2.0.431

11 months ago

2.0.427

12 months ago

2.0.426

12 months ago

2.0.429

11 months ago

2.0.428

12 months ago

2.0.430

11 months ago

2.0.425

12 months ago

2.0.424

12 months ago

2.0.423

12 months ago

2.0.422

12 months ago

2.0.421

12 months ago

2.0.420

12 months ago

2.0.416

12 months ago

2.0.415

12 months ago

2.0.414

12 months ago

2.0.413

12 months ago

2.0.419

12 months ago

2.0.418

12 months ago

2.0.417

12 months ago

2.0.412

1 year ago

2.0.411

1 year ago

2.0.409

1 year ago

2.0.408

1 year ago

2.0.407

1 year ago

2.0.406

1 year ago

2.0.410

1 year ago

2.0.405

1 year ago

2.0.404

1 year ago

2.0.403

1 year ago

2.0.402

1 year ago

2.0.401

1 year ago

2.0.400

1 year ago

2.0.399

1 year ago

2.0.398

1 year ago

2.0.397

1 year ago

2.0.396

1 year ago

2.0.395

1 year ago

2.0.394

1 year ago

2.0.393

1 year ago

2.0.392

1 year ago

2.0.391

1 year ago

2.0.390

1 year ago

2.0.389

1 year ago

2.0.388

1 year ago

2.0.387

1 year ago

2.0.386

1 year ago

2.0.385

1 year ago

2.0.379

1 year ago

2.0.378

1 year ago

2.0.377

1 year ago

2.0.384

1 year ago

2.0.383

1 year ago

2.0.382

1 year ago

2.0.381

1 year ago

2.0.380

1 year ago

2.0.376

1 year ago

2.0.375

1 year ago

2.0.374

1 year ago

2.0.373

1 year ago

2.0.372

1 year ago

2.0.371

1 year ago

2.0.370

1 year ago

2.0.369

1 year ago

2.0.368

1 year ago

2.0.367

1 year ago

2.0.366

1 year ago

2.0.365

1 year ago

2.0.364

1 year ago

2.0.363

1 year ago

2.0.362

1 year ago

2.0.361

1 year ago

2.0.360

1 year ago

2.0.359

1 year ago

2.0.358

1 year ago

2.0.357

1 year ago

2.0.356

1 year ago

2.0.355

1 year ago

2.0.354

1 year ago

2.0.353

1 year ago

2.0.352

1 year ago

2.0.351

1 year ago

2.0.350

1 year ago

2.0.349

1 year ago

2.0.348

1 year ago

2.0.347

1 year ago

2.0.346

1 year ago

2.0.345

1 year ago

2.0.344

1 year ago

2.0.339

1 year ago

2.0.338

1 year ago

2.0.337

1 year ago

2.0.343

1 year ago

2.0.342

1 year ago

2.0.341

1 year ago

2.0.340

1 year ago

2.0.336

1 year ago

2.0.335

1 year ago

2.0.334

1 year ago

2.0.333

1 year ago

2.0.332

1 year ago

2.0.329

1 year ago

2.0.331

1 year ago

2.0.330

1 year ago

2.0.328

1 year ago

2.0.327

1 year ago

2.0.326

1 year ago

2.0.325

1 year ago

2.0.317

1 year ago

2.0.316

1 year ago

2.0.315

1 year ago

2.0.314

1 year ago

2.0.313

1 year ago

2.0.319

1 year ago

2.0.318

1 year ago

2.0.324

1 year ago

2.0.323

1 year ago

2.0.322

1 year ago

2.0.321

1 year ago

2.0.320

1 year ago

2.0.312

1 year ago

2.0.311

1 year ago

2.0.309

1 year ago

2.0.308

1 year ago

2.0.310

1 year ago

2.0.307

1 year ago

2.0.306

1 year ago

2.0.305

1 year ago

2.0.304

1 year ago

2.0.303

1 year ago

2.0.302

1 year ago

2.0.301

1 year ago

2.0.300

1 year ago

2.0.299

1 year ago

2.0.298

1 year ago

2.0.297

1 year ago

2.0.296

1 year ago

2.0.295

2 years ago

2.0.294

2 years ago

2.0.293

2 years ago

2.0.292

2 years ago

2.0.291

2 years ago

2.0.290

2 years ago

2.0.279

2 years ago

2.0.278

2 years ago

2.0.277

2 years ago

2.0.276

2 years ago

2.0.275

2 years ago

2.0.274

2 years ago

2.0.273

2 years ago

2.0.272

2 years ago

2.0.271

2 years ago

2.0.270

2 years ago

2.0.289

2 years ago

2.0.288

2 years ago

2.0.287

2 years ago

2.0.286

2 years ago

2.0.285

2 years ago

2.0.284

2 years ago

2.0.282

2 years ago

2.0.281

2 years ago

2.0.280

2 years ago

2.0.259

2 years ago

2.0.258

2 years ago

2.0.257

2 years ago

2.0.256

2 years ago

2.0.255

2 years ago

2.0.254

2 years ago

2.0.253

2 years ago

2.0.252

2 years ago

2.0.251

2 years ago

2.0.250

2 years ago

2.0.269

2 years ago

2.0.268

2 years ago

2.0.267

2 years ago

2.0.266

2 years ago

2.0.265

2 years ago

2.0.264

2 years ago

2.0.263

2 years ago

2.0.262

2 years ago

2.0.261

2 years ago

2.0.260

2 years ago

2.0.239

2 years ago

2.0.238

2 years ago

2.0.237

2 years ago

2.0.236

2 years ago

2.0.235

2 years ago

2.0.234

2 years ago

2.0.233

2 years ago

2.0.232

2 years ago

2.0.231

2 years ago

2.0.230

2 years ago

2.0.249

2 years ago

2.0.248

2 years ago

2.0.247

2 years ago

2.0.246

2 years ago

2.0.245

2 years ago

2.0.244

2 years ago

2.0.243

2 years ago

2.0.242

2 years ago

2.0.241

2 years ago

2.0.240

2 years ago

2.0.209

2 years ago

2.0.208

2 years ago

2.0.218

2 years ago

2.0.217

2 years ago

2.0.216

2 years ago

2.0.215

2 years ago

2.0.214

2 years ago

2.0.213

2 years ago

2.0.212

2 years ago

2.0.211

2 years ago

2.0.210

2 years ago

2.0.219

2 years ago

2.0.229

2 years ago

2.0.228

2 years ago

2.0.227

2 years ago

2.0.226

2 years ago

2.0.225

2 years ago

2.0.224

2 years ago

2.0.223

2 years ago

2.0.222

2 years ago

2.0.221

2 years ago

2.0.220

2 years ago

2.0.207

2 years ago

2.0.206

2 years ago

2.0.205

2 years ago

2.0.204

2 years ago

2.0.203

2 years ago

2.0.202

2 years ago

2.0.201

2 years ago

2.0.199

2 years ago

2.0.198

2 years ago

2.0.197

2 years ago

2.0.196

2 years ago

2.0.195

2 years ago

2.0.200

2 years ago

2.0.191

2 years ago

2.0.194

2 years ago

2.0.193

2 years ago

2.0.192

2 years ago

2.0.190

2 years ago

2.0.189

2 years ago

2.0.188

2 years ago

2.0.187

2 years ago

2.0.179

2 years ago

2.0.178

2 years ago

2.0.177

2 years ago

2.0.176

2 years ago

2.0.175

2 years ago

2.0.174

2 years ago

2.0.173

2 years ago

2.0.180

2 years ago

2.0.186

2 years ago

2.0.185

2 years ago

2.0.184

2 years ago

2.0.183

2 years ago

2.0.182

2 years ago

2.0.181

2 years ago

2.0.172

2 years ago

2.0.171

2 years ago

2.0.170

2 years ago

2.0.159

2 years ago

2.0.158

2 years ago

2.0.157

2 years ago

2.0.156

2 years ago

2.0.155

2 years ago

2.0.154

2 years ago

2.0.153

2 years ago

2.0.152

2 years ago

2.0.151

2 years ago

2.0.150

2 years ago

2.0.169

2 years ago

2.0.168

2 years ago

2.0.167

2 years ago

2.0.166

2 years ago

2.0.165

2 years ago

2.0.164

2 years ago

2.0.163

2 years ago

2.0.162

2 years ago

2.0.161

2 years ago

2.0.160

2 years ago

2.0.149

2 years ago

2.0.148

2 years ago

2.0.147

2 years ago

2.0.139

3 years ago

2.0.138

3 years ago

2.0.137

3 years ago

2.0.136

3 years ago

2.0.135

3 years ago

2.0.134

3 years ago

2.0.133

3 years ago

2.0.132

3 years ago

2.0.131

3 years ago

2.0.130

3 years ago

2.0.146

2 years ago

2.0.145

2 years ago

2.0.144

2 years ago

2.0.143

2 years ago

2.0.142

2 years ago

2.0.141

2 years ago

2.0.140

3 years ago

2.0.128

3 years ago

2.0.127

3 years ago

2.0.126

3 years ago

2.0.125

3 years ago

2.0.124

3 years ago

2.0.123

3 years ago

2.0.122

3 years ago

2.0.121

3 years ago

2.0.109

3 years ago

2.0.119

3 years ago

2.0.118

3 years ago

2.0.117

3 years ago

2.0.116

3 years ago

2.0.115

3 years ago

2.0.114

3 years ago

2.0.113

3 years ago

2.0.112

3 years ago

2.0.111

3 years ago

2.0.110

3 years ago

2.0.120

3 years ago

2.0.108

3 years ago

2.0.107

3 years ago

2.0.106

3 years ago

2.0.105

3 years ago

2.0.104

3 years ago

2.0.88

3 years ago

2.0.103

3 years ago

2.0.89

3 years ago

2.0.102

3 years ago

2.0.86

3 years ago

2.0.101

3 years ago

2.0.87

3 years ago

2.0.100

3 years ago

2.0.84

3 years ago

2.0.85

3 years ago

2.0.83

3 years ago

2.0.99

3 years ago

2.0.97

3 years ago

2.0.98

3 years ago

2.0.95

3 years ago

2.0.96

3 years ago

2.0.93

3 years ago

2.0.94

3 years ago

2.0.91

3 years ago

2.0.92

3 years ago

2.0.90

3 years ago

2.0.28

3 years ago

2.0.29

3 years ago

2.0.37

3 years ago

2.0.38

3 years ago

2.0.35

3 years ago

2.0.36

3 years ago

2.0.33

3 years ago

2.0.34

3 years ago

2.0.31

3 years ago

2.0.9

3 years ago

2.0.32

3 years ago

2.0.8

3 years ago

2.0.30

3 years ago

2.0.39

3 years ago

2.0.48

3 years ago

2.0.49

3 years ago

2.0.46

3 years ago

2.0.47

3 years ago

2.0.44

3 years ago

2.0.45

3 years ago

2.0.42

3 years ago

2.0.43

3 years ago

2.0.40

3 years ago

2.0.41

3 years ago

2.0.59

3 years ago

2.0.57

3 years ago

2.0.58

3 years ago

2.0.55

3 years ago

2.0.56

3 years ago

2.0.53

3 years ago

2.0.54

3 years ago

2.0.51

3 years ago

2.0.52

3 years ago

2.0.50

3 years ago

2.0.68

3 years ago

2.0.69

3 years ago

2.0.66

3 years ago

2.0.67

3 years ago

2.0.64

3 years ago

2.0.65

3 years ago

2.0.62

3 years ago

2.0.63

3 years ago

2.0.60

3 years ago

2.0.61

3 years ago

2.0.79

3 years ago

2.0.77

3 years ago

2.0.78

3 years ago

2.0.75

3 years ago

2.0.76

3 years ago

2.0.73

3 years ago

2.0.74

3 years ago

2.0.71

3 years ago

2.0.72

3 years ago

2.0.70

3 years ago

2.0.82

3 years ago

2.0.80

3 years ago

2.0.81

3 years ago

2.0.15

3 years ago

2.0.16

3 years ago

2.0.13

3 years ago

2.0.14

3 years ago

2.0.11

3 years ago

2.0.12

3 years ago

2.0.10

3 years ago

2.0.19

3 years ago

2.0.17

3 years ago

2.0.18

3 years ago

2.0.26

3 years ago

2.0.27

3 years ago

2.0.24

3 years ago

2.0.25

3 years ago

2.0.22

3 years ago

2.0.23

3 years ago

2.0.20

3 years ago

2.0.21

3 years ago

2.0.3

3 years ago

2.0.2

3 years ago

2.0.5

3 years ago

2.0.4

3 years ago

2.0.7

3 years ago

2.0.6

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

0.1.39

3 years ago

0.1.37

4 years ago

0.1.38

4 years ago

0.1.36

4 years ago

0.1.35

4 years ago

0.1.34

4 years ago

0.1.32

4 years ago

0.1.33

4 years ago

0.1.31

4 years ago

0.1.30

4 years ago

0.1.29

4 years ago

0.1.27

4 years ago

0.1.28

4 years ago

0.1.26

4 years ago

0.1.25

4 years ago

0.1.22

4 years ago

0.1.23

4 years ago

0.1.24

4 years ago

0.1.21

4 years ago

0.1.14

4 years ago

0.1.15

4 years ago

0.1.13

4 years ago

0.1.12

4 years ago

0.1.11

4 years ago

0.1.10

4 years ago

0.1.9

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago