feat: api reorg (#118)

* feat: reorg into workspaces

* build: commands update

* ci: update build steps

* ci: publish from dist

* feat: api scaffold

* chore: clean up dist
This commit is contained in:
Marc 2023-06-27 13:54:34 -04:00 committed by GitHub
parent 7e105901c2
commit 294e8d40a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 274 additions and 54 deletions

View file

@ -48,9 +48,9 @@ jobs:
run: | run: |
. script/bootstrap . script/bootstrap
yarn lint yarn lint
build: build-app:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Build name: Build App
needs: setup needs: setup
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@ -74,17 +74,50 @@ jobs:
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}-${{ env.NODE_VERSION }}-parcel key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}-${{ env.NODE_VERSION }}-parcel
- run: | - run: |
. script/bootstrap . script/bootstrap
yarn build yarn build:app
- name: Build Artifacts - name: Build Artifacts
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
name: build-artifacts name: build-artifacts
path: dist path: packages/app/dist
build-api:
runs-on: ubuntu-latest
name: Build API
needs: setup
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
id: node-setup
with:
node-version: ${{ env.NODE_VERSION }}
- name: Yarn cache
uses: actions/cache@v3
id: yarn-cache-restore
with:
path: |
.yarn
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}-${{ env.NODE_VERSION }}
- name: Parcel cache
uses: actions/cache@v3
id: parcel-cache-restore
with:
path: |
.parcel-cache
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}-${{ env.NODE_VERSION }}-parcel
- run: |
. script/bootstrap
yarn build:api
- name: Build Artifacts
uses: actions/upload-artifact@v3
with:
name: build-artifacts-api
path: packages/api/dist
preview: preview:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Deploy preview name: Deploy preview
if: ${{ github.ref != 'refs/heads/main' }} if: ${{ github.ref != 'refs/heads/main' }}
needs: build needs: build-app
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: actions/setup-node@v3 - uses: actions/setup-node@v3
@ -103,14 +136,14 @@ jobs:
uses: actions/download-artifact@v3 uses: actions/download-artifact@v3
with: with:
name: build-artifacts name: build-artifacts
path: dist path: packages/app/dist
- name: Deploy - name: Deploy
id: preview-deploy id: preview-deploy
env: env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_TOKEN }} NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
run: | run: |
yarn netlify deploy --dir=dist --json | jq .deploy_url > output.log yarn netlify deploy --dir=packages/app/dist --json | jq .deploy_url > output.log
echo "::set-output name=draft-url::$(cat output.log)" echo "::set-output name=draft-url::$(cat output.log)"
- name: Report - name: Report
uses: actions/github-script@v6 uses: actions/github-script@v6
@ -128,7 +161,7 @@ jobs:
deploy: deploy:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Deploy name: Deploy
needs: build needs: build-app
if: ${{ github.ref == 'refs/heads/main' }} if: ${{ github.ref == 'refs/heads/main' }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@ -157,4 +190,4 @@ jobs:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_TOKEN }} NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
run: | run: |
yarn netlify deploy --dir=dist --prod yarn netlify deploy --dir=packages/app/dist --prod

1
.gitignore vendored
View file

@ -11,6 +11,7 @@
.parcel-cache .parcel-cache
parcel-bundle-reports parcel-bundle-reports
dist dist
packages/**/dist
# Logs # Logs
logs logs

View file

@ -3,7 +3,7 @@
[dev] [dev]
command = "yarn start:parcel" command = "yarn start:parcel"
publish = "dist" publish = "packages/app/dist"
targetPort = 1234 targetPort = 1234
port = 8080 port = 8080
framework = "parcel" framework = "parcel"

View file

@ -4,16 +4,20 @@
"version": "1.0.0", "version": "1.0.0",
"packageManager": "yarn@3.3.1", "packageManager": "yarn@3.3.1",
"license": "GPL-3.0", "license": "GPL-3.0",
"workspaces": [
"packages/*"
],
"scripts": { "scripts": {
"start": "netlify dev", "start:app": "yarn workspace app start",
"start:parcel": "parcel serve src/index.html", "start:api": "yarn workspace api start",
"lint": "eslint src", "lint": "eslint packages/**/*.ts",
"lint:fix": "eslint src netlify --fix", "lint:fix": "eslint packages/**/*.ts netlify --fix",
"types": "tsc --noEmit", "types": "tsc --noEmit",
"clean": "rm -rf dist/*", "clean": "rm -rf dist/*",
"build": "parcel build src/index.html", "build:app": "yarn workspace app build",
"build:watch": "parcel watch src/index.html", "build:app:watch": "yarn workspace app watch",
"build:bundlesize": "parcel build src/index.html --reporter @parcel/reporter-bundle-analyzer" "build:app:bundlesize": "yarn workspace app build:bundlesize",
"build:api": "yarn workspace api build"
}, },
"devDependencies": { "devDependencies": {
"@parcel/reporter-bundle-analyzer": "^2.9.3", "@parcel/reporter-bundle-analyzer": "^2.9.3",
@ -39,13 +43,6 @@
"prettier": "2.7.1", "prettier": "2.7.1",
"typescript": "^4.9.4" "typescript": "^4.9.4"
}, },
"dependencies": {
"@material-ui/core": "4.12.4",
"@material-ui/icons": "4.11.3",
"htmlparser2": "8.0.1",
"preact": "10.11.3",
"react-query": "3.39.2"
},
"resolutions": { "resolutions": {
"minimist": "^1.2.6" "minimist": "^1.2.6"
}, },

