.houston/metadata.js
const { execSync } = require('child_process');
const getMongoVersion = async function({ version, git }) {
try {
const workflows = await git.show([`${ version }:.github/workflows/ci.yml`]);
const mongoMatch = workflows.match(/compatibleMongoVersions\\": \[([^\]]+)\]/);
if (!mongoMatch) {
return [];
}
return mongoMatch[1].replace(/["'\\ ]/g, '').split(',');
} catch (e) {
console.error(e);
}
return [];
};
const getNodeNpmVersions = async function({ version, git, request }) {
try {
const meteorRelease = await git.show([`${ version }:apps/meteor/.meteor/release`]);
if (!/^METEOR@(\d+\.){1,2}\d/.test(meteorRelease)) {
return {};
}
const meteorVersion = meteorRelease.replace(/\n|\s/g, '');
const requestResult = await request(`https://raw.githubusercontent.com/meteor/meteor/release/${ meteorVersion }/scripts/build-dev-bundle-common.sh`);
return {
node_version: requestResult.match(/NODE_VERSION=((?:\d+\.){2}\d+)/m)[1],
npm_version: requestResult.match(/NPM_VERSION=((?:\d+\.){2}\d+)/m)[1],
};
} catch (e) {
console.error(e);
}
return {};
};
const getAppsEngineVersion = async function({ version, git }) {
try {
const result = execSync('yarn why @rocket.chat/apps-engine --json');
const resultString = result.toString();
const match = resultString.match(/"@rocket\.chat\/meteor@workspace:apps\/meteor".*"@rocket\.chat\/apps\-engine@[^#]+#npm:([^"]+)"/);
if (match) {
return match[1];
}
} catch (e) {
console.error(e);
}
return undefined;
};
module.exports = async function({ version, git, request }) {
const mongo_versions = await getMongoVersion({ version, git });
const apps_engine_version = await getAppsEngineVersion({ version, git });
const {
node_version,
npm_version,
} = await getNodeNpmVersions({ version, git, request });
return {
node_version,
npm_version,
apps_engine_version,
mongo_versions,
};
};