Skip to content

Commit

Permalink
Monorepo (Financial-Times#60)
Browse files Browse the repository at this point in the history
* WIP Initialise monorepo

* Using namespaced packages, testing, linking

* Fitting master branch

* modify setup repository

* fix unit testing in each directory

* try to pass CI

* fix CI

* restructured packages

* modify CI

* fix CI

* fix makefile

* rename package prefix

* move test-helpers in package and use them

* add monorepo setup instructions in README

* fix init-db task

* pass verifying

* configure publishing

* tweak circleci's config

* remove unused scripts

* Update packages/tc-api-publish-adaptors/package.json

Co-Authored-By: Rhys Evans <[email protected]>

* remove n-cluster

* reflect review

* reflect review

* Revert test-helpers to be placed at root directory

* fix module resolution

* fix CI install step

* Tweak CI

* Remove additional setup instruction

* Attempt to install monorepo by script ourself

* Adopt windows specific trick

* Put comment for fake task and its purpose

* temporary use forked athloi package

* Revert eslintrc.js

* fit master branch

* tidy up

* revert commented out test

* add eslint related package

* fix linting related things
  • Loading branch information
ysugimoto authored Nov 20, 2019
1 parent cc70ced commit 8a9b120
Show file tree
Hide file tree
Showing 184 changed files with 3,125 additions and 2,097 deletions.
28 changes: 27 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ references:
paths:
- ./node_modules/

only_version_tags: &only_version_tags
tags:
only: /^v[0-9]+\.[0-9]+\.[0-9]+(-(alpha|beta)\.\d+)?$/

jobs:
install:
<<: *default_container_config
Expand All @@ -41,7 +45,9 @@ jobs:
- run:
name: Install dependencies
command: |
npm install --no-save
npm install -no-save
make monorepo
- run:
name: Get test env vars
command: make env
Expand Down Expand Up @@ -89,6 +95,17 @@ jobs:
name: Verify
command: make verify -j 3

publish:
<<: *default_container_config
steps:
- *attach_workspace
- run:
name: Setup npm credetials
command: echo "//registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN" > ~/.npmrc
# - run:
# name: Publish to npm registry
# command: make npm-publish

workflows:
version: 2
build-and-deploy:
Expand All @@ -102,3 +119,12 @@ workflows:
context: rel-eng-creds
requires:
- install
- publish:
context: rel-eng-creds
requires:
- install
- test
filters:
<<: *only_version_tags
branches:
ignore: /.*/
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ dist
coverage

secret-squirrel.js
packages/**/node_modules
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ yarn-error.log
/neo4j
.eslintcache
junit.xml
packages/*/node_modules
packages/**/package-lock.json

18 changes: 15 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,20 @@ env:

verify:

install:
# monorepo task should be ran before root installation
# because root of package.json refers some pacakges/tc-* package internally.
#
# And install-treecreeper task is just fake task in order to run `instal%` task of rel-engage.
# see https://github.com/Financial-Times/rel-engage/blob/master/index.mk#L100
install: monorepo install-treecreeper

monorepo:
npm install ysugimoto/athloi
npx athloi exec -- npm install --no-package-lock

npm-publish:
npx athloi exec -- npm version --no-git-tag-version $(CIRCLE_TAG)
npx athloi publish

.PHONY: test

Expand Down Expand Up @@ -67,7 +80,6 @@ test-api-docs:
test-pkg-api-publish:
TREECREEPER_SCHEMA_DIRECTORY=example-schema DEBUG=true TIMEOUT=500000 jest --config="./jest.config.js" "packages/api-publish/__tests__/.*.spec.js" --testEnvironment=node --watch; \


run:
TREECREEPER_SCHEMA_DIRECTORY=example-schema nodemon --inspect api/server/app.js

Expand All @@ -78,7 +90,7 @@ run-db:
docker-compose up

init-db:
TREECREEPER_SCHEMA_DIRECTORY=example-schema packages/api-db-manager/index.js
TREECREEPER_SCHEMA_DIRECTORY=example-schema packages/tc-api-db-manager/index.js

# load-testing
load-test-run:
Expand Down
2 changes: 1 addition & 1 deletion api/__tests__/init-db.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const schema = require('../../packages/schema-sdk');
const schema = require('@financial-times/tc-schema-sdk');
const { initConstraints } = require('../server/init-db');
const { driver } = require('../server/lib/db-connection');

Expand Down
2 changes: 1 addition & 1 deletion api/__tests__/lib/locked-fields.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const schema = require('../../../packages/schema-sdk');
const schema = require('../../../packages/tc-schema-sdk');

const {
mergeLockedFields,
Expand Down
2 changes: 1 addition & 1 deletion api/__tests__/schema-polling-startup.spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fetch = require('node-fetch');
const { getSchemaFilename } = require('../../packages/schema-file-name');
const { getSchemaFilename } = require('../../packages/tc-schema-file-name');

jest.useFakeTimers();

Expand Down
8 changes: 4 additions & 4 deletions api/__tests__/schema-polling-updates.spec.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
const fetch = require('node-fetch');
const schemaPublisher = require('../../packages/schema-publisher');
const schemaPublisher = require('../../packages/tc-schema-publisher');
const request = require('./helpers/supertest').getNamespacedSupertest(
'schema-polling',
);
const { getSchemaFilename } = require('../../packages/schema-file-name');
const { getSchemaFilename } = require('../../packages/tc-schema-file-name');

jest.useFakeTimers();

Expand Down Expand Up @@ -187,13 +187,13 @@ describe('schema polling updates', () => {
// Not testing this as directly as I'd like as it's tricky
it('reinitialises database contraints', async () => {
const onChange = jest.fn();
jest.doMock('../../packages/schema-sdk', () => ({
jest.doMock('../../packages/tc-schema-sdk', () => ({
init: () => null,
onChange,
ready: () => Promise.resolve(),
}));
const { initConstraints } = require('../server/init-db');
expect(onChange).toHaveBeenCalledWith(initConstraints);
jest.dontMock('../../packages/schema-sdk');
jest.dontMock('../../packages/tc-schema-sdk');
});
});
2 changes: 1 addition & 1 deletion api/server/health/constraints.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { stripIndents } = require('common-tags');
const { getTypes } = require('../../../packages/schema-sdk');
const { getTypes } = require('@financial-times/tc-schema-sdk');
const { logger } = require('../lib/request-context');
const healthcheck = require('./healthcheck');
const { executeQuery } = require('../lib/db-connection');
Expand Down
2 changes: 1 addition & 1 deletion api/server/init-db.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env node

const logger = require('@financial-times/n-logger').default;
const schema = require('../../packages/schema-sdk');
const schema = require('@financial-times/tc-schema-sdk');
const { schemaReady } = require('./lib/init-schema');
const { executeQueryWithSharedSession } = require('./lib/db-connection');

Expand Down
2 changes: 1 addition & 1 deletion api/server/lib/init-schema.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const schema = require('../../../packages/schema-sdk');
const schema = require('@financial-times/tc-schema-sdk');

schema.init({ updateMode: 'poll' });

Expand Down
3 changes: 2 additions & 1 deletion api/server/lib/log-to-kinesis.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const groupBy = require('lodash.groupby');
const { getType } = require('../../../packages/schema-sdk');
// eslint-disable-next-line import/no-extraneous-dependencies
const { getType } = require('@financial-times/tc-schema-sdk');
const { getContext } = require('./request-context');
const EventLogWriter = require('./event-log-writer');
const Kinesis = require('./kinesis-client');
Expand Down
2 changes: 1 addition & 1 deletion api/server/lib/schema-helpers.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const schema = require('../../../packages/schema-sdk');
const schema = require('@financial-times/tc-schema-sdk');

const invertDirection = direction =>
direction === 'incoming' ? 'outgoing' : 'incoming';
Expand Down
4 changes: 2 additions & 2 deletions api/server/routes/graphql/api.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const bodyParser = require('body-parser');
const timeout = require('connect-timeout');
const { onChange } = require('@financial-times/tc-schema-sdk');
const { sendSchemaToS3 } = require('@financial-times/tc-schema-publisher');
const { logger, setContext } = require('../../lib/request-context');
const security = require('../../middleware/security');
const maintenance = require('../../middleware/maintenance');
const clientId = require('../../middleware/client-id');
const { TIMEOUT } = require('../../constants');
const { onChange } = require('../../../../packages/schema-sdk');
const { sendSchemaToS3 } = require('../../../../packages/schema-publisher');

let schemaVersionIsConsistent = true;
let graphqlAPI;
Expand Down
5 changes: 1 addition & 4 deletions api/server/routes/graphql/lib/get-augmented-schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ const logger = require('@financial-times/n-logger').default;
const { makeAugmentedSchema } = require('neo4j-graphql-js');
const { applyMiddleware } = require('graphql-middleware');
const { parse } = require('graphql');
const {
getGraphqlDefs,
getTypes,
} = require('../../../../../packages/schema-sdk');
const { getGraphqlDefs, getTypes } = require('@financial-times/tc-schema-sdk');
const { middleware: requestTracer } = require('./request-tracer');

const getDocs = async (obj, args, context, info) => {
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/graphql/lib/request-tracer.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { getType } = require('../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');
const { logger } = require('../../../lib/request-context');

class Tracer {
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/lib/diff-helpers.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const neo4jTemporalTypes = require('neo4j-driver/lib/v1/temporal-types');
const { getType } = require('../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');

const isNullValue = val => val === null || val === '';

Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/lib/error-handling.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { stripIndents } = require('common-tags');
const httpErrors = require('http-errors');
const schema = require('../../../../../packages/schema-sdk');
const schema = require('@financial-times/tc-schema-sdk');
const { executeQuery } = require('./neo4j-model');

const ERROR_RX = Object.freeze({
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/lib/neo4j-model.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { getType } = require('../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');
const { convertNeo4jTypes } = require('./neo4j-type-conversion');
const { executeQuery } = require('../../../lib/db-connection');

Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/lib/neo4j-type-conversion.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const {
isTime,
} = require('neo4j-driver/lib/v1/temporal-types');
const neo4jTemporalTypes = require('neo4j-driver/lib/v1/temporal-types');
const { getType } = require('../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');
const { diffProperties } = require('./diff-helpers');

const entriesToObject = (map, [key, val]) => Object.assign(map, { [key]: val });
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/lib/relationship-write-helpers.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { stripIndents } = require('common-tags');
const { getType } = require('../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');
const { metaPropertiesForCreate } = require('./metadata-helpers');
const { findInversePropertyNames } = require('../../../lib/schema-helpers');

Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/lib/validation.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const httpErrors = require('http-errors');
const {
validators,
TreecreeperUserError,
} = require('../../../../../packages/schema-sdk');
} = require('@financial-times/tc-schema-sdk'); // eslint-disable-line import/no-extraneous-dependencies

const validation = Object.entries(validators).reduce(
(methods, [key, validator]) => {
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/lib/write-helpers.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { stripIndents } = require('common-tags');
const httpError = require('http-errors');
const _isEmpty = require('lodash.isempty');
const { getType } = require('../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');
const { executeQuery } = require('./neo4j-model');
const { getAddedRelationships } = require('./diff-helpers');
const { constructNeo4jProperties } = require('./neo4j-type-conversion');
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/v2/merge.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const httpErrors = require('http-errors');
const { getType } = require('../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');
const { validateTypeName } = require('../lib/validation');
const { executeQuery } = require('../lib/neo4j-model');
const { setContext } = require('../../../lib/request-context');
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/rest/v2/node/patch.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { stripIndents } = require('common-tags');
const { getType } = require('../../../../../../packages/schema-sdk');
const { getType } = require('@financial-times/tc-schema-sdk');
const { validateParams, validatePayload } = require('../../lib/validation');
const {
dbErrorHandlers,
Expand Down
2 changes: 1 addition & 1 deletion demo/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const express = require('express');
const rewrite = require('express-urlrewrite'); // eslint-disable-line import/no-extraneous-dependencies
const expressPlayground = require('graphql-playground-middleware-express')
.default;
const { getApp } = require('../packages/api-express');
const { getApp } = require('../packages/tc-api-express');

const PORT = process.env.PORT || 8888;
const app = express();
Expand Down
2 changes: 1 addition & 1 deletion example-schema/__tests__/schema-valid.spec.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
require('../../packages/schema-validator');
require('../../packages/tc-schema-validator');
Loading

0 comments on commit 8a9b120

Please sign in to comment.