From 8be0001fd2de45c901b05dfef09cc092a4f50a89 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Wed, 9 Jul 2025 17:01:03 -0700 Subject: [PATCH 01/11] Externalize shared dependencies Break out common config Signed-off-by: Sebastian (Tiedtke) Huckleberry --- packages/react-components/vite.config.ts | 54 +++--------------------- packages/react-console/vite.config.ts | 54 +++--------------------- packages/vite.common.ts | 54 ++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 94 deletions(-) create mode 100644 packages/vite.common.ts diff --git a/packages/react-components/vite.config.ts b/packages/react-components/vite.config.ts index bbe817b..60c1b4c 100644 --- a/packages/react-components/vite.config.ts +++ b/packages/react-components/vite.config.ts @@ -1,50 +1,10 @@ -import tailwindcss from '@tailwindcss/vite' -import react from '@vitejs/plugin-react' import { resolve } from 'path' -import path from 'path' -import { defineConfig } from 'vite' -// https://vite.dev/config/ -export default defineConfig({ - plugins: [react(), tailwindcss()], - resolve: { - alias: { - react: path.resolve('./node_modules/react'), - 'react-dom': path.resolve('./node_modules/react-dom'), - 'react-router-dom': path.resolve('./node_modules/react-router-dom'), - 'react-router': path.resolve('./node_modules/react-router'), - }, - }, - build: { - outDir: 'dist', - emptyOutDir: false, - lib: { - entry: resolve(__dirname, 'src/index.tsx'), - name: 'RunmeComponents', - formats: ['es', 'cjs'], - fileName: (format) => - format === 'es' ? 'react-components.mjs' : 'react-components.cjs', - }, - rollupOptions: { - external: [ - 'react', - 'react-dom', - 'react/jsx-runtime', - '@radix-ui/react-dropdown-menu', - '@radix-ui/react-icons', - '@radix-ui/themes', - '@monaco-editor/react', - 'react-markdown', - 'react-router', - 'react-router-dom', - ], - output: { - globals: { - react: 'React', - 'react-dom': 'ReactDOM', - 'react/jsx-runtime': 'React', - }, - }, - }, - }, +import { createSharedConfig } from '../vite.common' + +export default createSharedConfig({ + entry: resolve(__dirname, 'src/index.tsx'), + name: 'RunmeComponents', + fileName: (format) => + format === 'es' ? 'react-components.mjs' : 'react-components.cjs', }) diff --git a/packages/react-console/vite.config.ts b/packages/react-console/vite.config.ts index a4b2165..a1e701c 100644 --- a/packages/react-console/vite.config.ts +++ b/packages/react-console/vite.config.ts @@ -1,50 +1,10 @@ -import tailwindcss from '@tailwindcss/vite' -import react from '@vitejs/plugin-react' import { resolve } from 'path' -import path from 'path' -import { defineConfig } from 'vite' -// https://vite.dev/config/ -export default defineConfig({ - plugins: [react(), tailwindcss()], - resolve: { - alias: { - react: path.resolve('./node_modules/react'), - 'react-dom': path.resolve('./node_modules/react-dom'), - 'react-router-dom': path.resolve('./node_modules/react-router-dom'), - 'react-router': path.resolve('./node_modules/react-router'), - }, - }, - build: { - outDir: 'dist', - emptyOutDir: false, - lib: { - entry: resolve(__dirname, 'src/index.tsx'), - name: 'RunmeConsole', - formats: ['es', 'cjs'], - fileName: (format) => - format === 'es' ? 'react-console.mjs' : 'react-console.cjs', - }, - rollupOptions: { - external: [ - 'react', - 'react-dom', - 'react/jsx-runtime', - '@radix-ui/react-dropdown-menu', - '@radix-ui/react-icons', - '@radix-ui/themes', - '@monaco-editor/react', - 'react-markdown', - 'react-router', - 'react-router-dom', - ], - output: { - globals: { - react: 'React', - 'react-dom': 'ReactDOM', - 'react/jsx-runtime': 'React', - }, - }, - }, - }, +import { createSharedConfig } from '../vite.common' + +export default createSharedConfig({ + entry: resolve(__dirname, 'src/index.tsx'), + name: 'RunmeConsole', + fileName: (format) => + format === 'es' ? 'react-console.mjs' : 'react-console.cjs', }) diff --git a/packages/vite.common.ts b/packages/vite.common.ts new file mode 100644 index 0000000..577de04 --- /dev/null +++ b/packages/vite.common.ts @@ -0,0 +1,54 @@ +import tailwindcss from '@tailwindcss/vite' +import react from '@vitejs/plugin-react' +import path from 'path' +import { defineConfig } from 'vite' + +export function createSharedConfig({ entry, name, fileName }) { + return defineConfig({ + plugins: [react(), tailwindcss()], + resolve: { + alias: { + react: path.resolve('./node_modules/react'), + 'react-dom': path.resolve('./node_modules/react-dom'), + 'react-router-dom': path.resolve('./node_modules/react-router-dom'), + 'react-router': path.resolve('./node_modules/react-router'), + }, + }, + build: { + outDir: 'dist', + emptyOutDir: false, + lib: { + entry, + name, + formats: ['es', 'cjs'], + fileName, + }, + rollupOptions: { + external: [ + '@buf/bufbuild_protovalidate.bufbuild_es', + '@buf/googleapis_googleapis.bufbuild_es', + '@bufbuild/protobuf', + '@bufbuild/protobuf/codegenv1', + '@bufbuild/protobuf/wkt', + 'react', + 'react-dom', + 'react/jsx-runtime', + '@radix-ui/react-dropdown-menu', + '@radix-ui/react-icons', + '@radix-ui/themes', + '@monaco-editor/react', + 'react-markdown', + 'react-router', + 'react-router-dom', + ], + output: { + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + 'react/jsx-runtime': 'React', + }, + }, + }, + }, + }) +} From 0dba30eca2b4e7f62af4330040637ded2df3862d Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:12:18 -0700 Subject: [PATCH 02/11] Build console for dev (not hot-bundled) Signed-off-by: Sebastian (Tiedtke) Huckleberry --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 804d28a..d3fb917 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ npm run clean Start the development server for sample app using the components: ```sh {"name":"dev"} +npm run build:console npm run dev ``` From 5fda7ac4c85c0433b31e8919e98b0debd3c7bb92 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:17:24 -0700 Subject: [PATCH 03/11] Track version Signed-off-by: Sebastian (Tiedtke) Huckleberry --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 343ad0c..d4bce54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9358,7 +9358,7 @@ }, "packages/react-components": { "name": "@runmedev/react-components", - "version": "3.14.1", + "version": "3.14.2", "license": "Apache-2.0", "devDependencies": { "@runmedev/react-console": "file:../react-console" @@ -9375,7 +9375,7 @@ }, "packages/react-console": { "name": "@runmedev/react-console", - "version": "3.14.1", + "version": "3.14.2", "license": "Apache-2.0", "peerDependencies": { "@bufbuild/protobuf": "^2.2.3", From 41a06eb9ab53a70454db8fa8d77e8719c44d6408 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:17:34 -0700 Subject: [PATCH 04/11] Move options into common constructor object Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .../src/contexts/SettingsContext.tsx | 14 ++++--- .../react-console/src/components/Console.tsx | 12 +++--- packages/react-console/src/streams.ts | 38 ++++++++----------- 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/packages/react-components/src/contexts/SettingsContext.tsx b/packages/react-components/src/contexts/SettingsContext.tsx index bda2398..54b0731 100644 --- a/packages/react-components/src/contexts/SettingsContext.tsx +++ b/packages/react-components/src/contexts/SettingsContext.tsx @@ -123,16 +123,18 @@ export const SettingsProvider = ({ // reset runner error setRunnerError(null) - const stream = new Streams( - { knownID: `check_${ulid()}`, runID: genRunID(), sequence: 0 }, - { + const stream = new Streams({ + knownID: `check_${ulid()}`, + runID: genRunID(), + sequence: 0, + options: { runnerEndpoint: settings.webApp.runner, authorization: { bearerToken: getSessionToken(), }, - autoReconnect: false, // let it fail, we're interested in the error - } - ) + autoReconnect: false, // let it fail, the user is interested in the error + }, + }) const subs: Subscription[] = [] subs.push( diff --git a/packages/react-console/src/components/Console.tsx b/packages/react-console/src/components/Console.tsx index 6dbce17..e0d34fc 100644 --- a/packages/react-console/src/components/Console.tsx +++ b/packages/react-console/src/components/Console.tsx @@ -73,14 +73,16 @@ function Console({ } console.log('Creating stream', blockID, runID, runner.endpoint) - return new Streams( - { knownID: blockID, runID, sequence }, - { + return new Streams({ + knownID: blockID, + runID, + sequence, + options: { runnerEndpoint: runner.endpoint, authorization: runner.authorization, autoReconnect: runner.reconnect, - } - ) + }, + }) }, [blockID, runID, sequence, runner]) useEffect(() => { diff --git a/packages/react-console/src/streams.ts b/packages/react-console/src/streams.ts index d5d43b6..b14e49b 100644 --- a/packages/react-console/src/streams.ts +++ b/packages/react-console/src/streams.ts @@ -70,6 +70,17 @@ type Latency = { updatedAt: bigint } +type StreamsProps = { + knownID: string + runID: string + sequence: number + options: { + runnerEndpoint: string + authorization: Authorization + autoReconnect: boolean + } +} + class Streams { private callback: VSCodeEvent | undefined @@ -156,35 +167,16 @@ class Streams { private readonly authorization: Authorization private readonly autoReconnect: boolean - constructor( - { - knownID, - runID, - sequence, - }: { - knownID: string - runID: string - sequence: number - }, - { - runnerEndpoint, - authorization, - autoReconnect, - }: { - runnerEndpoint: string - authorization: Authorization - autoReconnect: boolean - } - ) { + constructor({ knownID, runID, sequence, options }: StreamsProps) { // Set the identifiers this.knownID = knownID this.runID = runID this.sequence = sequence // Assign configuration - this.runnerEndpoint = runnerEndpoint - this.authorization = authorization - this.autoReconnect = autoReconnect + this.runnerEndpoint = options.runnerEndpoint + this.authorization = options.authorization + this.autoReconnect = options.autoReconnect // Turn the connectables into hot observables this._latenciesConnectable.connect() From 8e828b5fe5b1c39588ace465b83275dc7ee4c440 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:25:43 -0700 Subject: [PATCH 05/11] Add GHA workflow Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .github/workflows/bundle.yaml | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/bundle.yaml diff --git a/.github/workflows/bundle.yaml b/.github/workflows/bundle.yaml new file mode 100644 index 0000000..6dea015 --- /dev/null +++ b/.github/workflows/bundle.yaml @@ -0,0 +1,36 @@ +name: Bundle +on: + pull_request: + push: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + DO_NOT_TRACK: 1 + SHELL: /bin/bash + +jobs: + build: + strategy: + matrix: + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: package-lock.json + - name: Install dependencies + run: npm ci + - name: Build + run: npm run build + - name: 📦 Bundle + uses: stateful/runme-action@v2 + with: + workflows: runme run setup build \ No newline at end of file From ce5559c8e7330f3aaed38aa9bcfdfda0174984a4 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:29:44 -0700 Subject: [PATCH 06/11] Configure NPM Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .github/workflows/bundle.yaml | 4 +--- README.md | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/bundle.yaml b/.github/workflows/bundle.yaml index 6dea015..897ad57 100644 --- a/.github/workflows/bundle.yaml +++ b/.github/workflows/bundle.yaml @@ -28,9 +28,7 @@ jobs: cache-dependency-path: package-lock.json - name: Install dependencies run: npm ci - - name: Build - run: npm run build - name: 📦 Bundle uses: stateful/runme-action@v2 with: - workflows: runme run setup build \ No newline at end of file + workflows: runme run configure setup build \ No newline at end of file diff --git a/README.md b/README.md index d3fb917..25474cf 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,12 @@ This project is structured as an npm monorepo with two packages: ## Getting Started +Set up NPM to use Buf registry: + +```sh {"name":"configure","terminalRows":"5"} +npm config set @buf:registry https://buf.build/gen/npm/v1 +``` + Install all dependencies (hoisted to the root): ```sh {"name":"setup"} From 1f65c9de6d0b97f24119b791fbd8e8a32a81a9d1 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:30:17 -0700 Subject: [PATCH 07/11] Remove caching for now Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .github/workflows/bundle.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/bundle.yaml b/.github/workflows/bundle.yaml index 897ad57..80676a8 100644 --- a/.github/workflows/bundle.yaml +++ b/.github/workflows/bundle.yaml @@ -24,8 +24,6 @@ jobs: uses: actions/setup-node@v4 with: node-version: '20' - cache: 'npm' - cache-dependency-path: package-lock.json - name: Install dependencies run: npm ci - name: 📦 Bundle From be8ddfbf6b831e634bc38b0d5957d453a982b30d Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:31:05 -0700 Subject: [PATCH 08/11] Runme already handles installing deps Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .github/workflows/bundle.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/bundle.yaml b/.github/workflows/bundle.yaml index 80676a8..5178b2e 100644 --- a/.github/workflows/bundle.yaml +++ b/.github/workflows/bundle.yaml @@ -24,9 +24,10 @@ jobs: uses: actions/setup-node@v4 with: node-version: '20' - - name: Install dependencies - run: npm ci - name: 📦 Bundle uses: stateful/runme-action@v2 with: - workflows: runme run configure setup build \ No newline at end of file + workflows: | + configure + setup + build \ No newline at end of file From 928566146cd378bd8bf59ffab8ac90796b147c4b Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:35:36 -0700 Subject: [PATCH 09/11] Break out Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .github/workflows/bundle.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bundle.yaml b/.github/workflows/bundle.yaml index 5178b2e..a24694a 100644 --- a/.github/workflows/bundle.yaml +++ b/.github/workflows/bundle.yaml @@ -24,10 +24,13 @@ jobs: uses: actions/setup-node@v4 with: node-version: '20' - - name: 📦 Bundle + - name: Install dependencies uses: stateful/runme-action@v2 with: workflows: | configure setup - build \ No newline at end of file + - name: 📦 Bundle + uses: stateful/runme-action@v2 + with: + workflows: build \ No newline at end of file From 6cb7a183448ac41c2f9d1f48184f9e30f91ac825 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:37:00 -0700 Subject: [PATCH 10/11] Checkout repo Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .github/workflows/bundle.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/bundle.yaml b/.github/workflows/bundle.yaml index a24694a..0a043e9 100644 --- a/.github/workflows/bundle.yaml +++ b/.github/workflows/bundle.yaml @@ -20,6 +20,10 @@ jobs: os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true - name: Setup Node.js uses: actions/setup-node@v4 with: From 0eb9a057417d48b708c5dd9cc6f41c63ca148bd1 Mon Sep 17 00:00:00 2001 From: "Sebastian (Tiedtke) Huckleberry" Date: Thu, 10 Jul 2025 09:37:59 -0700 Subject: [PATCH 11/11] Revert "Remove caching for now" This reverts commit 1f65c9de6d0b97f24119b791fbd8e8a32a81a9d1. Signed-off-by: Sebastian (Tiedtke) Huckleberry --- .github/workflows/bundle.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/bundle.yaml b/.github/workflows/bundle.yaml index 0a043e9..3688af2 100644 --- a/.github/workflows/bundle.yaml +++ b/.github/workflows/bundle.yaml @@ -28,6 +28,8 @@ jobs: uses: actions/setup-node@v4 with: node-version: '20' + cache: 'npm' + cache-dependency-path: package-lock.json - name: Install dependencies uses: stateful/runme-action@v2 with: