From 0e680cb17a0e654cea38590b382aab91f478668f Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 18 Jun 2021 10:53:08 +0100 Subject: [PATCH] Meta: Ensure long messages fit in commit tweet Abbreviating the commit message to 240 characters was not always enough. As a bonus, we now add an ellipsis to abbreviated messages. --- Meta/tweet-commits.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Meta/tweet-commits.js b/Meta/tweet-commits.js index 581eafe3941..cb601f7f9b1 100644 --- a/Meta/tweet-commits.js +++ b/Meta/tweet-commits.js @@ -1,6 +1,9 @@ const fs = require("fs"); const Twit = require("twit"); const { CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET } = process.env; +const tweetLength = 280; +// Twitter always considers t.co links to be 23 chars, see https://help.twitter.com/en/using-twitter/how-to-tweet-a-link +const twitterLinkLength = 23; const T = new Twit({ consumer_key: CONSUMER_KEY, @@ -13,11 +16,14 @@ const T = new Twit({ const githubEvent = JSON.parse(fs.readFileSync(0).toString()); const tweets = []; for (const commit of githubEvent["commits"]) { - tweets.push( - `${commit["message"].substring(0, 240)}\nAuthor: ${commit["author"]["name"]}\n${ - commit["url"] - }` - ); + const authorLine = `Author: ${commit["author"]["name"]}`; + const maxMessageLength = tweetLength - authorLine.length - twitterLinkLength - 2; // -2 for newlines + const commitMessage = + commit["message"].length > maxMessageLength + ? commit["message"].substring(0, maxMessageLength - 2) + "…" // Ellipsis counts as 2 characters + : commit["message"]; + + tweets.push(`${commitMessage}\n${authorLine}\n${commit["url"]}`); } for (const tweet of tweets) { try {