This is an automated email from the ASF dual-hosted git repository.
harishgokul01 pushed a commit to branch development
in repository https://gitbox.apache.org/repos/asf/incubator-resilientdb.git
The following commit(s) were added to refs/heads/development by this push:
new bf9a7f26 ResLens Vercel deployment - Workflow Test
bf9a7f26 is described below
commit bf9a7f263b9d559e068e8471d5dfe28ec116981c
Author: harish876 <[email protected]>
AuthorDate: Tue Jan 20 00:13:56 2026 +0000
ResLens Vercel deployment - Workflow Test
---
.github/deploy-ecosystem-configs.yml | 46 ++++++
.github/workflows/deploy-ecosystem.yml | 204 +++++++++++++++++++++++++
ecosystem/monitoring/reslens/.gitignore | 3 +-
ecosystem/monitoring/reslens/package-lock.json | 35 +++++
ecosystem/monitoring/reslens/package.json | 1 +
ecosystem/monitoring/reslens/vercel.json | 8 -
ecosystem/monitoring/reslens/vercel.ts | 27 ++++
7 files changed, 315 insertions(+), 9 deletions(-)
diff --git a/.github/deploy-ecosystem-configs.yml
b/.github/deploy-ecosystem-configs.yml
new file mode 100644
index 00000000..35ca20a7
--- /dev/null
+++ b/.github/deploy-ecosystem-configs.yml
@@ -0,0 +1,46 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Configuration for Vercel deployments from ecosystem folder
+# Add projects here to enable automatic deployment
+
+projects:
+ - name: reslens
+ path: ecosystem/monitoring/reslens
+ # Vercel project configuration (optional)
+ # If vercel_project_id is specified, uses existing project
+ # If not specified, Vercel will create a new project on first deploy
+ # vercel_org_id: your-org-id # Optional: defaults to VERCEL_ORG_ID secret
+ vercel_project_id: prj_g5KA6QQ36ltVydRW6TUKJhgdgYjT # Optional: existing
Vercel project ID
+ # Optional: override default branch trigger
+ # branches:
+ # - main
+ # - master
+ # - development
+ # Optional: additional paths to monitor for changes
+ # additional_paths:
+ # - ecosystem/shared/**
+ # Optional: project-specific environment variables
+ # env:
+ # - name: CUSTOM_VAR
+ # value: custom_value
+
+ # Add more projects here:
+ # - name: another-project
+ # path: ecosystem/another/project
diff --git a/.github/workflows/deploy-ecosystem.yml
b/.github/workflows/deploy-ecosystem.yml
new file mode 100644
index 00000000..12a8de2a
--- /dev/null
+++ b/.github/workflows/deploy-ecosystem.yml
@@ -0,0 +1,204 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: Deploy Ecosystem Projects to Vercel
+
+on:
+ push:
+ branches:
+ - development
+ paths:
+ - 'ecosystem/**'
+ - '.github/workflows/deploy-ecosystem.yml'
+ - '.github/deploy-ecosystem-configs.yml'
+ workflow_dispatch:
+ inputs:
+ project_name:
+ description: 'Specific project to deploy (leave empty to deploy all
changed projects)'
+ required: false
+ type: string
+ force_deploy_all:
+ description: 'Force deploy all projects regardless of changes'
+ required: false
+ type: boolean
+ default: false
+
+jobs:
+ determine-projects:
+ name: Determine Projects to Deploy
+ runs-on: ubuntu-latest
+ outputs:
+ projects: ${{ steps.filter.outputs.projects }}
+ projects_json: ${{ steps.filter.outputs.projects_json }}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Read deployment config
+ id: config
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const fs = require('fs');
+ const yaml = require('js-yaml');
+
+ const configPath = '.github/deploy-ecosystem-configs.yml';
+ const configContent = fs.readFileSync(configPath, 'utf8');
+ const config = yaml.load(configContent);
+
+ core.setOutput('config', JSON.stringify(config));
+
+ - name: Filter projects based on changes
+ id: filter
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const { execSync } = require('child_process');
+ const config = JSON.parse('${{ steps.config.outputs.config }}');
+
+ // Manual trigger: deploy specific project or all
+ if ('${{ github.event_name }}' === 'workflow_dispatch') {
+ if ('${{ inputs.project_name }}') {
+ const project = config.projects.find(p => p.name === '${{
inputs.project_name }}');
+ if (project) {
+ core.setOutput('projects_json', JSON.stringify([project]));
+ core.setOutput('projects', JSON.stringify([project.name]));
+ return;
+ }
+ }
+ if ('${{ inputs.force_deploy_all }}' === 'true') {
+ core.setOutput('projects_json',
JSON.stringify(config.projects));
+ core.setOutput('projects',
JSON.stringify(config.projects.map(p => p.name)));
+ return;
+ }
+ }
+
+ // Get changed files (only for push events)
+ let changedFiles = [];
+ if ('${{ github.event_name }}' === 'push') {
+ try {
+ changedFiles = execSync(`git diff --name-only ${{
github.event.before }} ${{ github.event.after }}`)
+ .toString().trim().split('\n').filter(Boolean);
+ } catch (error) {
+ // If git diff fails, deploy all projects
+ changedFiles = ['ecosystem/'];
+ }
+ }
+
+ // Find projects with changed files, or if workflow/config changed
+ const workflowChanged = changedFiles.some(f =>
+ f.includes('deploy-ecosystem') ||
f.includes('deploy-ecosystem-configs')
+ );
+
+ const projectsToDeploy = workflowChanged
+ ? config.projects
+ : config.projects.filter(project =>
+ changedFiles.some(file => file.startsWith(project.path +
'/'))
+ );
+
+ core.setOutput('projects_json', JSON.stringify(projectsToDeploy));
+ core.setOutput('projects', JSON.stringify(projectsToDeploy.map(p
=> p.name)));
+
+ - name: Show projects to deploy
+ run: |
+ echo "Projects to deploy: ${{ steps.filter.outputs.projects }}"
+ if [ "${{ steps.filter.outputs.projects }}" == "[]" ]; then
+ echo "No projects to deploy"
+ fi
+
+ deploy:
+ name: Deploy ${{ matrix.project.name }}
+ needs: determine-projects
+ if: needs.determine-projects.outputs.projects != '[]'
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ project: ${{ fromJson(needs.determine-projects.outputs.projects_json)
}}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+ cache: 'npm'
+ cache-dependency-path: ${{ matrix.project.path }}/package-lock.json
+
+ - name: Install Vercel CLI
+ run: npm install --global vercel@latest
+
+ - name: Install dependencies
+ working-directory: ${{ matrix.project.path }}
+ run: |
+ if [ -f "package-lock.json" ]; then
+ npm ci
+ elif [ -f "yarn.lock" ]; then
+ yarn install --frozen-lockfile
+ elif [ -f "pnpm-lock.yaml" ]; then
+ pnpm install --frozen-lockfile
+ else
+ echo "No lockfile found, using npm install"
+ npm install
+ fi
+
+ - name: Pull Vercel Environment Information
+ working-directory: ${{ matrix.project.path }}
+ env:
+ VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
+ VERCEL_ORG_ID: ${{ matrix.project.vercel_org_id ||
secrets.VERCEL_ORG_ID }}
+ VERCEL_PROJECT_ID: ${{ matrix.project.vercel_project_id }}
+ run: |
+ # Link to existing project if project_id is specified, otherwise let
vercel create one
+ if [ -n "$VERCEL_PROJECT_ID" ] && [ -n "$VERCEL_ORG_ID" ]; then
+ echo "$VERCEL_ORG_ID" > .vercel/org-id || mkdir -p .vercel && echo
"$VERCEL_ORG_ID" > .vercel/org-id
+ echo "$VERCEL_PROJECT_ID" > .vercel/project-id
+ fi
+ vercel pull --yes --environment=production --token=$VERCEL_TOKEN ||
echo "Could not pull Vercel config, continuing..."
+
+ - name: Build Project
+ working-directory: ${{ matrix.project.path }}
+ env:
+ VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
+ VERCEL_ORG_ID: ${{ matrix.project.vercel_org_id ||
secrets.VERCEL_ORG_ID }}
+ VERCEL_PROJECT_ID: ${{ matrix.project.vercel_project_id }}
+ run: |
+ vercel build --prod --token=$VERCEL_TOKEN
+
+ - name: Deploy to Vercel
+ working-directory: ${{ matrix.project.path }}
+ env:
+ VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
+ VERCEL_ORG_ID: ${{ matrix.project.vercel_org_id ||
secrets.VERCEL_ORG_ID }}
+ VERCEL_PROJECT_ID: ${{ matrix.project.vercel_project_id }}
+ run: |
+ vercel deploy --prebuilt --prod --token=$VERCEL_TOKEN
+
+ - name: Deployment Summary
+ if: always()
+ run: |
+ echo "### Deployment: ${{ matrix.project.name }}" >>
$GITHUB_STEP_SUMMARY
+ echo "- **Path:** ${{ matrix.project.path }}" >> $GITHUB_STEP_SUMMARY
+ echo "- **Status:** ${{ job.status }}" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
diff --git a/ecosystem/monitoring/reslens/.gitignore
b/ecosystem/monitoring/reslens/.gitignore
index 1dcef2d9..400bedc9 100644
--- a/ecosystem/monitoring/reslens/.gitignore
+++ b/ecosystem/monitoring/reslens/.gitignore
@@ -1,2 +1,3 @@
node_modules
-.env
\ No newline at end of file
+.env
+.vercel
diff --git a/ecosystem/monitoring/reslens/package-lock.json
b/ecosystem/monitoring/reslens/package-lock.json
index ae85acda..0eeb097e 100644
--- a/ecosystem/monitoring/reslens/package-lock.json
+++ b/ecosystem/monitoring/reslens/package-lock.json
@@ -74,6 +74,7 @@
"@types/react-dom": "^18.3.1",
"@types/react-gauge-chart": "^0.4.3",
"@types/react-slick": "^0.23.13",
+ "@vercel/config": "^0.0.25",
"@vitejs/plugin-react": "^4.3.3",
"autoprefixer": "^10.4.20",
"eslint": "^9.13.0",
@@ -6381,6 +6382,19 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@vercel/config": {
+ "version": "0.0.25",
+ "resolved":
"https://registry.npmjs.org/@vercel/config/-/config-0.0.25.tgz",
+ "integrity":
"sha512-Z998v8d1ukgfxaOVgf9qz1P4+bvpKuDRPMaEhP2pcn7SaZC6HIjAN5mlX0tLALQD7nUow1spDCdj1EiU/ldbkg==",
+ "dev": true,
+ "dependencies": {
+ "pretty-cache-header": "^1.0.0",
+ "zod": "^3.22.0"
+ },
+ "bin": {
+ "config": "dist/cli.js"
+ }
+ },
"node_modules/@vitejs/plugin-react": {
"version": "4.3.3",
"resolved":
"https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz",
@@ -13530,6 +13544,18 @@
"node": ">=4"
}
},
+ "node_modules/pretty-cache-header": {
+ "version": "1.0.0",
+ "resolved":
"https://registry.npmjs.org/pretty-cache-header/-/pretty-cache-header-1.0.0.tgz",
+ "integrity":
"sha512-xtXazslu25CdnGnUkByU1RoOjK55TqwatJkjjJLg5ZAdz2Lngko/mmaUgeET36P2GMlNwh3fdM7FWBO717pNcw==",
+ "dev": true,
+ "dependencies": {
+ "timestring": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=12.13"
+ }
+ },
"node_modules/prismjs": {
"version": "1.29.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
@@ -16774,6 +16800,15 @@
"node": ">=0.6.0"
}
},
+ "node_modules/timestring": {
+ "version": "6.0.0",
+ "resolved":
"https://registry.npmjs.org/timestring/-/timestring-6.0.0.tgz",
+ "integrity":
"sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/tiny-invariant": {
"version": "1.3.3",
"resolved":
"https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
diff --git a/ecosystem/monitoring/reslens/package.json
b/ecosystem/monitoring/reslens/package.json
index 6db94351..27c775f9 100644
--- a/ecosystem/monitoring/reslens/package.json
+++ b/ecosystem/monitoring/reslens/package.json
@@ -76,6 +76,7 @@
"@types/react-dom": "^18.3.1",
"@types/react-gauge-chart": "^0.4.3",
"@types/react-slick": "^0.23.13",
+ "@vercel/config": "^0.0.25",
"@vitejs/plugin-react": "^4.3.3",
"autoprefixer": "^10.4.20",
"eslint": "^9.13.0",
diff --git a/ecosystem/monitoring/reslens/vercel.json
b/ecosystem/monitoring/reslens/vercel.json
deleted file mode 100644
index 1323cdac..00000000
--- a/ecosystem/monitoring/reslens/vercel.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "rewrites": [
- {
- "source": "/(.*)",
- "destination": "/index.html"
- }
- ]
-}
diff --git a/ecosystem/monitoring/reslens/vercel.ts
b/ecosystem/monitoring/reslens/vercel.ts
new file mode 100644
index 00000000..15a9f384
--- /dev/null
+++ b/ecosystem/monitoring/reslens/vercel.ts
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { routes, type VercelConfig } from '@vercel/config/v1';
+
+export const config: VercelConfig = {
+ framework: 'vite',
+ rewrites: [
+ routes.rewrite('/(.*)', '/index.html'),
+ ],
+};