aboutsummaryrefslogtreecommitdiffstats
path: root/tools/weekly-changelog.js
blob: ad69f37814266aef1c07689efaf1f0b3c7798394 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// script to collect the weekly changelog in a git repo

var testing = false;
var email_to = '';
var email_bcc = 'cbrake@bec-systems.com,';

if (!testing) {
  //email_bcc += 'beagleboard@googlegroups.com';
  email_to += 'openembedded-core@lists.openembedded.org, openembedded-devel@lists.openembedded.org, angstrom-distro-devel@linuxtogo.org, meta-ti@yoctoproject.org';
}

var path = require('path'),
    child_process = require('child_process'),
    fs = require('fs'),
    nodemailer = require('nodemailer'),
    git = require('./git'),
    dateutil = require('./dateutil'),
    config = require('./config').config

String.prototype.format = function() {
    var formatted = this;
    for (var i = 0; i < arguments.length; i++) {
        var regexp = new RegExp('\\{'+i+'\\}', 'gi');
        formatted = formatted.replace(regexp, arguments[i]);
    }
    return formatted;
};

var format_report = function(projects, weekly_data) {
    var ret = ''
    // report header
    ret += "Changelog " + dateutil.last_week_text() + ".  Projects included in this report:\n\n";
    var project;
    for (project in projects) {
      ret += project + ": " + projects[project] + "\n";
    }

    ret += "\n";

    for (project in projects) {
      ret += "====================================================\n";
      ret += "Changelog for " + project + ":\n\n";
      ret += weekly_data[project];
    }
    return ret;
}

var email_report = function(report) {
  console.log("send email ...")
  var transport = nodemailer.createTransport(config.email.transport.type, config.email.transport.options)
  var mailOptions = {
    from: config.email.from,
    to: email_to,
    bcc: email_bcc,
    subject: "OE Changelog " + dateutil.last_week_text(),
    text: report
  }

  transport.sendMail(mailOptions, function(error, response) {
    if (error) {
      console.log("Failed to send email: " + response)
    } else {
      console.log("mail sent: " + response.message)
    }
  })
}

var run_changelog = function(projects) {
  var output = {};
  var count = Object.keys(projects).length;
  var lastwk = dateutil.last_week();
  console.log("start = " + lastwk.start + " end = " + lastwk.end)
  var project;
  for (project in projects) {
    // function required to preserve the value of project
    (function(project) {
      console.log('processing: ' + path.join(__dirname, '../', project));
      var repo_dir = path.join(__dirname, '../', project);
      child_process.exec('cd ' + repo_dir + '; git fetch', function(error, stdout, stderr) {
        git.changelog(repo_dir, lastwk.start, lastwk.end, function(err, changelog) {
          if (err !== null) {
            console.log('changelog error: ' + err);
          } else {
            output[project] = changelog;
            console.log("changelog finished for " + project)
          }
          count--;
          if (count === 0) {
            var r = format_report(projects, output);
            process.chdir(path.join(__dirname, '../'));
            var f = fs.openSync('weekly-changelog', 'w');
            fs.writeSync(f, r);
            fs.closeSync(f);
            email_report(r);
          }
        });
      });
    })(project);
  }
}

git.parse_gitmodules(path.join(__dirname, "../.gitmodules"), function(err, data) {
  if (err) {
    console.log("Error parsing .gitmodules");
  } else {
    run_changelog(data);
  }
});