37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
#!/usr/bin/env node
|
|
'use strict';
|
|
|
|
/**
|
|
* **Usage:**
|
|
* ```
|
|
* node get-vendored-yarn-path
|
|
* ```
|
|
*
|
|
* Returns the path to the vendored `yarn.js` script, so that it can be used for setting up yarn
|
|
* aliases/symlinks and use the local, vendored yarn script instead of a globally installed one.
|
|
*
|
|
* **Context:**
|
|
* We keep a version of yarn in the repo, at `third_party/github.com/yarnpkg/`. All CI jobs should
|
|
* use that version for consistency (and easier updates). The path to the actual `yarn.js` script,
|
|
* however, changes depending on the version (e.g. `third_party/github.com/yarnpkg/v1.21.1/...`).
|
|
*
|
|
* This script infers the correct path, so that we don't have to update the path in several places,
|
|
* when we update the version of yarn in `third_party/github.com/yarnpkg/`.
|
|
*/
|
|
|
|
const {readdirSync} = require('fs');
|
|
const {normalize} = require('path');
|
|
|
|
const yarnDownloadDir = `${__dirname}/../third_party/github.com/yarnpkg/yarn/releases/download`;
|
|
const yarnVersionSubdirs = readdirSync(yarnDownloadDir);
|
|
|
|
// Based on our current process, there should be exactly one sub-directory inside
|
|
// `vendoredYarnDownloadDir` at all times. Throw, if that is not the case.
|
|
if (yarnVersionSubdirs.length !== 1) {
|
|
throw new Error(
|
|
`Expected exactly 1 yarn version in '${yarnDownloadDir}', but found ` +
|
|
`${yarnVersionSubdirs.length}: ${yarnVersionSubdirs.join(', ')}`);
|
|
}
|
|
|
|
console.log(normalize(`${yarnDownloadDir}/${yarnVersionSubdirs[0]}/bin/yarn.js`));
|