Skip to content

Commit

Permalink
Use tsx for scripts and local admin server
Browse files Browse the repository at this point in the history
Another attempt at doing this.

Set `GIT_CMS_DIR` dynamically to make it work both when the code runs
from the top level dir with `tsx` and from the `itsJustJavascript` dir.
  • Loading branch information
rakyi committed May 15, 2024
1 parent 2e81a25 commit cc65ad0
Show file tree
Hide file tree
Showing 9 changed files with 345 additions and 123 deletions.
3 changes: 1 addition & 2 deletions .gitpod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,12 @@ tasks:
echo VITE_DEV_URL=$(gp url 8090) >> .env
echo BAKED_BASE_URL=$(gp url 3030) >> .env
echo ADMIN_BASE_URL=$(gp url 3030) >> .env
yarn startTscServer
# wait for initial-setup (above) to finish and then start vite server
- init: gp sync-await initial-setup
command: yarn startViteServer
# wait for initial-setup (above) to finish and then start admin server
- init: gp sync-await initial-setup
command: yarn startAdminServer
command: yarn startAdminDevServer

github:
prebuilds:
Expand Down
13 changes: 5 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ up: require create-if-missing.env ../owid-content tmp-downloads/owid_metadata.sq
@echo '==> Building grapher'
yarn install
yarn lerna run build
yarn run tsc -b

@echo '==> Starting dev environment'
@mkdir -p logs
Expand All @@ -64,7 +63,7 @@ up: require create-if-missing.env ../owid-content tmp-downloads/owid_metadata.sq
set remain-on-exit on \; \
set-option -g default-shell $(SCRIPT_SHELL) \; \
new-window -n admin \
'devTools/docker/wait-for-mysql.sh && yarn run tsc-watch -b --onSuccess "yarn startAdminServer"' \; \
'devTools/docker/wait-for-mysql.sh && yarn startAdminDevServer' \; \
set remain-on-exit on \; \
new-window -n vite 'yarn run startSiteFront' \; \
set remain-on-exit on \; \
Expand All @@ -83,13 +82,12 @@ up.devcontainer: create-if-missing.env.devcontainer tmp-downloads/owid_metadata.
@echo '==> Building grapher'
yarn install
yarn lerna run build
yarn run tsc -b

@echo '==> Starting dev environment'
@mkdir -p logs
tmux new-session -s grapher \
-n admin \
'devTools/docker/wait-for-mysql.sh && yarn run tsc-watch -b --onSuccess "yarn startAdminServer"' \; \
'devTools/docker/wait-for-mysql.sh && yarn startAdminDevServer' \; \
set remain-on-exit on \; \
new-window -n vite 'yarn run startSiteFront' \; \
set remain-on-exit on \; \
Expand All @@ -109,15 +107,14 @@ up.full: require create-if-missing.env.full ../owid-content tmp-downloads/owid_m
@echo '==> Building grapher'
yarn install
yarn lerna run build
yarn run tsc -b

@echo '==> Starting dev environment'
tmux new-session -s grapher \
-n docker 'docker compose -f docker-compose.grapher.yml up' \; \
set remain-on-exit on \; \
set-option -g default-shell $(SCRIPT_SHELL) \; \
new-window -n admin \
'devTools/docker/wait-for-mysql.sh && yarn run tsc-watch -b --onSuccess "yarn startAdminServer"' \; \
'devTools/docker/wait-for-mysql.sh && yarn startAdminDevServer' \; \
set remain-on-exit on \; \
new-window -n vite 'yarn run startSiteFront' \; \
set remain-on-exit on \; \
Expand All @@ -134,7 +131,7 @@ up.full: require create-if-missing.env.full ../owid-content tmp-downloads/owid_m

migrate:
@echo '==> Running DB migrations'
rm -rf itsJustJavascript && yarn && yarn buildLerna && yarn buildTsc && yarn runDbMigrations
yarn && yarn buildLerna && yarn runDbMigrations

refresh:
@echo '==> Downloading chart data'
Expand All @@ -148,7 +145,7 @@ refresh:

refresh.pageviews:
@echo '==> Refreshing pageviews'
yarn && yarn buildLerna && yarn buildTsc && yarn refreshPageviews
yarn && yarn refreshPageviews

