New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@aircall/ci-scripts

Package Overview
Dependencies
Maintainers
7
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aircall/ci-scripts - npm Package Compare versions

Comparing version 2.1.0 to 2.1.1

148

commands/notify-slack.js

@@ -5,83 +5,91 @@ const { post } = require('../request.js');

getMergedPullRequests,
getLatestRelease,
getPreviousRelease
getReleaseFromSha1,
getPreviousReleaseFromRelease,
getLatestDraft
} = require('../github.js');
const {
SLACK_BEARER_TOKEN,
CIRCLE_PROJECT_REPONAME,
CIRCLE_PROJECT_USERNAME,
CIRCLE_WORKFLOW_ID,
CIRCLE_SHA1
} = checkEnvVariables([
'SLACK_BEARER_TOKEN',
'CIRCLE_PROJECT_REPONAME',
'CIRCLE_PROJECT_USERNAME',
'CIRCLE_WORKFLOW_ID',
'GITHUB_CREDENTIALS',
'CIRCLE_SHA1'
]);
const SLACK_COLOR = '#00b388';
const generatePayload = (environment, lastTag, prevTag, mergedPR, project, circleId) => {
if (environment === 'production') {
return [
{
title: 'Changelog',
value: `<${lastTag.html_url} | ${lastTag.tag_name}>`,
short: true
},
{
title: 'Diff',
value: `<https://github.com/${project}/compare/${prevTag.tag_name}...${lastTag.tag_name}|${prevTag.tag_name}...${lastTag.tag_name}>`,
short: true
}
];
} else {
return [
{
title: 'PR',
value: `[<${mergedPR.url}|#${mergedPR.number}>] ${mergedPR.title}, by *@${mergedPR.author.login}*`,
},
{
title: 'Associated Release',
value: `<${lastTag.html_url}|${lastTag.tag_name}>`,
short: true
},
{
title: 'CircleCI Workflow',
value: `<https://circleci.com/workflow-run/${circleId}|Link>`,
short: true
}
];
}
const generateStagingPayload = (mergedPR, lastDraft, circleId) => {
return [
{
title: 'PR',
value: `[<${mergedPR.url}|#${mergedPR.number}>] ${mergedPR.title}, by *@${
mergedPR.author.login
}*`
},
{
title: 'Associated Release',
value: `<${lastDraft.html_url}|${lastDraft.tag_name}>`,
short: true
},
{
title: 'CircleCI Workflow',
value: `<https://circleci.com/workflow-run/${circleId}|Link>`,
short: true
}
];
};
const getReleaseData = async (project, credentials) => {
const lastTag = await getLatestRelease();
const prevTag = await getPreviousRelease();
return [lastTag, prevTag];
const generateProdPayload = (lastTag, prevTag, project) => {
return [
{
title: 'Changelog',
value: `<${lastTag.html_url} | ${lastTag.tag_name}>`,
short: true
},
{
title: 'Diff',
value: `<https://github.com/${project}/compare/${prevTag.tag_name}...${lastTag.tag_name}|${
prevTag.tag_name
}...${lastTag.tag_name}>`,
short: true
}
];
};
const getPRData = async (project, credentials) => {
const getPRData = async commitish => {
const prs = await getMergedPullRequests();
// Addresses issue when older PR is merged after newer PR
// Original list is sorted by PR number, not close/merge date
// There are 100 PRs given in response so not ideal but not that expensive either...
const mostRecentMergedPR = prs.sort( (pr1, pr2) => {
return (pr1.mergedAt < pr2.mergedAt) ? 1 : -1;
})[0];
const mergedPR = prs.find(pr => {
return pr.mergeCommit.oid === commitish;
});
return mostRecentMergedPR;
}
return mergedPR;
};
const notifySlack = async (environment, channel, title = ':ship:') => {
const {
SLACK_BEARER_TOKEN,
CIRCLE_PROJECT_REPONAME,
CIRCLE_PROJECT_USERNAME,
CIRCLE_WORKFLOW_ID,
GITHUB_CREDENTIALS,
} = checkEnvVariables([
'SLACK_BEARER_TOKEN',
'CIRCLE_PROJECT_REPONAME',
'CIRCLE_PROJECT_USERNAME',
'CIRCLE_WORKFLOW_ID',
'GITHUB_CREDENTIALS'
]);
const project = CIRCLE_PROJECT_USERNAME + '/' + CIRCLE_PROJECT_REPONAME;
const mergedPR = await getPRData(project, GITHUB_CREDENTIALS);
const [lastTag, prevTag] = await getReleaseData(project, GITHUB_CREDENTIALS);
const fields = generatePayload(environment, lastTag, prevTag, mergedPR, project, CIRCLE_WORKFLOW_ID);
const messageTitle = `${title} ${environment.charAt(0).toUpperCase() + environment.slice(1)} deployment`;
let currentRelease, previousRelease, lastDraft, mergedPR, fields;
if (environment === 'production') {
currentRelease = await getReleaseFromSha1(CIRCLE_SHA1);
previousRelease = await getPreviousReleaseFromRelease(currentRelease.id);
fields = generateProdPayload(currentRelease, previousRelease, project);
} else {
mergedPR = await getPRData(CIRCLE_SHA1);
lastDraft = await getLatestDraft();
fields = generateStagingPayload(mergedPR, lastDraft, CIRCLE_WORKFLOW_ID);
}
const messageTitle = `${title} ${environment.charAt(0).toUpperCase() +
environment.slice(1)} deployment`;
const payload = JSON.stringify({

@@ -101,3 +109,9 @@ channel,

try {
await post(slackUrl, { headers: { 'Authorization': `Bearer ${SLACK_BEARER_TOKEN}`, 'Content-type': 'application/json' }, body: payload } );
await post(slackUrl, {
headers: {
Authorization: `Bearer ${SLACK_BEARER_TOKEN}`,
'Content-type': 'application/json'
},
body: payload
});
} catch (e) {

@@ -104,0 +118,0 @@ console.log(e);

@@ -65,3 +65,3 @@ const { get, patch, post } = require('./request.js');

return gitReleases;
}
};

@@ -78,8 +78,36 @@ const getLatestRelease = async () => {

const getLatestDraft = async () => {
const releases = await getReleases();
const latestPreRelease = releases.find(r => r.draft);
return latestPreRelease;
};
const getLatestPreRelease = async () => {
const { data } = await get(`${githubApiUrl}/releases`, { headers: apiRequestHeaders });
const latestPreRelease = data.find(r => !r.draft && r.prerelease);
const releases = await getReleases();
const latestPreRelease = releases.find(r => !r.draft && r.prerelease);
return latestPreRelease;
};
const getLatestFullRelease = async () => {
const releases = await getReleases();
const latestFullRelease = releases.find(r => !r.draft && !r.prerelease);
return latestFullRelease;
};
const getReleaseFromSha1 = async commitish => {
const releases = await getReleases();
const release = releases.find(r => {
return r.target_commitish === commitish;
});
return release;
};
const getPreviousReleaseFromRelease = async releaseId => {
const releases = await getReleases();
const index = releases.findIndex(r => {
return r.id === releaseId;
});
return releases[index + 1];
};
const executeGraphQLRequest = async query => {

@@ -155,3 +183,4 @@ const { data } = await post(githubGraphQLUrl, {

mergeCommit {
committedDate
oid
committedDate
}

@@ -175,2 +204,3 @@ }

getLatestCommit,
getLatestDraft,
getLatestRelease,

@@ -180,3 +210,6 @@ getLatestPreRelease,

getMergedPullRequests,
getPreviousRelease
getPreviousRelease,
getLatestFullRelease,
getReleaseFromSha1,
getPreviousReleaseFromRelease
};
{
"name": "@aircall/ci-scripts",
"version": "2.1.0",
"version": "2.1.1",
"dependencies": {},

@@ -5,0 +5,0 @@ "main": "ci-scripts.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc