2

I'm doing a implementation, and I need to fork a git repository into a codecommit repository using lambda and javascript. Create or update a file in the repository I can do. What I need to know to fork a github repository (or a codecommit repository) for another repository inside codecommit?

I am showing the full code, because it is needed to undestand what I already do.

'use strict';
var AWS = require("aws-sdk");
var codecommit = new AWS.CodeCommit({ apiVersion: '2015-04-13' });

exports.handler = (event, context, callback) => {
    event.Records.forEach((record) => {
        console.log('Stream record: ', JSON.stringify(record, null, 2));

        if (record.eventName == 'INSERT') {
            var name    = JSON.stringify(record.dynamodb.NewImage.name.S).replace(/[^a-z0-9áéíóúñü \.,_-]/gim,"");
            var version = JSON.stringify(record.dynamodb.NewImage.version.S);
            var data    = JSON.stringify(record.dynamodb.NewImage.data.S);
            var params  = { repositoryName: name };

            codecommit.getRepository(params, function(err, response) {
                if (err) {
                    console.log(err, err.stack);
                    if(err.code == 'RepositoryDoesNotExistException') {
                        params.repositoryDescription='Repository ' + name;
                        codecommit.createRepository(params, function(err, response) {
                            if (err) {
                                console.log(err, err.stack);
                            } else {
                                console.log(response);
                                prepareCommit(name,version, data);
                            }
                        });
                    }
                } else {
                    console.log('response repository: ', response);
                    prepareCommit(name, version, data);
                }
            });
        }
    });
    callback(null, `Successfully processed ${event.Records.length} records.`);
};

function prepareCommit(name, version, data) {
    var params = {
        branchName: 'master',
        repositoryName: name
    };

    codecommit.getBranch(params, function(err, response) {
        if (err) {
            console.log(err);
            if (err.code='BranchDoesNotExistException') {
              doCommit(name, version, '' + data, '');
            }
        } else {
            console.log('response branch: ', response);
            doCommit(name, version, '' + data, '' + response.branch.commitId);
        }
    });
}

function doCommit(name, version, data, parentCommitId) {
    var params = {
        branchName: 'master',
        fileContent: Buffer.from(JSON.parse(data)) || '',
        filePath: 'data/structure.json',
        repositoryName: name,
        commitMessage: 'generated by lambda stream ' + version,
        email: '<email here>',
        fileMode: 'NORMAL',
        name: '<name here>'
    };

    if (parentCommitId != '') {
        params.parentCommitId = parentCommitId;
    }

    codecommit.putFile(params, function(err, response) {
        if (err) {
            console.log(err, err.stack);
        } else {
            console.log(response);
        }
    });
}

This code receive a data from STREAM/DynamoDB and check if the repository exist, if not, a new is created and put a json file structure.json inside data/ folder.

I need fork a github or a codecommit repository on create inside a new repository.

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278

0 Answers0