@@ -2,7 +2,9 @@ name: CI-CD
22# CI/CD Pipeline for Morpheus Lumerin Node
33#
44# Branch Strategy:
5- # • dev: Build and test only (no deployment)
5+ # • dev: Build-only (TEMPORARY): verify, tag, proxy-router docker test, CLI/router executables,
6+ # UI desktop builds, and GitHub pre-release (vX.Y.Z-dev) with router/CLI/UI assets — no GHCR,
7+ # TEE, AWS, or SecretVM deploy. Revert after test→main promotion is unblocked.
68# • test: Build, test, and deploy to AWS DEV environment (Titan dev + Morpheus dev consumer node)
79# • main: Build, test, create release, and deploy to AWS PRD environment (Titan lmn + Morpheus prd consumer/provider nodes)
810#
@@ -958,7 +960,7 @@ jobs:
958960 if : |
959961 github.repository == 'MorpheusAIs/Morpheus-Lumerin-Node' &&
960962 (
961- (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test')) ||
963+ (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/dev' )) ||
962964 (github.event_name == 'workflow_dispatch' && github.event.inputs.build_all_os == 'true')
963965 )
964966 needs :
@@ -2199,7 +2201,7 @@ jobs:
21992201 if : |
22002202 github.repository == 'MorpheusAIs/Morpheus-Lumerin-Node' &&
22012203 (
2202- (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test')) ||
2204+ (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/dev' )) ||
22032205 (github.event_name == 'workflow_dispatch' && github.event.inputs.build_all_os == 'true')
22042206 )
22052207 runs-on : macos-latest
@@ -2263,7 +2265,7 @@ jobs:
22632265 if : |
22642266 github.repository == 'MorpheusAIs/Morpheus-Lumerin-Node' &&
22652267 (
2266- (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test')) ||
2268+ (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/dev' )) ||
22672269 (github.event_name == 'workflow_dispatch' && github.event.inputs.build_all_os == 'true')
22682270 )
22692271 runs-on : ubuntu-22.04
@@ -2326,7 +2328,7 @@ jobs:
23262328 if : |
23272329 github.repository == 'MorpheusAIs/Morpheus-Lumerin-Node' &&
23282330 (
2329- (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test')) ||
2331+ (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/dev' )) ||
23302332 (github.event_name == 'workflow_dispatch' && github.event.inputs.build_all_os == 'true')
23312333 )
23322334 runs-on : ubuntu-22.04
@@ -2389,7 +2391,7 @@ jobs:
23892391 if : |
23902392 github.repository == 'MorpheusAIs/Morpheus-Lumerin-Node' &&
23912393 (
2392- (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test')) ||
2394+ (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/dev' )) ||
23932395 (github.event_name == 'workflow_dispatch' && github.event.inputs.build_all_os == 'true')
23942396 )
23952397 runs-on : macos-15-intel
@@ -2453,7 +2455,7 @@ jobs:
24532455 if : |
24542456 github.repository == 'MorpheusAIs/Morpheus-Lumerin-Node' &&
24552457 (
2456- (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test')) ||
2458+ (github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/cicd/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/dev' )) ||
24572459 (github.event_name == 'workflow_dispatch' && github.event.inputs.build_all_os == 'true')
24582460 )
24592461 runs-on : windows-latest
@@ -2533,6 +2535,116 @@ jobs:
25332535 path : ./ui-desktop/dist/win-x64-morpheus-app-${{ needs.Generate-Tag.outputs.vfull }}.exe
25342536 name : win-x64-morpheus-app-${{ needs.Generate-Tag.outputs.vfull }}.exe
25352537
2538+ Dev-UI-Release :
2539+ name : Upload Dev Pre-release (desktop + CLI + router)
2540+ if : |
2541+ github.repository == 'MorpheusAIs/Morpheus-Lumerin-Node' &&
2542+ github.event_name == 'push' &&
2543+ github.ref == 'refs/heads/dev'
2544+ needs :
2545+ - Generate-Tag
2546+ - Build-Service-Executables
2547+ - UI-macOS-latest-arm64
2548+ - UI-macOS-15-intel-x64
2549+ - UI-Ubuntu-22-x64
2550+ - UI-Ubuntu-22-arm64
2551+ - UI-Windows-avx2-x64
2552+ runs-on : ubuntu-latest
2553+ permissions :
2554+ contents : write
2555+ steps :
2556+ - name : Clone
2557+ uses : actions/checkout@v6
2558+ with :
2559+ fetch-depth : 0
2560+ fetch-tags : true
2561+
2562+ - name : Download artifacts
2563+ uses : actions/download-artifact@v7
2564+ with :
2565+ path : ./artifact
2566+ merge-multiple : true
2567+
2568+ - name : Verify artifact contents
2569+ run : |
2570+ echo "🔍 Contents of ./artifact:"
2571+ ls -lh ./artifact
2572+
2573+ - name : Generate release notes
2574+ run : |
2575+ VERSION=${{ needs.Generate-Tag.outputs.vfull }}
2576+ TAG=${{ needs.Generate-Tag.outputs.tag_name }}
2577+
2578+ cat << RELEASE_NOTES > release_notes.md
2579+ ## Dev pre-release ($TAG)
2580+
2581+ Desktop, proxy-router, and CLI builds from the \`dev\` branch. No container or TEE assets in this release.
2582+
2583+ ### Desktop Application
2584+
2585+ | Platform | Download |
2586+ |----------|----------|
2587+ | **Windows** (x64) | [\`win-x64-morpheus-app-${VERSION}.exe\`](../../releases/download/${TAG}/win-x64-morpheus-app-${VERSION}.exe) |
2588+ | **macOS** (Apple Silicon) | [\`mac-arm64-morpheus-app-${VERSION}.dmg\`](../../releases/download/${TAG}/mac-arm64-morpheus-app-${VERSION}.dmg) |
2589+ | **macOS** (Intel) | [\`mac-x64-morpheus-app-${VERSION}.dmg\`](../../releases/download/${TAG}/mac-x64-morpheus-app-${VERSION}.dmg) |
2590+ | **Linux** (x64) | [\`linux-x86_64-morpheus-app-${VERSION}.AppImage\`](../../releases/download/${TAG}/linux-x86_64-morpheus-app-${VERSION}.AppImage) |
2591+ | **Linux** (ARM64) | [\`linux-arm64-morpheus-app-${VERSION}.AppImage\`](../../releases/download/${TAG}/linux-arm64-morpheus-app-${VERSION}.AppImage) |
2592+
2593+ ### Proxy Router
2594+
2595+ | Platform | Download |
2596+ |----------|----------|
2597+ | **Linux** (x64) | [\`linux-x86_64-morpheus-router-${VERSION}\`](../../releases/download/${TAG}/linux-x86_64-morpheus-router-${VERSION}) |
2598+ | **Linux** (ARM64) | [\`linux-arm64-morpheus-router-${VERSION}\`](../../releases/download/${TAG}/linux-arm64-morpheus-router-${VERSION}) |
2599+ | **macOS** (Apple Silicon) | [\`mac-arm64-morpheus-router-${VERSION}\`](../../releases/download/${TAG}/mac-arm64-morpheus-router-${VERSION}) |
2600+ | **macOS** (Intel) | [\`mac-x64-morpheus-router-${VERSION}\`](../../releases/download/${TAG}/mac-x64-morpheus-router-${VERSION}) |
2601+ | **Windows** (x64) | [\`win-x64-morpheus-router-${VERSION}.exe\`](../../releases/download/${TAG}/win-x64-morpheus-router-${VERSION}.exe) |
2602+
2603+ ### CLI
2604+
2605+ | Platform | Download |
2606+ |----------|----------|
2607+ | **Linux** (x64) | [\`linux-x86_64-morpheus-cli-${VERSION}\`](../../releases/download/${TAG}/linux-x86_64-morpheus-cli-${VERSION}) |
2608+ | **Linux** (ARM64) | [\`linux-arm64-morpheus-cli-${VERSION}\`](../../releases/download/${TAG}/linux-arm64-morpheus-cli-${VERSION}) |
2609+ | **macOS** (Apple Silicon) | [\`mac-arm64-morpheus-cli-${VERSION}\`](../../releases/download/${TAG}/mac-arm64-morpheus-cli-${VERSION}) |
2610+ | **macOS** (Intel) | [\`mac-x64-morpheus-cli-${VERSION}\`](../../releases/download/${TAG}/mac-x64-morpheus-cli-${VERSION}) |
2611+ | **Windows** (x64) | [\`win-x64-morpheus-cli-${VERSION}.exe\`](../../releases/download/${TAG}/win-x64-morpheus-cli-${VERSION}.exe) |
2612+
2613+ > Rolling alias: \`latest-dev\` git tag tracks the newest dev pre-release.
2614+ RELEASE_NOTES
2615+
2616+ echo "" >> release_notes.md
2617+ echo "---" >> release_notes.md
2618+ echo "" >> release_notes.md
2619+ echo "## Commit" >> release_notes.md
2620+ echo "" >> release_notes.md
2621+ git log -1 --pretty=format:"%B" ${{ github.sha }} >> release_notes.md
2622+ cat release_notes.md
2623+
2624+ - name : Create dev pre-release and upload assets
2625+ env :
2626+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
2627+ run : |
2628+ TAG=${{ needs.Generate-Tag.outputs.tag_name }}
2629+ echo "📦 Creating dev pre-release $TAG..."
2630+ gh release create "$TAG" \
2631+ --title "Dev pre-release $TAG" \
2632+ --notes-file release_notes.md \
2633+ --prerelease \
2634+ ./artifact/*
2635+ echo "✅ Dev pre-release $TAG created with $(ls -1 ./artifact | wc -l) assets"
2636+
2637+ - name : Update latest-dev tag
2638+ env :
2639+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
2640+ run : |
2641+ TAG=${{ needs.Generate-Tag.outputs.tag_name }}
2642+ echo "🔄 Updating 'latest-dev' tag to point to $TAG..."
2643+ git push origin :refs/tags/latest-dev 2>/dev/null || true
2644+ git tag -f latest-dev
2645+ git push origin latest-dev
2646+ echo "✅ 'latest-dev' tag updated"
2647+
25362648 UI-Release :
25372649 name : Upload UI-Desktop Release
25382650 if : |
0 commit comments