Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a5186f1
Merge pull request #1 from GerdsenAI/premium-llm-server
GerdsenAI-Admin Aug 2, 2025
096758c
Add virtual environment setup to development workflow
GerdsenAI-Admin Aug 2, 2025
3659009
Focus project on Production MVP Sprint (v1.0.0)
GerdsenAI-Admin Aug 2, 2025
41ac3dc
🚀 Complete Production MVP Sprint (v1.0.0) - Enterprise Ready
GerdsenAI-Admin Aug 2, 2025
75c8e16
Update documentation for v1.0.0 production release
GerdsenAI-Admin Aug 2, 2025
284830c
🚀 Add comprehensive installer suite for all deployment scenarios
GerdsenAI-Admin Aug 3, 2025
75932cd
Add proper macOS app installers for distribution
GerdsenAI-Admin Aug 3, 2025
2e515f4
Clean up old files and update root installer
GerdsenAI-Admin Aug 3, 2025
9d67f4b
Add fully self-contained macOS standalone app builder
GerdsenAI-Admin Aug 3, 2025
57e330c
Update all documentation for v1.0.0 standalone app distribution
GerdsenAI-Admin Aug 3, 2025
6eaa201
Implement comprehensive CI/CD pipeline for automated releases
GerdsenAI-Admin Aug 3, 2025
6141f08
Update nginx/conf.d/impetus.conf
GerdsenAI-Admin Aug 3, 2025
445e79a
Update installers/updater.sh
GerdsenAI-Admin Aug 3, 2025
f3ab66c
Update installers/uninstaller.sh
GerdsenAI-Admin Aug 3, 2025
fc9054c
Update installers/production_installer.sh
GerdsenAI-Admin Aug 3, 2025
493d978
Update installers/macos_standalone_app.sh
GerdsenAI-Admin Aug 3, 2025
c999e93
Update installers/production_installer.sh
GerdsenAI-Admin Aug 3, 2025
ac8b212
Fix failing CI/CD pipeline issues
GerdsenAI-Admin Aug 3, 2025
bce2317
Merge remote-tracking branch 'origin/installer' into installer
GerdsenAI-Admin Aug 3, 2025
124917f
fix: resolve CI/CD pipeline failures and security vulnerabilities
GerdsenAI-Admin Aug 3, 2025
835ed96
chore: update project documentation and clean frontend lockfile
GerdsenAI-Admin Aug 3, 2025
4c05b96
Update installers/updater.sh
GerdsenAI-Admin Aug 3, 2025
9a10bd7
Update nginx/conf.d/impetus.conf
GerdsenAI-Admin Aug 3, 2025
3e12a2b
Update service/impetus.service
GerdsenAI-Admin Aug 3, 2025
469d30b
Update installers/macos_standalone_app.sh
GerdsenAI-Admin Aug 3, 2025
62828d0
Update installers/macos_gui_installer.sh
GerdsenAI-Admin Aug 3, 2025
567b608
Update installers/production_installer.sh
GerdsenAI-Admin Aug 3, 2025
8224b3b
Update installers/uninstaller.sh
GerdsenAI-Admin Aug 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# GitHub Labeler Configuration
# Automatically adds labels to PRs based on changed files

# Backend changes
backend:
- gerdsen_ai_server/**/*
- requirements*.txt
- setup.py
- pyproject.toml

# Frontend changes
frontend:
- impetus-dashboard/**/*
- package.json
- pnpm-lock.yaml
- tsconfig.json

# Documentation
documentation:
- '*.md'
- docs/**/*
- LICENSE

# CI/CD
ci/cd:
- .github/**/*
- .dockerignore
- Dockerfile
- docker-compose.yml

# Installers
installer:
- installers/**/*
- install.sh

# Configuration
configuration:
- .env*
- config/**/*
- '*.yml'
- '*.yaml'
- '*.toml'

