#!/usr/bin/env node

const slackup = require('slackup');
const fetch = require('node-fetch');

const repo = process.env.TRAVIS_REPO_SLUG;
const commit = process.env.TRAVIS_COMMIT;
const branch = process.env.TRAVIS_BRANCH;
const apiKey = process.env.SLACK_API_KEY;
const channel = process.env.SLACK_CHANNEL;
const githubToken = process.env.GITHUB_API_KEY;
const currentNodeVersion = process.env.TRAVIS_NODE_VERSION;
const regex = /^(node|7)\.*/;

// Skip if not on a zeit repo
if (!/^zeit\//.test(repo)) {
  console.log('not a zeit repo');
  process.exit(0);
}

if (!apiKey) {
  console.log('$SLACKUP_TOKEN not found');
  process.exit(0);
}

if (!channel) {
  console.log('$SLACKUP_CHANNEL not found');
  process.exit(0);
}

if (!githubToken) {
  console.log('$GITHUB_TOKEN not found');
  process.exit(0);
}

const opts = {
  headers: {
    authorization: `token ${githubToken}`
  }
};

fetch(`https://api.github.com/repos/${repo}/commits/${commit}`, opts)
  .then(res => res.json())
  .then(res => ({
    message: res.commit.message,
    authorName: res.commit.author.name,
    authorUrl: res.author.html_url
  }))
  .then(async res => {
    if (regex.test(currentNodeVersion)) {
      const message = `:package: Here are the binaries for the branch *${branch}* of *${repo}* (commit <https://github.com/${repo}/commit/${commit}|${commit.substr(0, 7)}> by <${res.authorUrl}|${res.authorName}>):`;

      const binaries = [
        `${__dirname}/../../packed/now-macos`,
        `${__dirname}/../../packed/now-linux`,
        `${__dirname}/../../packed/now-win.exe`
      ];

      try {
        await slackup({ apiKey, channel, type: 'message', message });
        await slackup({ apiKey, channel, type: 'file', filePath: binaries[0] });
        await slackup({ apiKey, channel, type: 'file', filePath: binaries[1] });
        await slackup({ apiKey, channel, type: 'file', filePath: binaries[2] });
      } catch (err) {
        console.log(`Couldn't send messages/files to Slack`, err);
      }
    } else {
      setTimeout(
        async () => {
          const message = `:white_check_mark: Build succeded on Node ${currentNodeVersion} (commit <https://github.com/${repo}/commit/${commit}|${commit.substr(0, 7)}> by <${res.authorUrl}|${res.authorName}>)`;
          await slackup({ apiKey, channel, type: 'message', message });
        },
        3000
      );
    }
  })
  .catch(console.error);

#!/usr/bin/env node

const slackup = require('slackup');
const fetch = require('node-fetch');

const repo = process.env.TRAVIS_REPO_SLUG;
const commit = process.env.TRAVIS_COMMIT;
const branch = process.env.TRAVIS_BRANCH;
const apiKey = process.env.SLACK_API_KEY;
const channel = process.env.SLACK_CHANNEL;
const githubToken = process.env.GITHUB_API_KEY;
const currentNodeVersion = process.env.TRAVIS_NODE_VERSION;
const regex = /^(node|7)\.*/;

// Skip if not on a zeit repo
if (!/^zeit\//.test(repo)) {
  console.log('not a zeit repo');
  process.exit(0);
}

if (!apiKey) {
  console.log('$SLACKUP_TOKEN not found');
  process.exit(0);
}

if (!channel) {
  console.log('$SLACKUP_CHANNEL not found');
  process.exit(0);
}

if (!githubToken) {
  console.log('$GITHUB_TOKEN not found');
  process.exit(0);
}

const opts = {
  headers: {
    authorization: `token ${githubToken}`
  }
};

fetch(`https://api.github.com/repos/${repo}/commits/${commit}`, opts)
  .then(res => res.json())
  .then(res => ({
    message: res.commit.message,
    authorName: res.commit.author.name,
    authorUrl: res.author.html_url
  }))
  .then(async res => {
    if (regex.test(currentNodeVersion)) {
      const message = `:package: Here are the binaries for the branch *${branch}* of *${repo}* (commit <https://github.com/${repo}/commit/${commit}|${commit.substr(0, 7)}> by <${res.authorUrl}|${res.authorName}>):`;

      const binaries = [
        `${__dirname}/../../packed/now-macos`,
        `${__dirname}/../../packed/now-linux`,
        `${__dirname}/../../packed/now-win.exe`
      ];

      try {
        await slackup({ apiKey, channel, type: 'message', message });
        await slackup({ apiKey, channel, type: 'file', filePath: binaries[0] });
        await slackup({ apiKey, channel, type: 'file', filePath: binaries[1] });
        await slackup({ apiKey, channel, type: 'file', filePath: binaries[2] });
      } catch (err) {
        console.log(`Couldn't send messages/files to Slack`, err);
      }
    } else {
      setTimeout(
        async () => {
          const message = `:white_check_mark: Build succeded on Node ${currentNodeVersion} (commit <https://github.com/${repo}/commit/${commit}|${commit.substr(0, 7)}> by <${res.authorUrl}|${res.authorName}>)`;
          await slackup({ apiKey, channel, type: 'message', message });
        },
        10000
      );
    }
  })
  .catch(console.error);

Increase the timeout for "unwanted" builds