Browse Source

RN weird Jenkins stuff fix

tags/0.9.13
Oskar Thoren 1 year ago
parent
commit
0f23265029
No account linked to committer's email address
4 changed files with 124 additions and 2 deletions
  1. 4
    0
      Jenkinsfile
  2. 6
    2
      Jenkinsfile.nightly
  3. 4
    0
      Jenkinsfile.parameters
  4. 110
    0
      findSymlinkedModules.js.patch

+ 4
- 0
Jenkinsfile View File

@@ -24,6 +24,10 @@ node ('macos1') {
sh 'cp .env.jenkins .env'
sh 'lein deps && npm install && ./node_modules/re-natal/index.js deps'
sh '[ -f node_modules/react-native/packager/src/JSTransformer/index.js ] && sed -i "" "s/301000/1201000/g" node_modules/react-native/packager/src/JSTransformer/index.js || echo "New packager"'

// Fix silly RN upgrade weird env issue
cp 'findSymlinkedModules.js.patch' 'node_modules/react-native/local-cli/util/findSymlinkedModules.js'

sh 'mvn -f modules/react-native-status/ios/RCTStatus dependency:unpack'
sh 'cd ios && pod install && cd ..'
}

+ 6
- 2
Jenkinsfile.nightly View File

@@ -25,9 +25,13 @@ node ('macos1'){
sh 'cp .env.jenkins .env'
sh 'lein deps && npm install && ./node_modules/re-natal/index.js deps'
sh '[ -f node_modules/react-native/packager/src/JSTransformer/index.js ] && sed -i "" "s/301000/1201000/g" node_modules/react-native/packager/src/JSTransformer/index.js || echo "New packager"'

// Fix silly RN upgrade weird env issue
cp 'findSymlinkedModules.js.patch' 'node_modules/react-native/local-cli/util/findSymlinkedModules.js'

sh 'mvn -f modules/react-native-status/ios/RCTStatus dependency:unpack'
sh 'cd ios && pod install && cd ..'
}
sh 'cd ios && pod install && cd ..'
}

stage('Tests') {
sh 'lein test-cljs'

+ 4
- 0
Jenkinsfile.parameters View File

@@ -43,6 +43,10 @@ node ('macos1') {
// Uncomment with RN merge
sh '[ -f node_modules/react-native/packager/src/JSTransformer/index.js ] && sed -i "" "s/301000/1201000/g" node_modules/react-native/packager/src/JSTransformer/index.js || echo "New packager"'
// sh 'sed -i "" "s/301000/1201000/g" node_modules/react-native/packager/src/JSTransformer/index.js'

// Fix silly RN upgrade weird env issue
cp 'findSymlinkedModules.js.patch' 'node_modules/react-native/local-cli/util/findSymlinkedModules.js'

sh 'mvn -f modules/react-native-status/ios/RCTStatus dependency:unpack'
sh 'cd ios && pod install && cd ..'
}

+ 110
- 0
findSymlinkedModules.js.patch View File

@@ -0,0 +1,110 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @format
* @flow
*/

const path = require('path');
const fs = require('fs');

/**
* Find symlinked modules inside "node_modules."
*
* Naively, we could just perform a depth-first search of all folders in
* node_modules, recursing when we find a symlink.
*
* We can be smarter than this due to our knowledge of how npm/Yarn lays out
* "node_modules" / how tools that build on top of npm/Yarn (such as Lerna)
* install dependencies.
*
* Starting from a given root node_modules folder, this algorithm will look at
* both the top level descendants of the node_modules folder or second level
* descendants of folders that start with "@" (which indicates a scoped
* package). If any of those folders is a symlink, it will recurse into the
* link, and perform the same search in the linked folder.
*
* The end result should be a list of all resolved module symlinks for a given
* root.
*/
module.exports = function findSymlinkedModules(
projectRoot: string,
ignoredRoots: Array<string> = [],
) {
const timeStart = Date.now();
const nodeModuleRoot = path.join(projectRoot, 'node_modules');
const resolvedSymlinks = findModuleSymlinks(nodeModuleRoot, [
...ignoredRoots,
projectRoot,
]);
const timeEnd = Date.now();

console.log(
`Scanning folders for symlinks in ${nodeModuleRoot} (${timeEnd -
timeStart}ms)`,
);

return resolvedSymlinks;
};

function findModuleSymlinks(
modulesPath: string,
ignoredPaths: Array<string> = [],
): Array<string> {
if (!fs.existsSync(modulesPath)) {
return [];
}

// Find module symlinks
const moduleFolders = fs.readdirSync(modulesPath);
const symlinks = moduleFolders.reduce((links, folderName) => {
const folderPath = path.join(modulesPath, folderName);
const maybeSymlinkPaths = [];
if (folderName.startsWith('@')) {
const scopedModuleFolders = fs.readdirSync(folderPath);
maybeSymlinkPaths.push(
...scopedModuleFolders.map(name => path.join(folderPath, name)),
);
} else {
maybeSymlinkPaths.push(folderPath);
}
return links.concat(resolveSymlinkPaths(maybeSymlinkPaths, ignoredPaths));
}, []);

// For any symlinks found, look in _that_ modules node_modules directory
// and find any symlinked modules
const nestedSymlinks = symlinks.reduce(
(links, symlinkPath) =>
links.concat(
// We ignore any found symlinks or anything from the ignored list,
// to prevent infinite recursion
findModuleSymlinks(path.join(symlinkPath, 'node_modules'), [
...ignoredPaths,
...symlinks,
]),
),
[],
);

return [...new Set([...symlinks, ...nestedSymlinks])];
}

function resolveSymlinkPaths(maybeSymlinkPaths, ignoredPaths) {
return maybeSymlinkPaths.reduce((links, maybeSymlinkPath) => {
if (fs.lstatSync(maybeSymlinkPath).isSymbolicLink()) {
const resolved = path.resolve(
path.dirname(maybeSymlinkPath),
fs.readlinkSync(maybeSymlinkPath),
);
if (ignoredPaths.indexOf(resolved) === -1 && fs.existsSync(resolved)) {
links.push(resolved);
}
}
return links;
}, []);
}

Loading…
Cancel
Save