# Tests
tests:
- '**/tests/**/*'
- '**/test_*.py'
- '**/*.test.ts'
- '**/*.test.tsx'
- '**/*.spec.ts'
- '**/*.spec.tsx'

# Dependencies
dependencies:
- requirements*.txt
- package.json
- pnpm-lock.yaml
- Pipfile
- Pipfile.lock
- poetry.lock
- pyproject.toml

# Security
security:
- '**/auth/**/*'
- '**/security/**/*'
- .github/workflows/security*.yml

# Performance
performance:
- '**/inference/**/*'
- '**/model_loaders/**/*'
- '**/benchmark*.py'
- .github/workflows/performance.yml

# API changes
api:
- '**/routes/**/*'
- '**/schemas/**/*'
- '**/openai_api.py'
298 changes: 298 additions & 0 deletions .github/workflows/build-app.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,298 @@
name: Build macOS App

on:
workflow_call:
inputs:
version:
description: 'Version to build'
required: false
type: string
default: '1.0.0'
upload_artifacts:
description: 'Whether to upload artifacts'
required: false
type: boolean
default: true
outputs:
dmg_name:
description: 'Name of the DMG file'
value: ${{ jobs.build.outputs.dmg_name }}
dmg_size:
description: 'Size of the DMG file'
value: ${{ jobs.build.outputs.dmg_size }}
sha256:
description: 'SHA256 checksum of the DMG'
value: ${{ jobs.build.outputs.sha256 }}

env:
PYTHON_VERSION: '3.11'
NODE_VERSION: '18'

