mirror of
https://github.com/facebook/react.git
synced 2026-02-26 05:45:14 +00:00
* WIP * fbjs support * WIP * dev/prod mode WIP * More WIP * builds a cjs bundle * adding forwarding modules * more progress on forwarding modules and FB config * improved how certain modules get inlined for fb and cjs * more forwarding modules * added comments to the module aliasing code * made ReactPerf and ReactTestUtils bundle again * Use -core suffix for all bundles This makes it easier to override things in www. * Add a lazy shim for ReactPerf This prevents a circular dependency between ReactGKJSModule and ReactDOM * Fix forwarding module for ReactCurrentOwner * Revert "Add a lazy shim for ReactPerf" This reverts commit723b402c07. * Rename -core suffix to -fb for clarity * Change forwarding modules to import from -fb This is another, more direct fix for ReactPerf circular dependency * should fix fb and cjs bundles for ReactCurrentOwner * added provides module for ReactCurrentOwner * should improve console output * fixed typo with argument passing on functon call * Revert "should improve console output" This breaks the FB bundles. This reverts commit65f11ee64f. * Work around internal FB transform require() issue * moved ReactInstanceMap out of React and into ReactDOM and ReactDOMFiber * Expose more internal modules to www * Add missing modules to Stack ReactDOM to fix UFI * Fix onlyChild module * improved the build tool * Add a rollup npm script * Rename ReactDOM-fb to ReactDOMStack-fb * Fix circular dependencies now that ReactDOM-fb is a GK switch * Revert "Work around internal FB transform require() issue" This reverts commit0a50b6a90b. * Bump rollup-plugin-commonjs to include a fix for rollup/rollup-plugin-commonjs#176 * Add more forwarding modules that are used on www * Add even more forwarding modules that are used on www * Add DOMProperty to hidden exports * Externalize feature flags This lets www specify them dynamically. * Remove forwarding modules with implementations Instead I'm adding them to react-fb in my diff. * Add all injection necessary for error logging * Add missing forwarding module (oops) * Add ReactART builds * Add ReactDOMServer bundle * Fix UMD build of ReactDOMFiber * Work in progress: start adding ReactNative bundle * tidied up the options for bundles, so they can define what types they output and exclude * Add a working RN build * further improved and tidied up build process * improved how bundles are built by exposing externals and making the process less "magical", also tidied up code and added more comments * better handling of bundling ReactCurrentOwner and accessing it from renderer modules * added NODE_DEV and NODE_PROD * added NPM package creation and copying into build chain * Improved UMD bundles, added better fixture testing and doc plus prod builds * updated internal modules (WIP) * removed all react/lib/* dependencies from appearing in bundles created on build * added react-test-renderer bundles * renamed bundles and paths * fixed fixture path changes * added extract-errors support * added extractErrors warning * moved shims to shims directory in rollup scripts * changed pathing to use build rather than build/rollup * updated release doc to reflect some rollup changes * Updated ReactNative findNodeHandle() to handle number case (#9238) * Add dynamic injection to ReactErrorUtils (#9246) * Fix ReactErrorUtils injection (#9247) * Fix Haste name * Move files around * More descriptive filenames * Add missing ReactErrorUtils shim * Tweak reactComponentExpect to make it standalone-ish in www * Unflowify shims * facebook-www shims now get copied over correctly to build * removed unnecessary resolve * building facebook-www/build is now all sync to prevent IO issues plus handles extra facebook-www src assets * removed react-native-renderer package and made build make a react-native build dir instead * 😭😭😭 * Add more SSR unit tests for elements and children. (#9221) * Adding more SSR unit tests for elements and children. * Some of my SSR tests were testing for react-text and react-empty elements that no longer exist in Fiber. Fixed the tests so that they expect correct markup in Fiber. * Tweaked some test names after @gaearon review comment https://github.com/facebook/react/pull/9221#discussion_r107045673 . Also realized that one of the tests was essentially a direct copy of another, so deleted it. * Responding to code review https://github.com/facebook/react/pull/9221#pullrequestreview-28996315 . Thanks @spicyj! * ReactElementValidator uses temporary ReactNative View propTypes getter (#9256) * Updating packages for 16.0.0-alpha.6 release * Revert "😭😭😭" This reverts commit7dba33b2cf. * Work around Jest issue with CurrentOwner shared state in www * updated error codes * splits FB into FB_DEV and FB_PROD * Remove deps on specific builds from shims * should no longer mangle FB_PROD output * Added init() dev block to ReactTestUtils * added shims for DEV only code so it does not get included in prod bundles * added a __DEV__ wrapping code to FB_DEV * added __DEV__ flag behind a footer/header * Use right haste names * keeps comments in prod * added external babel helpers plugin * fixed fixtures and updated cjs/umd paths * Fixes Jest so it run tests correctly * fixed an issue with stubbed modules not properly being replaced due to greedy replacement * added a WIP solution for ReactCurrentOwner on FB DEV * adds a FB_TEST bundle * allows both ReactCurrentOwner and react/lib/ReactCurrentOwner * adds -test to provides module name * Remove TEST env * Ensure requires stay at the top * added basic mangle support (disbaled by default) * per bundle property mangling added * moved around plugin order to try and fix deadcode requires as per https://github.com/rollup/rollup/issues/855 * Fix flow issues * removed gulp and grunt and moved tasks to standalone node script * configured circleci to use new paths * Fix lint * removed gulp-extract-errors * added test_build.sh back in * added missing newline to flow.js * fixed test coverage command * changed permissions on test_build.sh * fixed test_html_generations.sh * temp removed html render test * removed the warning output from test_build, the build should do this instead * fixed test_build * fixed broken npm script * Remove unused ViewportMetrics shim * better error output * updated circleci to node 7 for async/await * Fixes * removed coverage test from circleci run * circleci run tets * removed build from circlci * made a dedicated jest script in a new process * moved order around of circlci tasks * changing path to jest in more circleci tests * re-enabled code coverage * Add file header to prod bundles * Remove react-dom/server.js (WIP: decide on the plan) * Only UMD bundles need version header * Merge with master * disabled const evaluation by uglify for <script></script> string literal * deal with ART modules for UMD bundles * improved how bundle output gets printed * fixed filesize difference reporting * added filesize dep * Update yarn lockfile for some reason * now compares against the last run branch built on * added react-dom-server * removed un-needed comment * results only get saved on full builds * moved the rollup sized plugin into a plugins directory * added a missing commonjs() * fixed missing ignore * Hack around to fix RN bundle * Partially fix RN bundles * added react-art bundle and a fixture for it * Point UMD bundle to Fiber and add EventPluginHub to exported internals * Make it build on Node 4 * fixed eslint error with resolve being defined in outer scope * Tweak how build results are calculated and stored * Tweak fixtures build to work on Node 4 * Include LICENSE/PATENTS and fix up package.json files * Add Node bundle for react-test-renderer * Revert "Hack around to fix RN bundle" We'll do this later. This reverts commit59445a6259. * Revert more RN changes We'll do them separately later * Revert more unintentional changes * Revert changes to error codes * Add accidentally deleted RN externals * added RN_DEV/RN_PROD bundles * fixed typo where RN_DEV and RN_PROD were the wrong way around * Delete/ignore fixture build outputs * Format scripts/ with Prettier * tidied up the Rollup build process and split functions into various different files to improve readability * Copy folder before files * updated yarn.lock * updated results and yarn dependencies to the latest versions
191 lines
5.0 KiB
JavaScript
191 lines
5.0 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Copyright (c) 2013-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.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var execFileSync = require('child_process').execFileSync;
|
|
|
|
var cwd = null;
|
|
function exec(command, args) {
|
|
console.error('>', [command].concat(args));
|
|
var options = {};
|
|
if (cwd) {
|
|
options.cwd = cwd;
|
|
}
|
|
return execFileSync(command, args, options).toString();
|
|
}
|
|
|
|
var isCI = !!process.env.TRAVIS_REPO_SLUG;
|
|
|
|
if (isCI) {
|
|
var branch = process.env.TRAVIS_BRANCH || process.env.CIRCLE_BRANCH;
|
|
var isPullRequest = (!!process.env.TRAVIS_PULL_REQUEST &&
|
|
process.env.TRAVIS_PULL_REQUEST !== 'false') ||
|
|
!!process.env.CI_PULL_REQUEST;
|
|
|
|
if (branch !== 'master') {
|
|
console.error('facts-tracker: Branch is not master, exiting...');
|
|
process.exit(0);
|
|
}
|
|
|
|
if (isPullRequest) {
|
|
console.error('facts-tracker: This is a pull request, exiting...');
|
|
process.exit(0);
|
|
}
|
|
|
|
if (!process.env.GITHUB_USER) {
|
|
console.error(
|
|
'In order to use facts-tracker, you need to configure a ' +
|
|
'few environment variables in order to be able to commit to the ' +
|
|
'repository. Follow those steps to get you setup:\n' +
|
|
'\n' +
|
|
'Go to https://github.com/settings/tokens/new\n' +
|
|
' - Fill "Token description" with "facts-tracker for ' +
|
|
process.env.TRAVIS_REPO_SLUG +
|
|
'"\n' +
|
|
' - Check "public_repo"\n' +
|
|
' - Press "Generate Token"\n' +
|
|
'\n' +
|
|
'In a different tab, go to https://travis-ci.org/' +
|
|
process.env.TRAVIS_REPO_SLUG +
|
|
'/settings\n' +
|
|
' - Make sure "Build only if .travis.yml is present" is ON\n' +
|
|
' - Fill "Name" with "GITHUB_USER" and "Value" with the name of the ' +
|
|
'account you generated the token with. Press "Add"\n' +
|
|
'\n' +
|
|
'Once this is done, commit anything to the repository to restart ' +
|
|
'Travis and it should work :)'
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
exec('git', [
|
|
'config',
|
|
'--global',
|
|
'user.name',
|
|
process.env.GITHUB_USER_NAME || 'facts-tracker',
|
|
]);
|
|
exec('git', [
|
|
'config',
|
|
'--global',
|
|
'user.email',
|
|
process.env.GITHUB_USER_EMAIL || 'facts-tracker@no-reply.github.com',
|
|
]);
|
|
}
|
|
|
|
if (process.argv.length <= 2) {
|
|
console.error('Usage: facts-tracker <name1> <value1> <name2> <value2>...');
|
|
process.exit(1);
|
|
}
|
|
|
|
function getRepoSlug() {
|
|
if (isCI) {
|
|
return process.env.TRAVIS_REPO_SLUG;
|
|
}
|
|
|
|
var remotes = exec('git', ['remote', '-v']).split('\n');
|
|
for (var i = 0; i < remotes.length; ++i) {
|
|
var match = remotes[i].match(/^origin\t[^:]+:([^\.]+).+\(fetch\)/);
|
|
if (match) {
|
|
return match[1];
|
|
}
|
|
}
|
|
|
|
console.error('Cannot find repository slug, sorry.');
|
|
process.exit(1);
|
|
}
|
|
|
|
var repoSlug = getRepoSlug();
|
|
var currentCommitHash = exec('git', ['rev-parse', 'HEAD']).trim();
|
|
var currentTimestamp = new Date()
|
|
.toISOString()
|
|
.replace('T', ' ')
|
|
.replace(/\..+/, '');
|
|
|
|
function checkoutFactsFolder() {
|
|
var factsFolder = '../' + repoSlug.split('/')[1] + '-facts';
|
|
if (!fs.existsSync(factsFolder)) {
|
|
var repoURL;
|
|
if (isCI) {
|
|
repoURL = 'https://' +
|
|
process.env.GITHUB_USER +
|
|
'@github.com/' +
|
|
repoSlug +
|
|
'.git';
|
|
} else {
|
|
repoURL = 'git@github.com:' + repoSlug + '.git';
|
|
}
|
|
|
|
exec('git', [
|
|
'clone',
|
|
'--branch',
|
|
'facts',
|
|
'--depth=5',
|
|
repoURL,
|
|
factsFolder,
|
|
]);
|
|
}
|
|
|
|
cwd = path.resolve(factsFolder);
|
|
exec('git', ['fetch']);
|
|
if (exec('git', ['status', '--porcelain'])) {
|
|
console.error('facts-tracker: `git status` is not clean, aborting.');
|
|
process.exit(1);
|
|
}
|
|
exec('git', ['rebase', 'origin/facts']);
|
|
}
|
|
checkoutFactsFolder();
|
|
|
|
for (var i = 2; i < process.argv.length; i += 2) {
|
|
var name = process.argv[i].trim();
|
|
var value = process.argv[i + 1];
|
|
if (value.indexOf('\n') !== -1) {
|
|
console.error(
|
|
'facts-tracker: skipping',
|
|
name,
|
|
'as the value contains new lines:',
|
|
value
|
|
);
|
|
continue;
|
|
}
|
|
|
|
var filename = name + '.txt';
|
|
try {
|
|
var lastLine = exec('tail', ['-n', '1', filename]);
|
|
} catch (e) {
|
|
// ignore error
|
|
}
|
|
var lastValue = lastLine &&
|
|
lastLine.replace(/^[^\t]+\t[^\t]+\t/, '').slice(0, -1); // commit hash \t timestamp \t // trailing \n
|
|
|
|
if (value !== lastValue) {
|
|
fs.appendFileSync(
|
|
path.resolve(cwd, filename),
|
|
currentCommitHash + '\t' + currentTimestamp + '\t' + value + '\n'
|
|
);
|
|
}
|
|
|
|
console.log(name);
|
|
console.log(lastValue);
|
|
console.log(value);
|
|
}
|
|
|
|
if (exec('git', ['status', '--porcelain'])) {
|
|
exec('git', ['add', '--all']);
|
|
exec('git', ['commit', '-m', 'Adding facts for ' + currentCommitHash]);
|
|
exec('git', ['push', 'origin', 'facts']);
|
|
} else {
|
|
console.error('facts-tracker: nothing to update');
|
|
}
|
|
cwd = null;
|