Skip to content

Component Data Extraction Pipeline (Native MCP) #6

Component Data Extraction Pipeline (Native MCP)

Component Data Extraction Pipeline (Native MCP) #6

name: Component Data Extraction Pipeline (Native MCP)
on:
push:
branches:
- main
- develop
paths:
- 'packages/native-mcp/scripts/**'
- 'packages/native-mcp/src/**'
- '.github/workflows/extraction-pipeline-native.yml'
schedule:
# Run daily at 3 AM UTC
- cron: "0 3 * * *"
workflow_dispatch:
inputs:
library:
description: "Library to extract (all, components, theme)"
required: false
default: "all"
type: choice
options:
- all
- components
- theme
force:
description: "Force re-extraction even if version exists"
required: false
default: false
type: boolean
version:
description: "Specific version to extract (optional)"
required: false
jobs:
# Determine environment based on branch
set-environment:
name: Set Environment
runs-on: ubuntu-latest
outputs:
environment: ${{ steps.set-env.outputs.environment }}
bucket-name: ${{ steps.set-env.outputs.bucket-name }}
steps:
- name: Determine environment
id: set-env
run: |
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
echo "environment=production" >> $GITHUB_OUTPUT
echo "bucket-name=heroui-mcp-data" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref }}" == "refs/heads/develop" ]]; then
echo "environment=staging" >> $GITHUB_OUTPUT
echo "bucket-name=heroui-mcp-data-staging" >> $GITHUB_OUTPUT
else
echo "environment=development" >> $GITHUB_OUTPUT
echo "bucket-name=heroui-mcp-data-dev" >> $GITHUB_OUTPUT
fi
echo "🎯 Environment: $(cat $GITHUB_OUTPUT | grep environment | cut -d'=' -f2)"
echo "🪣 Bucket: $(cat $GITHUB_OUTPUT | grep bucket-name | cut -d'=' -f2)"
check-versions:
name: Check for New Versions (Native MCP)
runs-on: ubuntu-latest
needs: set-environment
outputs:
components-needs-update: ${{ steps.check.outputs.components-needs-update }}
theme-needs-update: ${{ steps.check.outputs.theme-needs-update }}
components-version: ${{ steps.check.outputs.components-version }}
theme-version: ${{ steps.check.outputs.theme-version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js and install dependencies
uses: ./.github/actions/install
- name: Check for new versions
id: check
env:
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ needs.set-environment.outputs.bucket-name }}
run: |
echo "🔍 Checking versions for native-mcp package"
node packages/native-mcp/scripts/check-versions-ci.mjs \
--force=${{ inputs.force }} \
--library=${{ inputs.library || 'all' }} \
--version=${{ inputs.version }}
extract-components:
name: Extract HeroUI Native Components
runs-on: ubuntu-latest
needs: [set-environment, check-versions]
if: needs.check-versions.outputs.components-needs-update == 'true'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js and install dependencies
uses: ./.github/actions/install
- name: Extract HeroUI Native components
working-directory: packages/native-mcp
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: |
ENV="${{ needs.set-environment.outputs.environment }}"
FLAGS=""
if [ "${{ inputs.force }}" == "true" ]; then
FLAGS="--force"
fi
# Only add version flag if we have a valid version string
if [ -n "${{ inputs.version }}" ]; then
FLAGS="$FLAGS --version=${{ inputs.version }}"
elif [ -n "${{ needs.check-versions.outputs.components-version }}" ] && [ "${{ needs.check-versions.outputs.components-version }}" != "" ]; then
FLAGS="$FLAGS --version=${{ needs.check-versions.outputs.components-version }}"
fi
echo "📦 Extracting HeroUI Native components"
./scripts/extract.sh "$ENV" components $FLAGS
- name: Notify success
if: success()
run: |
echo "✅ Successfully extracted HeroUI Native components version ${{ needs.check-versions.outputs.components-version }}"
- name: Notify failure
if: failure()
run: |
echo "❌ Failed to extract HeroUI Native components"
extract-theme:
name: Extract HeroUI Native Theme System
runs-on: ubuntu-latest
needs: [set-environment, check-versions]
if: needs.check-versions.outputs.theme-needs-update == 'true'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js and install dependencies
uses: ./.github/actions/install
- name: Extract HeroUI Native theme system
working-directory: packages/native-mcp
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: |
ENV="${{ needs.set-environment.outputs.environment }}"
FLAGS=""
if [ "${{ inputs.force }}" == "true" ]; then
FLAGS="--force"
fi
# Only add version flag if we have a valid version string
if [ -n "${{ inputs.version }}" ]; then
FLAGS="$FLAGS --version=${{ inputs.version }}"
elif [ -n "${{ needs.check-versions.outputs.theme-version }}" ] && [ "${{ needs.check-versions.outputs.theme-version }}" != "" ]; then
FLAGS="$FLAGS --version=${{ needs.check-versions.outputs.theme-version }}"
fi
echo "🎨 Extracting HeroUI Native theme system"
./scripts/extract.sh "$ENV" theme $FLAGS
- name: Notify success
if: success()
run: |
echo "✅ Successfully extracted HeroUI Native theme system version ${{ needs.check-versions.outputs.theme-version }}"
- name: Notify failure
if: failure()
run: |
echo "❌ Failed to extract HeroUI Native theme system"
summary:
name: Extraction Summary (Native MCP)
runs-on: ubuntu-latest
needs: [set-environment, check-versions, extract-components, extract-theme]
if: always()
steps:
- name: Create summary
run: |
echo "## Component Extraction Summary (Native MCP)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Package**: native-mcp" >> $GITHUB_STEP_SUMMARY
echo "**Environment**: ${{ needs.set-environment.outputs.environment }}" >> $GITHUB_STEP_SUMMARY
echo "**R2 Bucket**: ${{ needs.set-environment.outputs.bucket-name }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.check-versions.outputs.components-needs-update }}" == "true" ]; then
if [ "${{ needs.extract-components.result }}" == "success" ]; then
echo "✅ **HeroUI Native Components**: Successfully extracted version ${{ needs.check-versions.outputs.components-version }}" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **HeroUI Native Components**: Failed to extract version ${{ needs.check-versions.outputs.components-version }}" >> $GITHUB_STEP_SUMMARY
fi
else
echo "ℹ️ **HeroUI Native Components**: No update needed" >> $GITHUB_STEP_SUMMARY
fi
if [ "${{ needs.check-versions.outputs.theme-needs-update }}" == "true" ]; then
if [ "${{ needs.extract-theme.result }}" == "success" ]; then
echo "✅ **HeroUI Native Theme**: Successfully extracted version ${{ needs.check-versions.outputs.theme-version }}" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **HeroUI Native Theme**: Failed to extract version ${{ needs.check-versions.outputs.theme-version }}" >> $GITHUB_STEP_SUMMARY
fi
else
echo "ℹ️ **HeroUI Native Theme**: No update needed" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "---" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Triggered by**: ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "**Force extraction**: ${{ inputs.force }}" >> $GITHUB_STEP_SUMMARY
echo "**Target library**: ${{ inputs.library }}" >> $GITHUB_STEP_SUMMARY
if [ -n "${{ inputs.version }}" ]; then
echo "**Specific version**: ${{ inputs.version }}" >> $GITHUB_STEP_SUMMARY
fi
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "> ℹ️ This pipeline extracts data for **native-mcp** only. React MCP uses a separate extraction process." >> $GITHUB_STEP_SUMMARY