jobs:
build:
name: Build Standalone App
runs-on: macos-latest
outputs:
dmg_name: ${{ steps.build-info.outputs.dmg_name }}
dmg_size: ${{ steps.build-info.outputs.dmg_size }}
sha256: ${{ steps.build-info.outputs.sha256 }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up build environment
run: |
echo "Setting up build environment..."
echo "Build version: ${{ inputs.version }}"

# Install required tools
brew install create-dmg || true

# Set up Python
echo "Python version: $(python3 --version)"

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Cache Python dependencies
uses: actions/cache@v4
with:
path: |
~/.cache/pip
~/Library/Caches/pip
key: ${{ runner.os }}-pip-${{ hashFiles('gerdsen_ai_server/requirements*.txt') }}
restore-keys: |
${{ runner.os }}-pip-

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 8
run_install: false

- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV

- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-

- name: Update version number
run: |
VERSION="${{ inputs.version }}"
echo "Updating version to $VERSION"

# Update version in setup.py
sed -i '' "s/version=\"[0-9.]*\"/version=\"$VERSION\"/" setup.py

# Update version in package.json
cd impetus-dashboard
npm version $VERSION --no-git-tag-version
cd ..

# Update version in installer script
sed -i '' "s/PRODUCT_VERSION=\"[0-9.]*\"/PRODUCT_VERSION=\"$VERSION\"/" installers/macos_standalone_app.sh

- name: Install Python dependencies
run: |
cd gerdsen_ai_server
python -m pip install --upgrade pip wheel
pip install -r requirements.txt
pip install -r requirements_production.txt
cd ..

- name: Build frontend
run: |
cd impetus-dashboard
pnpm install
pnpm build

# Check if build was successful
if [ ! -d "dist" ]; then
echo "Frontend build failed - dist directory not found"
exit 1
fi

echo "Frontend build successful"
ls -la dist/
cd ..

- name: Pre-build verification
run: |
echo "Verifying build prerequisites..."

# Check Python
python3 --version

# Check required files
for file in "gerdsen_ai_server/src/main.py" "impetus-dashboard/dist/index.html" "installers/macos_standalone_app.sh"; do
if [ ! -f "$file" ]; then
echo "Error: Required file $file not found"
exit 1
fi
done

echo "All prerequisites verified"

- name: Build standalone macOS app
id: build-app
run: |
cd installers

# Make script executable
chmod +x macos_standalone_app.sh

# Run the build
echo "Starting build process..."
./macos_standalone_app.sh

# Verify build output
if [ ! -d "build_standalone/Impetus.app" ]; then
echo "Error: App bundle not created"
exit 1
fi

# Find the DMG file
DMG_FILE=$(ls *.dmg 2>/dev/null | head -1)
if [ -z "$DMG_FILE" ]; then
echo "Error: DMG file not created"
exit 1
fi

echo "Build successful: $DMG_FILE"
echo "dmg_file=$DMG_FILE" >> $GITHUB_OUTPUT

- name: Create checksums and gather info
id: build-info
run: |
cd installers
DMG_FILE="${{ steps.build-app.outputs.dmg_file }}"

# Create checksums
shasum -a 256 "$DMG_FILE" > "$DMG_FILE.sha256"
SHA256=$(cat "$DMG_FILE.sha256" | awk '{print $1}')

# Get file size
DMG_SIZE=$(ls -lh "$DMG_FILE" | awk '{print $5}')

# Output information
echo "dmg_name=$DMG_FILE" >> $GITHUB_OUTPUT
echo "dmg_size=$DMG_SIZE" >> $GITHUB_OUTPUT
echo "sha256=$SHA256" >> $GITHUB_OUTPUT

# Create build info file
cat > build-info.json << EOF
{
"version": "${{ inputs.version }}",
"dmg_name": "$DMG_FILE",
"dmg_size": "$DMG_SIZE",
"sha256": "$SHA256",
"build_date": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
"build_number": "${{ github.run_number }}",
"commit_sha": "${{ github.sha }}"
}
EOF

echo "Build info:"
cat build-info.json

- name: Test app bundle
run: |
cd installers/build_standalone

# Basic verification
echo "Verifying app bundle structure..."

# Check Info.plist
if [ ! -f "Impetus.app/Contents/Info.plist" ]; then
echo "Error: Info.plist not found"
exit 1
fi

# Check executable
if [ ! -f "Impetus.app/Contents/MacOS/Impetus" ]; then
echo "Error: Main executable not found"
exit 1
fi

# Check Python runtime
if [ ! -d "Impetus.app/Contents/Resources/python" ]; then
echo "Error: Python runtime not bundled"
exit 1
fi

# Check permissions
if [ ! -x "Impetus.app/Contents/MacOS/Impetus" ]; then
echo "Error: Main executable not executable"
exit 1
fi

echo "App bundle verification passed"

- name: Upload DMG artifact
if: inputs.upload_artifacts
uses: actions/upload-artifact@v4
with:
name: impetus-macos-dmg
path: |
installers/*.dmg
installers/*.dmg.sha256
installers/build-info.json
retention-days: 7

- name: Upload app bundle for testing
if: inputs.upload_artifacts
uses: actions/upload-artifact@v4
with:
name: impetus-macos-app
path: installers/build_standalone/Impetus.app
retention-days: 1

- name: Generate build report
run: |
cd installers

cat > build-report.md << EOF
# Build Report

## Build Information
- **Version**: ${{ inputs.version }}
- **DMG File**: ${{ steps.build-info.outputs.dmg_name }}
- **Size**: ${{ steps.build-info.outputs.dmg_size }}
- **SHA256**: \`${{ steps.build-info.outputs.sha256 }}\`
- **Build Date**: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
- **Build Number**: ${{ github.run_number }}

## Contents
- Standalone macOS application
- Embedded Python ${{ env.PYTHON_VERSION }} runtime
- All dependencies pre-installed
- React dashboard (pre-built)

## Requirements
- macOS 13.0 or later
- Apple Silicon (M1/M2/M3/M4)
- No additional dependencies required

## Installation
1. Download the DMG file
2. Open the DMG
3. Drag Impetus to Applications
4. Double-click to run
EOF

echo "Build report generated"
Loading
Loading