19
packages/api/package.json Normal file
View file

@ -0,0 +1,19 @@
{
"name": "api",
"private": true,
"version": "1.0.0",
"type": "module",
"license": "GPL-3.0",
"scripts": {
"start": "test -f dist/index.js && yarn node dist/index.js",
"build": "yarn tsc"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"@types/express": "^4.17.17",
"@types/node": "^20.3.2",
"typescript": "*"
}
}

14
packages/api/src/index.ts Normal file
View file

@ -0,0 +1,14 @@
import {
type Express,
type Request,
type Response,
default as express,
} from 'express'
const app: Express = express()
app.get('/', (req: Request, res: Response) => {
res.send('ok')
})
app.listen(8081, () => {})

View file

@ -0,0 +1,10 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"target": "es2022",
"moduleResolution": "node",
"esModuleInterop": true,
"outDir": "dist"
},
"include": ["src/**/*"]
}

29
packages/app/package.json Normal file
View file

@ -0,0 +1,29 @@
{
"name": "app",
"private": true,
"version": "1.0.0",
"packageManager": "yarn@3.3.1",
"license": "GPL-3.0",
"scripts": {
"start": "netlify dev",
"start:parcel": "parcel serve src/index.html",
"build": "parcel build src/index.html",
"build:watch": "parcel watch src/index.html",
"build:bundlesize": "parcel build src/index.html --reporter @parcel/reporter-bundle-analyzer"
},
"dependencies": {
"@material-ui/core": "4.12.4",
"@material-ui/icons": "4.11.3",
"htmlparser2": "8.0.1",
"preact": "10.11.3",
"react-query": "3.39.2"
},
"resolutions": {
"minimist": "^1.2.6"
},
"alias": {
"react": "preact/compat",
"react-dom": "preact/compat",
"preact/jsx-dev-runtime": "preact/jsx-runtime"
}
}

177
yarn.lock
View file

@ -3647,6 +3647,49 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/body-parser@npm:*":
version: 1.19.2
resolution: "@types/body-parser@npm:1.19.2"
dependencies:
"@types/connect": "*"
"@types/node": "*"
checksum: e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40
languageName: node
linkType: hard
"@types/connect@npm:*":
version: 3.4.35
resolution: "@types/connect@npm:3.4.35"
dependencies:
"@types/node": "*"
checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641
languageName: node
linkType: hard
"@types/express-serve-static-core@npm:^4.17.33":
version: 4.17.35
resolution: "@types/express-serve-static-core@npm:4.17.35"
dependencies:
"@types/node": "*"
"@types/qs": "*"
"@types/range-parser": "*"
"@types/send": "*"
checksum: cc8995d10c6feda475ec1b3a0e69eb0f35f21ab6b49129ad5c6f279e0bc5de8175bc04ec51304cb79a43eec3ed2f5a1e01472eb6d5f827b8c35c6ca8ad24eb6e
languageName: node
linkType: hard
"@types/express@npm:^4.17.17":
version: 4.17.17
resolution: "@types/express@npm:4.17.17"
dependencies:
"@types/body-parser": "*"
"@types/express-serve-static-core": ^4.17.33
"@types/qs": "*"
"@types/serve-static": "*"
checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da
languageName: node
linkType: hard
"@types/graceful-fs@npm:^4.1.3": "@types/graceful-fs@npm:^4.1.3":
version: 4.1.5 version: 4.1.5
resolution: "@types/graceful-fs@npm:4.1.5" resolution: "@types/graceful-fs@npm:4.1.5"
@ -3663,6 +3706,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/http-errors@npm:*":
version: 2.0.1
resolution: "@types/http-errors@npm:2.0.1"
checksum: 3bb0c50b0a652e679a84c30cd0340d696c32ef6558518268c238840346c077f899315daaf1c26c09c57ddd5dc80510f2a7f46acd52bf949e339e35ed3ee9654f
languageName: node
linkType: hard
"@types/http-proxy@npm:^1.17.8": "@types/http-proxy@npm:^1.17.8":
version: 1.17.9 version: 1.17.9
resolution: "@types/http-proxy@npm:1.17.9" resolution: "@types/http-proxy@npm:1.17.9"
@ -3711,6 +3761,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/mime@npm:*":
version: 3.0.1
resolution: "@types/mime@npm:3.0.1"
checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7
languageName: node
linkType: hard
"@types/mime@npm:^1":
version: 1.3.2
resolution: "@types/mime@npm:1.3.2"
checksum: 0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd
languageName: node
linkType: hard
"@types/node@npm:*": "@types/node@npm:*":
version: 16.3.1 version: 16.3.1
resolution: "@types/node@npm:16.3.1" resolution: "@types/node@npm:16.3.1"
@ -3718,6 +3782,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:^20.3.2":
version: 20.3.2
resolution: "@types/node@npm:20.3.2"
checksum: 5929ce2b9b12b1e2a2304a0921a953c72a81f5753ad39ac43b99ce6312fbb2b4fb5bc6b60d64a2550704e3223cd5de1299467d36085ac69888899db978f2653a
languageName: node
linkType: hard
"@types/normalize-package-data@npm:^2.4.1": "@types/normalize-package-data@npm:^2.4.1":
version: 2.4.1 version: 2.4.1
resolution: "@types/normalize-package-data@npm:2.4.1" resolution: "@types/normalize-package-data@npm:2.4.1"
@ -3746,6 +3817,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/qs@npm:*":
version: 6.9.7
resolution: "@types/qs@npm:6.9.7"
checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba
languageName: node
linkType: hard
"@types/range-parser@npm:*":
version: 1.2.4
resolution: "@types/range-parser@npm:1.2.4"
checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95
languageName: node
linkType: hard
"@types/react-transition-group@npm:^4.2.0": "@types/react-transition-group@npm:^4.2.0":
version: 4.4.2 version: 4.4.2
resolution: "@types/react-transition-group@npm:4.4.2" resolution: "@types/react-transition-group@npm:4.4.2"
@ -3787,6 +3872,27 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/send@npm:*":
version: 0.17.1
resolution: "@types/send@npm:0.17.1"
dependencies:
"@types/mime": ^1
"@types/node": "*"
checksum: 10b620a5960058ef009afbc17686f680d6486277c62f640845381ec4baa0ea683fdd77c3afea4803daf5fcddd3fb2972c8aa32e078939f1d4e96f83195c89793
languageName: node
linkType: hard
"@types/serve-static@npm:*":
version: 1.15.2
resolution: "@types/serve-static@npm:1.15.2"
dependencies:
"@types/http-errors": "*"
"@types/mime": "*"
"@types/node": "*"
checksum: 15c261dbfc57890f7cc17c04d5b22b418dfa0330c912b46c5d8ae2064da5d6f844ef7f41b63c7f4bbf07675e97ebe6ac804b032635ec742ae45d6f1274259b3e
languageName: node
linkType: hard
"@types/stack-utils@npm:^2.0.0": "@types/stack-utils@npm:^2.0.0":
version: 2.0.1 version: 2.0.1
resolution: "@types/stack-utils@npm:2.0.1" resolution: "@types/stack-utils@npm:2.0.1"
@ -4494,6 +4600,29 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"api@workspace:packages/api":
version: 0.0.0-use.local
resolution: "api@workspace:packages/api"
dependencies:
"@types/express": ^4.17.17
"@types/node": ^20.3.2
express: ^4.18.2
typescript: "*"
languageName: unknown
linkType: soft
"app@workspace:packages/app":
version: 0.0.0-use.local
resolution: "app@workspace:packages/app"
dependencies:
"@material-ui/core": 4.12.4
"@material-ui/icons": 4.11.3
htmlparser2: 8.0.1
preact: 10.11.3
react-query: 3.39.2
languageName: unknown
linkType: soft
"aproba@npm:^1.0.3": "aproba@npm:^1.0.3":
version: 1.2.0 version: 1.2.0
resolution: "aproba@npm:1.2.0" resolution: "aproba@npm:1.2.0"
@ -5371,17 +5500,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"caniuse-lite@npm:^1.0.30001219": "caniuse-lite@npm:^1.0.30001219, caniuse-lite@npm:^1.0.30001370":
version: 1.0.30001243 version: 1.0.30001508
resolution: "caniuse-lite@npm:1.0.30001243" resolution: "caniuse-lite@npm:1.0.30001508"
checksum: 912cf885036847a8b6972cd65170d9f355a08b08cfd6b06bcaa8de965755ee5b35a4bbe4eb73844aac313a42e2038ae0971a5b4c9b94d631db2f073c906ce1d6 checksum: 0a083ed92194d87e608fc35cac65830a27900249729eb8a68e270f866f2c4f83396c2e54eb47b0ef71360682174dd74e2e68eac0b8d407d125611c7bc12488eb
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.30001370":
version: 1.0.30001373
resolution: "caniuse-lite@npm:1.0.30001373"
checksum: cd2f027e2fcf66ed3b0e3eccec89df871f951f2e7600944fae2c3f6f1c37ac82392e573c279e15bf851b75f9696472e38d33fd52d964819ffb8af7af4078ceba
languageName: node languageName: node
linkType: hard linkType: hard
@ -7587,7 +7709,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"express@npm:4.18.2": "express@npm:4.18.2, express@npm:^4.18.2":
version: 4.18.2 version: 4.18.2
resolution: "express@npm:4.18.2" resolution: "express@npm:4.18.2"
dependencies: dependencies:
@ -14164,8 +14286,6 @@ resolve@^1.20.0:
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "rss-reader@workspace:." resolution: "rss-reader@workspace:."
dependencies: dependencies:
"@material-ui/core": 4.12.4
"@material-ui/icons": 4.11.3
"@parcel/reporter-bundle-analyzer": ^2.9.3 "@parcel/reporter-bundle-analyzer": ^2.9.3
"@parcel/validator-typescript": ^2.9.3 "@parcel/validator-typescript": ^2.9.3
"@tophat/eslint-config": 3.3.0 "@tophat/eslint-config": 3.3.0
@ -14183,13 +14303,10 @@ resolve@^1.20.0:
eslint-plugin-prettier: 4.2.1 eslint-plugin-prettier: 4.2.1
eslint-plugin-react: 7.31.10 eslint-plugin-react: 7.31.10
eslint-plugin-react-hooks: 4.6.0 eslint-plugin-react-hooks: 4.6.0
htmlparser2: 8.0.1
jest: 29.3.1 jest: 29.3.1
netlify-cli: ^15.7.0 netlify-cli: ^15.7.0
parcel: ^2.9.3 parcel: ^2.9.3
preact: 10.11.3
prettier: 2.7.1 prettier: 2.7.1
react-query: 3.39.2
typescript: ^4.9.4 typescript: ^4.9.4
languageName: unknown languageName: unknown
linkType: soft linkType: soft
@ -15711,6 +15828,16 @@ resolve@^1.20.0:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@npm:*, typescript@npm:^5.0.0, typescript@npm:^5.0.4":
version: 5.1.3
resolution: "typescript@npm:5.1.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: d9d51862d98efa46534f2800a1071a613751b1585dc78884807d0c179bcd93d6e9d4012a508e276742f5f33c480adefc52ffcafaf9e0e00ab641a14cde9a31c7
languageName: node
linkType: hard
"typescript@npm:^4.9.4": "typescript@npm:^4.9.4":
version: 4.9.4 version: 4.9.4
resolution: "typescript@npm:4.9.4" resolution: "typescript@npm:4.9.4"
@ -15721,13 +15848,13 @@ resolve@^1.20.0:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@npm:^5.0.0, typescript@npm:^5.0.4": "typescript@patch:typescript@*#~builtin<compat/typescript>, typescript@patch:typescript@^5.0.0#~builtin<compat/typescript>, typescript@patch:typescript@^5.0.4#~builtin<compat/typescript>":
version: 5.1.3 version: 5.1.3
resolution: "typescript@npm:5.1.3" resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin<compat/typescript>::version=5.1.3&hash=ad5954"
bin: bin:
tsc: bin/tsc tsc: bin/tsc
tsserver: bin/tsserver tsserver: bin/tsserver
checksum: d9d51862d98efa46534f2800a1071a613751b1585dc78884807d0c179bcd93d6e9d4012a508e276742f5f33c480adefc52ffcafaf9e0e00ab641a14cde9a31c7 checksum: 32a25b2e128a4616f999d4ee502aabb1525d5647bc8955e6edf05d7fbc53af8aa98252e2f6ba80bcedfc0260c982b885f3c09cfac8bb65d2924f3133ad1e1e62
languageName: node languageName: node
linkType: hard linkType: hard
@ -15741,16 +15868,6 @@ resolve@^1.20.0:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@patch:typescript@^5.0.0#~builtin<compat/typescript>, typescript@patch:typescript@^5.0.4#~builtin<compat/typescript>":
version: 5.1.3
resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin<compat/typescript>::version=5.1.3&hash=ad5954"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 32a25b2e128a4616f999d4ee502aabb1525d5647bc8955e6edf05d7fbc53af8aa98252e2f6ba80bcedfc0260c982b885f3c09cfac8bb65d2924f3133ad1e1e62
languageName: node
linkType: hard
"uid-safe@npm:2.1.5": "uid-safe@npm:2.1.5":
version: 2.1.5 version: 2.1.5
resolution: "uid-safe@npm:2.1.5" resolution: "uid-safe@npm:2.1.5"