Component Data Extraction Pipeline (Native MCP) #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |