Skip to content

1.4.0 Update

1.4.0 Update #72

Workflow file for this run

name: CI-CD
on:
workflow_dispatch:
inputs:
create_release:
description: 'Create new release'
required: true
type: boolean
push:
branches:
- main
- test
- concom
- dev
paths: ['.github/workflows/**', '**/Makefile', '**/*.go', '**/*.json', '**/*.yml', '**/*.ts', '**/*.js']
pull_request:
types: [opened, reopened, synchronize]
paths: ['.github/workflows/**', '**/Makefile', '**/*.go', '**/*.json', '**/*.yml', '**/*.ts', '**/*.js']
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
GitLab-Deploy:
if: ${{ github.repository != 'MorpheusAIs/Morpheus-Lumerin-Node' && (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/dev')) }}
runs-on: ubuntu-latest
steps:
- name: Clone
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Install dependencies
run: |
sudo apt-get update && sudo apt-get install -y jq
- name: Generate Tag Name
uses: ./.github/actions/gen_tag_name
- name: Determine GitLab Target Branch
id: set_target_branch
run: |
if [ "${{ github.ref_name }}" == "dev" ]; then
echo "gitlab_branch=dev" >> $GITHUB_ENV
elif [ "${{ github.ref_name }}" == "test" ]; then
echo "gitlab_branch=stg" >> $GITHUB_ENV
elif [ "${{ github.ref_name }}" == "main" ]; then
echo "gitlab_branch=main" >> $GITHUB_ENV
else
echo "This branch is not configured to trigger GitLab pipelines."
exit 1
fi
- name: Trigger GitLab Pipeline
run: |
echo "Triggering GitLab Build and Deploy for branch ${{ github.ref_name }} with tag ${{ env.TAG_NAME }}"
# Send request to GitLab
response=$(curl --silent \
--request POST \
--url "${{ secrets.GITLAB_TRIGGER_URL }}" \
--form "token=${{ secrets.GITLAB_TRIGGER_TOKEN }}" \
--form "ref=${{ env.gitlab_branch }}" \
--form "variables[SOURCE_REPO]=${{ github.repository }}" \
--form "variables[SOURCE_BRANCH]=${{ github.ref_name }}" \
--form "variables[GITHUB_VFULL]=${{ env.VFULL }}" \
--form "variables[GITHUB_TAG]=${{ env.TAG_NAME }}")
# Parse JSON response using jq
gitlab_status=$(echo "$response" | jq -r '.status // "unknown"')
gitlab_web_url=$(echo "$response" | jq -r '.web_url // "N/A"')
# Log the response
echo "GitLab Response: $response"
# Validate the status field
if [[ "$gitlab_status" =~ ^(created|preparing|success|running|scheduled)$ ]]; then
echo "GitLab pipeline triggered successfully! Status: $gitlab_status"
echo "Pipeline details: $gitlab_web_url"
else
echo "GitLab pipeline FAILED. Invalid status: $gitlab_status"
echo "Pipeline details: $gitlab_web_url"
exit 1
fi
Ubuntu-22-x64:
if: ${{ github.repository != 'MorpheusAIs/Morpheus-Lumerin-Node' }}
runs-on: ubuntu-22.04
steps:
- name: Clone
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.22.x'
cache-dependency-path: |
launcher/go.sum
proxy-router/go.sum
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
cache-dependency-path: ui-desktop/yarn.lock
- name: Install dependencies
run: |
cd launcher
go mod tidy
cd ../proxy-router
go mod download
cd ../ui-desktop
yarn install --network-timeout 600000
- name: Copy Environment Files
uses: ./.github/actions/copy_env_files
- name: Generate Tag Name
uses: ./.github/actions/gen_tag_name
- name: Build
id: build
run: |
cd launcher
make
cd ../proxy-router
make build
cd ../cli
make build
cd ../ui-desktop
echo "Injecting version ${VFULL} into package.json"
sed -i "s/\"version\": \".*\"/\"version\": \"${VFULL}\"/" package.json
cat package.json | grep '"version"' # Optional: Verify the change
yarn build:linux
- name: Pack artifacts
id: pack_artifacts
run: |
VFULL=${VFULL:-0.0.1}
echo "VFULL: $VFULL"
ARTIFACT="mor-launch-$TAG_NAME-ubuntu-x64.zip"
echo "Artifact: $ARTIFACT"
LLAMACPP=llama-b3256-bin-ubuntu-x64.zip
MODEL=tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf
wget -nv https://github.com/ggerganov/llama.cpp/releases/download/b3256/$LLAMACPP
wget -nv https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/$MODEL
unzip -o -j $LLAMACPP build/bin/llama-server
echo '{"run":["./llama-server -m ./'"$MODEL"'","./proxy-router","./morpheus-ui-'"$VFULL"'-x86_64-linux.AppImage"]}' > mor-launch.json
echo "Contents of mor-launch.json: "
cat mor-launch.json
mv ./cli/mor-cli mor-cli
zip -j $ARTIFACT ./LICENSE ./launcher/mor-launch llama-server ./proxy-router/bin/proxy-router .env $MODEL mor-launch.json ./ui-desktop/dist/morpheus-ui-$VFULL-x86_64-linux.AppImage models-config.json rating-config.json mor-cli
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
path: mor-launch-${{ env.TAG_NAME }}-ubuntu-x64.zip
name: mor-launch-ubuntu-x64.zip
macOS-13-x64:
if: ${{ github.repository != 'MorpheusAIs/Morpheus-Lumerin-Node' }}
runs-on: macos-13
steps:
- name: Clone
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.22.x'
cache-dependency-path: |
launcher/go.sum
proxy-router/go.sum
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
cache-dependency-path: ui-desktop/yarn.lock
- name: Install dependencies
run: |
cd launcher
go mod tidy
cd ../proxy-router
go mod download
cd ../ui-desktop
python3 -m pip install setuptools
yarn install --network-timeout 600000
- name: Copy Environment Files
uses: ./.github/actions/copy_env_files
- name: Generate Tag Name
uses: ./.github/actions/gen_tag_name
- name: Build
id: build
run: |
cd launcher
make
cd ../proxy-router
make build
cd ../cli
make build
cd ../ui-desktop
echo "Injecting version ${VFULL} into package.json"
sed -i "" "s/\"version\": \".*\"/\"version\": \"${VFULL}\"/" package.json
cat package.json | grep '"version"' # Optional: Verify the change
yarn build:mac
- name: Pack artifacts
id: pack_artifacts
run: |
ARTIFACT="mor-launch-$TAG_NAME-macos-x64.zip"
echo "Artifact: $ARTIFACT"
LLAMACPP=llama-b3256-bin-macos-x64.zip
MODEL=tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf
wget -nv https://github.com/ggerganov/llama.cpp/releases/download/b3256/$LLAMACPP
wget -nv https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/$MODEL
unzip -o -j $LLAMACPP build/bin/llama-server
echo '{"run":["./llama-server -m ./'$MODEL'","./proxy-router","./MorpheusUI.app/Contents/MacOS/MorpheusUI"]}' > mor-launch.json
echo "Contents of mor-launch.json: "
cat mor-launch.json
mv ./cli/mor-cli mor-cli
unzip ./ui-desktop/dist/morpheus-ui-${VFULL}-x64-mac.zip
zip -j $ARTIFACT ./LICENSE ./launcher/mor-launch ./proxy-router/bin/proxy-router .env llama-server $MODEL mor-launch.json models-config.json rating-config.json mor-cli
zip -r $ARTIFACT 'MorpheusUI.app'
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
path: mor-launch-${{ env.TAG_NAME }}-macos-x64.zip
name: mor-launch-macos-x64.zip
macOS-14-arm64:
if: ${{ github.repository != 'MorpheusAIs/Morpheus-Lumerin-Node' }}
runs-on: macos-14
steps:
- name: Clone
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.22.x'
cache-dependency-path: |
launcher/go.sum
proxy-router/go.sum
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
cache-dependency-path: ui-desktop/yarn.lock
- name: Install dependencies
run: |
cd launcher
go mod tidy
cd ../proxy-router
go mod download
cd ../ui-desktop
brew install python-setuptools
yarn install --network-timeout 600000
- name: Copy Environment Files
uses: ./.github/actions/copy_env_files
- name: Generate Tag Name
uses: ./.github/actions/gen_tag_name
- name: Build
id: build
run: |
cd launcher
make
cd ../proxy-router
make build
cd ../cli
make build
cd ../ui-desktop
echo "Injecting version ${VFULL}} into package.json"
sed -i "" "s/\"version\": \".*\"/\"version\": \"${VFULL}\"/" package.json
cat package.json | grep '"version"' # Optional: Verify the change
yarn build:mac
- name: Pack artifacts
id: pack_artifacts
run: |
ARTIFACT="mor-launch-$TAG_NAME-macos-arm64.zip"
echo "Artifact: $ARTIFACT"
LLAMACPP=llama-b3256-bin-macos-arm64.zip
MODEL=tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf
wget -nv https://github.com/ggerganov/llama.cpp/releases/download/b3256/$LLAMACPP
wget -nv https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/$MODEL
unzip -o -j $LLAMACPP build/bin/llama-server
echo '{"run":["./llama-server -m ./'$MODEL'","./proxy-router","./MorpheusUI.app/Contents/MacOS/MorpheusUI"]}' > mor-launch.json
echo "Contents of mor-launch.json: "
cat mor-launch.json
mv ./cli/mor-cli mor-cli
unzip ./ui-desktop/dist/morpheus-ui-${VFULL}-arm64-mac.zip
zip -j $ARTIFACT ./LICENSE ./launcher/mor-launch ./proxy-router/bin/proxy-router .env llama-server $MODEL mor-launch.json models-config.json rating-config.json mor-cli
zip -r $ARTIFACT 'MorpheusUI.app'
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
path: mor-launch-${{ env.TAG_NAME }}-macos-arm64.zip
name: mor-launch-macos-arm64.zip
Windows-avx2-x64:
if: ${{ github.repository != 'MorpheusAIs/Morpheus-Lumerin-Node' }}
runs-on: windows-latest
steps:
- name: Clone
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.22.x'
cache-dependency-path: |
launcher/go.sum
proxy-router/go.sum
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
cache-dependency-path: ui-desktop/yarn.lock
- name: Install wget and sed
run: |
choco install wget --no-progress
choco install sed --no-progress
- name: Install dependencies
run: |
cd launcher
go mod tidy
cd ../proxy-router
go mod download
cd ../ui-desktop
yarn install --network-timeout 600000
- name: Copy Environment Files
uses: ./.github/actions/copy_env_files
- name: Generate Tag Name
uses: ./.github/actions/gen_tag_name
- name: Build
id: build
run: |
cd launcher
make
cd ../proxy-router
make build
cd ../cli
make build
cd ../ui-desktop
echo "Injecting version ${VFULL} into package.json"
sed -i "s/\"version\": \".*\"/\"version\": \"${VFULL}\"/" package.json
cat package.json | grep '"version"' # Optional: Verify the change
yarn build:win
- name: Pack artifacts
id: pack_artifacts
run: |
VFULL=${VFULL:-0.0.1}
echo "VFULL: $VFULL"
ARTIFACT="mor-launch-$TAG_NAME-win-x64.zip"
echo "Artifact: $ARTIFACT"
LLAMACPP=llama-b3256-bin-win-avx2-x64.zip
MODEL=tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf
wget -nv https://github.com/ggerganov/llama.cpp/releases/download/b3256/$LLAMACPP
wget -nv https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/$MODEL
unzip -o -j $LLAMACPP llama-server.exe llama.dll ggml.dll
echo '{"run":["./llama-server.exe -m ./'"$MODEL"'","./proxy-router.exe","./morpheus-ui-'"$VFULL"'-x64-win.exe"]}' > mor-launch.json
echo "Contents of mor-launch.json: "
cat mor-launch.json
mv .env .env.tmp
sed 's|\./data/|.\\data\\|g' .env.tmp > .env
mv ./proxy-router/bin/proxy-router proxy-router.exe
mv ./cli/mor-cli mor-cli.exe
mv ./launcher/mor-launch mor-launch.exe
mv "./ui-desktop/dist/morpheus-ui-$VFULL-x64-win" morpheus-ui-$VFULL-x64-win.exe
7z a $ARTIFACT LICENSE mor-launch.exe proxy-router.exe .env llama-server.exe llama.dll ggml.dll $MODEL mor-launch.json morpheus-ui-$VFULL-x64-win.exe models-config.json rating-config.json mor-cli.exe
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
path: mor-launch-${{ env.TAG_NAME }}-win-x64.zip
name: mor-launch-win-x64.zip
release:
if: ${{ github.repository != 'MorpheusAIs/Morpheus-Lumerin-Node' && (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/test' || github.ref == 'refs/heads/concom' )) || github.event.inputs.create_release == 'true' }}
runs-on: ubuntu-latest
needs:
- Ubuntu-22-x64
- macOS-13-x64
- macOS-14-arm64
- Windows-avx2-x64
steps:
- name: Clone
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Generate Tag Name
uses: ./.github/actions/gen_tag_name
- name: Download artifacts
id: download-artifact
uses: actions/download-artifact@v4
with:
path: ./artifact
- name: Move artifacts
id: move_artifacts
run: |
mkdir -p ./artifact/release
mv ./artifact/*/*.zip ./artifact/release
- name: Create release
id: create_release
uses: anzz1/action-create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.TAG_NAME }}
prerelease: ${{ github.ref != 'refs/heads/main' }}
- name: Upload release
id: upload_release
uses: actions/github-script@v3
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const path = require('path');
const fs = require('fs');
const release_id = '${{ steps.create_release.outputs.id }}';
for (let file of await fs.readdirSync('./artifact/release')) {
if (path.extname(file) === '.zip') {
console.log('uploadReleaseAsset', file);
await github.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release_id,
name: file,
data: await fs.readFileSync(`./artifact/release/${file}`)
});
}
}