sync-images: sync-images.preflight-check
@echo '==> Syncing images to R2'
Expand Down
2 changes: 1 addition & 1 deletion db/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Run:
yarn typeorm migration:create db/migration/MigrationName
```

And then populate the file with the SQL statements to alter the tables, using [past migration files](./migration) for reference if needed. Don't forget to rebuild the JavaScript artifacts now from TypeScript view `yarn buildTsc`, then run migrations with `yarn runDbMigrations`.
And then populate the file with the SQL statements to alter the tables, using [past migration files](./migration) for reference if needed. Then run migrations with `yarn runDbMigrations`.

Make sure you write a **down** migration in case there is any chance things can go wrong we'd need to revert it.

Expand Down
2 changes: 1 addition & 1 deletion db/tests/run-db-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ docker compose -f docker-compose.dbtests.yml up -d

echo '==> Running migrations'

yarn typeorm migration:run -d itsJustJavascript/db/tests/dataSource.dbtests.js
yarn tsx node_modules/typeorm/cli.js migration:run -d db/tests/dataSource.dbtests.ts

echo '==> Running tests'
if ! yarn run jest --config=jest.db.config.js --runInBand # runInBand runs multiple test files serially - useful to avoid weird race conditions
Expand Down
4 changes: 2 additions & 2 deletions docs/grapher-admin-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ cp .env.example .env
Then run the three development processes:

```sh
yarn startTscServer
yarn startAdminServer
yarn startLernaWatcher
yarn startAdminDevServer
yarn startViteServer
```

Expand Down
20 changes: 18 additions & 2 deletions gitCms/GitCmsConstants.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
import * as path from "path"
import * as fs from "node:fs"

export const GIT_CMS_DEFAULT_BRANCH = "master"
export const GIT_CMS_READ_ROUTE = "/git-cms-read"
export const GIT_CMS_WRITE_ROUTE = "/git-cms-write"
export const GIT_CMS_DELETE_ROUTE = "/git-cms-delete"
export const GIT_CMS_PULL_ROUTE = "/git-cms-pull"
export const GIT_CMS_GLOB_ROUTE = "/git-cms-glob"

function findNearestGitRepo(startPath: string): string | null {
let currentPath = startPath
while (currentPath !== path.parse(currentPath).root) {
const gitPath = path.join(currentPath, ".git")
if (fs.existsSync(gitPath)) {
return currentPath
}
currentPath = path.dirname(currentPath)
}
return null
}

const repoPath = findNearestGitRepo(__dirname)

// todo: refactor GitCmsServer to be a class, and pass this in as a top level param
export const GIT_CMS_DIR =
typeof __dirname !== "undefined" ? __dirname + "/../../../owid-content" : ""
export const GIT_CMS_DIR = repoPath ? repoPath + "/../owid-content" : ""
export const GIT_CMS_REPO_URL = `https://github.com/owid/owid-content`
export const GIT_CMS_BASE_ROUTE = "/admin/"

