3ceb2b85da
We keep a version of yarn in the repo, at `third_party/github.com/yarnpkg/`. All CI jobs (including Windows ones) 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/...`). (NOTE: The Windows jobs are currently not using this local version, but that should be fixed in a subsequent commit.) Previously, when updating the local version of yarn, we would potentially have to update the path in several places. This commit addresses the problem by adding a Node.js script that infers the correct path. The script can be used in all places where we need to use the local version of yarn (including both Linux and Windows CI jobs), thus eliminating the need to update the path in several places. PR Close #34384
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`));
|