sourcecred/config/paths.js

39 lines
1.4 KiB
JavaScript
Raw Normal View History

// @flow
const path = require("path");
const fs = require("fs");
// Make sure any symlinks in the project folder are resolved:
// https://github.com/facebookincubator/create-react-app/issues/637
const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath);
// config after eject: we're in ./config/
module.exports = {
root: appDirectory,
dotenv: resolveApp(".env"),
favicon: resolveApp("src/assets/logo/sourcecred_32.png"),
appBuild: resolveApp("build"),
appIndexJs: resolveApp("src/app/index.js"),
appServerSideRenderingIndexJs: resolveApp("src/app/server.js"),
appRouteData: resolveApp("src/app/routeData.js"),
appPackageJson: resolveApp("package.json"),
appSrc: resolveApp("src"),
yarnLockFile: resolveApp("yarn.lock"),
appNodeModules: resolveApp("node_modules"),
backendBuild: resolveApp("bin"),
// This object should have one key-value pair per entry point. For
// each key, the value should be the path to the entry point for the
// source file, and the key will be the filename of the bundled entry
// point within the build directory.
backendEntryPoints: {
sourcecred: resolveApp("src/cli/main.js"),
//
fetchAndPrintGithubRepo: resolveApp(
"src/plugins/github/bin/fetchAndPrintGithubRepo.js"
),
createExampleRepo: resolveApp("src/plugins/git/bin/createExampleRepo.js"),
mirror: add an end-to-end `update` function (#909) Summary: This completes the minimum viable public API for the `Mirror` class. As described on the docstring, the typical workflow for a client is: - Invoke the constructor to acquire a `Mirror` instance. - Invoke `registerObject` to register a root object of interest. - Invoke `update` to update all transitive dependencies. - Invoke `extract` to retrieve the data in structured form. It is the third step that is added in this commit. In this commit, we also include a command-line demo of the Mirror module, which exercises exactly the workflow above with a hard-coded GitHub schema. This can be used to test the module’s behavior with real-world data. I plan to remove this entry point once we integrate this module into SourceCred. This commit makes progress toward #622. Test Plan: Unit tests included for the core functionality. The imperative shell does not have automated tests. You can test it as follows. First, run `yarn backend` to build `bin/mirror.js`. Then, run: ```shell $ node bin/mirror.js /tmp/mirror-demo.db \ > Repository MDEwOlJlcG9zaXRvcnkxMjMyNTUwMDY= \ > 60 ``` Here, the big base64 string is the ID for the sourcecred/example-github repository. (This is listed in `graphql/demo.js`, alongside the ID for the SourceCred repository itself.) The value 60 is a TTL in seconds. The database filename is arbitrary. This will print out a ton of output to stderr (all intermediate queries and responses, for debugging purposes), and then the full contents of the example repository to stdout. Run the command again, and it should finish instantly. On my machine, the main function runs faster than the Node startup time (50ms vs 60ms). Then, re-run the command, changing the TTL from `60` to `1`. Note that it sends off some queries and then prints the same repository. It is safe to kill the program at any time, either while waiting for a response from GitHub or while processing the results, because the mirror module takes advantage of SQLite’s transaction-safety. Intermediate updates will be persisted, so you’ll lose just a few seconds of progress. You can also of course dive into the generated database yourself to explore the data. It’s good fun. wchargin-branch: mirror-e2e-update
2018-10-03 04:06:01 +00:00
mirror: resolveApp("src/graphql/demo.js"),
},
};