Expand Down
26 changes: 13 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,31 @@
},
"packageManager": "[email protected]",
"scripts": {
"batchTagWithGpt": "node --enable-source-maps ./itsJustJavascript/baker/batchTagWithGpt.js",
"buildAndDeploySite": "node --enable-source-maps ./itsJustJavascript/baker/buildAndDeploySite.js",
"batchTagWithGpt": "tsx --tsconfig tsconfig.tsx.json baker/batchTagWithGpt.ts",
"buildAndDeploySite": "tsx --tsconfig tsconfig.tsx.json baker/buildAndDeploySite.ts",
"buildCoverage": "jest --coverage=true --coverageProvider=v8",
"buildLocalBake": "node --enable-source-maps ./itsJustJavascript/baker/buildLocalBake.js",
"buildLocalBake": "tsx --tsconfig tsconfig.tsx.json baker/buildLocalBake.ts",
"buildTsc": "tsc -b -verbose",
"buildLerna": "lerna run build",
"buildViteAdmin": "vite build --config vite.config-admin.mts",
"buildViteSite": "vite build --config vite.config-site.mts",
"buildVite": "yarn buildViteSite && yarn buildViteAdmin",
"bakeGdocPosts": "node --enable-source-maps ./itsJustJavascript/baker/bakeGdocPosts.js",
"bakeGdocPosts": "tsx --tsconfig tsconfig.tsx.json baker/bakeGdocPosts.ts",
"cleanTsc": "rm -rf itsJustJavascript && tsc -b -clean",
"deployContentPreview": "PREVIEW_BRANCH=${PREVIEW_BRANCH:-} ./ops/buildkite/deploy-content-preview",
"fetchServerStatus": "node --enable-source-maps ./itsJustJavascript/baker/liveCommit.js",
"fetchServerStatus": "tsx --tsconfig tsconfig.tsx.json baker/liveCommit.ts",
"fixLint": "eslint . --fix",
"fixPrettierAll": "yarn prettier --write \"**/*.{tsx,ts,jsx,js,json,md,html,css,scss,yml}\"",
"runRegionsUpdater": "node --enable-source-maps ./itsJustJavascript/devTools/regionsUpdater/update.js",
"runDbMigrations": "yarn typeorm migration:run -d itsJustJavascript/db/dataSource.js",
"refreshPageviews": "node --enable-source-maps ./itsJustJavascript/db/refreshPageviewsFromDatasette.js",
"revertLastDbMigration": "yarn typeorm migration:revert -d itsJustJavascript/db/dataSource.js",
"runRegionsUpdater": "tsx --tsconfig tsconfig.tsx.json devTools/regionsUpdater/update.ts",
"runDbMigrations": "tsx node_modules/typeorm/cli.js migration:run -d db/dataSource.ts",
"refreshPageviews": "tsx --tsconfig tsconfig.tsx.json db/refreshPageviewsFromDatasette.ts",
"revertLastDbMigration": "tsx node_modules/typeorm/cli.js migration:revert -d db/dataSource.ts",
"startAdminServer": "node --enable-source-maps ./itsJustJavascript/adminSiteServer/app.js",
"startAdminDevServer": "tsx watch --tsconfig tsconfig.tsx.json adminSiteServer/app.tsx",
"startLocalCloudflareFunctions": "wrangler pages dev localBake --compatibility-date 2023-10-09",
"startDeployQueueServer": "node --enable-source-maps ./itsJustJavascript/baker/startDeployQueueServer.js",
"startLernaWatcher": "lerna watch --scope '@ourworldindata/*' -- lerna run build --scope=\\$LERNA_PACKAGE_NAME --include-dependents",
"startTmuxServer": "node_modules/tmex/tmex dev \"yarn startTscServer\" \"yarn startLernaWatcher\" \"yarn startAdminServer\" \"yarn startViteServer\"",
"startTscServer": "tsc -b -verbose -watch",
"startTmuxServer": "node_modules/tmex/tmex dev \"yarn startLernaWatcher\" \"yarn startAdminDevServer\" \"yarn startViteServer\"",
"startViteServer": "vite dev",
"startSiteFront": "./devTools/vite/startVite.sh",
"startLocalBakeServer": "http-server ./localBake -p 3000",
Expand All @@ -39,7 +39,7 @@
"testLint": "eslint .",
"testPrettierAll": "yarn prettier --check \"**/*.{tsx,ts,jsx,js,json,md,html,css,scss,yml}\"",
"testJest": "lerna run buildTests && jest",
"testSiteNavigation": "node --enable-source-maps ./itsJustJavascript/devTools/navigationTest/navigationTest.js",
"testSiteNavigation": "tsx --tsconfig tsconfig.tsx.json devTools/navigationTest/navigationTest.ts",
"generateDbTypes": "npx @rmp135/sql-ts -c db/sql-ts/sql-ts-config.json"
},
"dependencies": {
Expand Down Expand Up @@ -249,7 +249,7 @@
"sass": "^1.69.5",
"tmex": "^1.0.8",
"topojson-server": "^3.0.1",
"tsc-watch": "^6.0.4",
"tsx": "^4.10.2",
"vite": "^4.4.10",
"vite-plugin-checker": "^0.6.4",
"vite-plugin-warmup": "^0.1.0",
Expand Down
8 changes: 8 additions & 0 deletions tsconfig.tsx.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// The top-level config has empty "files", which doesn't work for tsx
// (https://tsx.is/). Seems to be only a problem when using decorators in our
// code:
// https://github.com/privatenumber/tsx/issues/393
{
"extends": "./tsconfig.json",
"include": ["**/*"]
}
Loading

0 comments on commit cc65ad0

Please sign in to comment.