diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml deleted file mode 100644 index 6744607..0000000 --- a/.gitea/workflows/deploy.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: Deploy Backend to Docker - -on: - push: - branches: - - main - paths: - - 'backend/**' - - 'docker-compose.yml' - - '.gitea/workflows/deploy.yml' - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build backend image - working-directory: backend - run: docker build -t rmtpocketwatcher-backend:latest . - - - name: Save image to tar - run: docker save rmtpocketwatcher-backend:latest -o backend-image.tar - - - name: Deploy via SSH to Docker host - env: - DOCKER_HOST: ${{ secrets.DOCKER_HOST }} - DOCKER_SSH_KEY: ${{ secrets.DOCKER_SSH_KEY }} - DOCKER_USER: ${{ secrets.DOCKER_USER }} - run: | - # Setup SSH - mkdir -p ~/.ssh - echo "$DOCKER_SSH_KEY" > ~/.ssh/deploy_key - chmod 600 ~/.ssh/deploy_key - - # Copy image to remote host - scp -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ - backend-image.tar ${DOCKER_USER}@${DOCKER_HOST}:/tmp/ - - # Copy docker-compose to remote host - scp -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ - docker-compose.yml ${DOCKER_USER}@${DOCKER_HOST}:/opt/rmtpocketwatcher/ - - # Load image and restart services - ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ - ${DOCKER_USER}@${DOCKER_HOST} << 'EOF' - cd /opt/rmtpocketwatcher - docker load -i /tmp/backend-image.tar - docker-compose down backend - docker-compose up -d backend - rm /tmp/backend-image.tar - EOF - - deploy-portainer: - runs-on: ubuntu-latest - if: github.event_name == 'workflow_dispatch' - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Deploy via Portainer Webhook - env: - PORTAINER_WEBHOOK_URL: ${{ secrets.PORTAINER_WEBHOOK_URL }} - run: | - curl -X POST "$PORTAINER_WEBHOOK_URL" - - - name: Deploy via Portainer API - env: - PORTAINER_URL: ${{ secrets.PORTAINER_URL }} - PORTAINER_API_KEY: ${{ secrets.PORTAINER_API_KEY }} - PORTAINER_STACK_ID: ${{ secrets.PORTAINER_STACK_ID }} - run: | - # Pull latest from git and redeploy stack - curl -X PUT \ - "${PORTAINER_URL}/api/stacks/${PORTAINER_STACK_ID}/git/redeploy" \ - -H "X-API-Key: ${PORTAINER_API_KEY}" \ - -H "Content-Type: application/json" \ - -d '{ - "pullImage": true, - "prune": true - }' diff --git a/electron-app/src/assets/logo.png b/electron-app/src/assets/logo.png new file mode 100644 index 0000000..f139847 Binary files /dev/null and b/electron-app/src/assets/logo.png differ diff --git a/electron-app/src/main/index.ts b/electron-app/src/main/index.ts index 82abe8a..3b11ace 100644 --- a/electron-app/src/main/index.ts +++ b/electron-app/src/main/index.ts @@ -20,6 +20,14 @@ let mainWindow: BrowserWindow | null = null; let tray: Tray | null = null; function createWindow(): void { + // In dev: __dirname = dist/main, logo is at root + // In prod: __dirname = resources/app.asar/dist/main + const iconPath = process.env.NODE_ENV === 'development' + ? path.join(__dirname, '../../logo.png') + : path.join(__dirname, '../assets/logo.png'); + + console.log('Window icon path:', iconPath); + mainWindow = new BrowserWindow({ width: 1400, height: 900, @@ -27,6 +35,7 @@ function createWindow(): void { minHeight: 700, frame: false, backgroundColor: '#0a0e27', + icon: iconPath, webPreferences: { preload: path.join(__dirname, 'preload.js'), nodeIntegration: false, @@ -54,10 +63,15 @@ function createWindow(): void { } function createTray(): void { - // Create a simple icon for the tray (16x16 cyan square) - const icon = nativeImage.createFromDataURL( - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABNSURBVDiNY/z//z8DJYCJgUIwasCoAaMGjBowaMIAhv///zNQCpiYKASjBowaMGrAqAGDJgxGDRg1YNSAUQNGDRg0YTBqwKgBowYMmjAAALmyAwVYbMsAAAAASUVORK5CYII=' - ); + // In dev: __dirname = dist/main, logo is at root + // In prod: __dirname = resources/app.asar/dist/main + const iconPath = process.env.NODE_ENV === 'development' + ? path.join(__dirname, '../../logo.png') + : path.join(__dirname, '../assets/logo.png'); + + console.log('Tray icon path:', iconPath); + + const icon = nativeImage.createFromPath(iconPath).resize({ width: 16, height: 16 }); tray = new Tray(icon); @@ -97,9 +111,9 @@ app.whenReady().then(() => { createWindow(); }); -app.on('window-all-closed', (e: Event) => { - // Prevent app from quitting when window is closed (allow tray to keep it running) - e.preventDefault(); +app.on('window-all-closed', () => { + // Quit the app when all windows are closed + app.quit(); }); app.on('activate', () => {