Compare commits

...

6 Commits

Author SHA1 Message Date
izzy 2cf64b556f ci: actually provide the github token secret 2025-10-08 17:41:31 +01:00
izzy 55ac9a4596 ci: ensure token can write (publish) to repo 2025-10-08 17:39:00 +01:00
izzy ec7adaafe3 chore: disable flatpak build because this was for testing anyways 2025-10-08 17:36:36 +01:00
izzy b1c702a033 ci: checkout assets 2025-10-08 17:31:12 +01:00
izzy 6e9ef636b6 ci: use pnpm specified in package.json 2025-10-08 17:29:18 +01:00
izzy 2cc6ac4667 chore: try to get everything building 2025-10-08 17:28:30 +01:00
9 changed files with 135 additions and 88 deletions
+50
View File
@@ -0,0 +1,50 @@
on:
push:
tags:
- "*"
branches:
- "**"
jobs:
build-and-release:
name: Build App
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Checkout assets
run: git -c submodule."assets".update=checkout submodule update --init assets
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build or Publish
run: |
if [[ "${{ startsWith(github.ref, 'refs/tags/') }}" == "true" ]]; then
pnpm run publish
else
pnpm run make
fi
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-1
View File
@@ -1,7 +1,6 @@
{
"editor.formatOnSave": true,
"files.exclude": {
"**/.vite": true,
"**/node_modules": true,
"**/tsconfig.json": false
},
+1 -1
Submodule assets updated: f60a38e137...628eb2f825
+68 -66
View File
@@ -9,7 +9,8 @@ import { VitePlugin } from "@electron-forge/plugin-vite";
import { PublisherGithub } from "@electron-forge/publisher-github";
import type { ForgeConfig } from "@electron-forge/shared-types";
import { FuseV1Options, FuseVersion } from "@electron/fuses";
import { globSync } from "node:fs";
// import { globSync } from "node:fs";
const STRINGS = {
author: "Revolt Platforms LTD",
@@ -26,10 +27,10 @@ const config: ForgeConfig = {
name: STRINGS.name,
executableName: STRINGS.execName,
icon: `${ASSET_DIR}/icon`,
extraResource: [
// include all the asset files
...globSync(ASSET_DIR + "/**/*"),
],
// extraResource: [
// // include all the asset files
// ...globSync(ASSET_DIR + "/**/*"),
// ],
},
rebuildConfig: {},
makers: [
@@ -42,68 +43,74 @@ const config: ForgeConfig = {
authors: STRINGS.author,
// todo: hoist this
iconUrl: `https://stoat.chat/app/assets/icon-DUSNE-Pb.ico`,
// todo: loadingGif
setupIcon: `${ASSET_DIR}/icon.ico`,
description: STRINGS.description,
exe: `${STRINGS.execName}.exe`,
setupExe: `${STRINGS.execName}-setup.exe`,
copyright: "Copyright (C) 2025 Revolt Platforms LTD",
}),
new MakerZIP({}),
new MakerFlatpak({
options: {
id: "chat.stoat.stoat-desktop",
description: STRINGS.description,
productName: STRINGS.name,
productDescription: STRINGS.description,
runtimeVersion: "21.08",
icon: `${ASSET_DIR}/icon.png`,
categories: ["Network"],
modules: [
// use the latest zypak -- Electron sandboxing for Flatpak
{
name: "zypak",
sources: [
{
type: "git",
url: "https://github.com/refi64/zypak",
tag: "v2025.09",
},
],
},
],
finishArgs: [
// default arguments found by running
// DEBUG=electron-installer-flatpak* pnpm make
"--socket=x11",
"--share=ipc",
"--device=dri",
"--socket=pulseaudio",
"--filesystem=home",
"--env=TMPDIR=/var/tmp",
"--share=network",
"--talk-name=org.freedesktop.Notifications",
// add Unity talk name for badges
"--talk-name=com.canonical.Unity",
],
// files: [
// // is this necessary?
// // https://stackoverflow.com/q/79745700
// ...[16, 32, 64, 128, 256, 512].map(
// (size) =>
// [
// `assets/desktop/hicolor/${size}x${size}.png`,
// `/app/share/icons/hicolor/${size}x${size}/apps/chat.stoat.stoat-desktop.png`,
// ] as [string, string],
// ),
// [
// `assets/desktop/icon.svg`,
// `/app/share/icons/hicolor/scalable/apps/chat.stoat.stoat-desktop.svg`,
// ] as [string, string],
// ],
files: [],
} as MakerFlatpakOptionsConfig,
/* as Omit<
...[
new MakerFlatpak({
options: {
id: "chat.stoat.stoat-desktop",
description: STRINGS.description,
productName: STRINGS.name,
productDescription: STRINGS.description,
runtimeVersion: "21.08",
icon: `${ASSET_DIR}/icon.png`,
categories: ["Network"],
modules: [
// use the latest zypak -- Electron sandboxing for Flatpak
{
name: "zypak",
sources: [
{
type: "git",
url: "https://github.com/refi64/zypak",
tag: "v2025.09",
},
],
},
],
finishArgs: [
// default arguments found by running
// DEBUG=electron-installer-flatpak* pnpm make
"--socket=x11",
"--share=ipc",
"--device=dri",
"--socket=pulseaudio",
"--filesystem=home",
"--env=TMPDIR=/var/tmp",
"--share=network",
"--talk-name=org.freedesktop.Notifications",
// add Unity talk name for badges
"--talk-name=com.canonical.Unity",
],
// files: [
// // is this necessary?
// // https://stackoverflow.com/q/79745700
// ...[16, 32, 64, 128, 256, 512].map(
// (size) =>
// [
// `assets/desktop/hicolor/${size}x${size}.png`,
// `/app/share/icons/hicolor/${size}x${size}/apps/chat.stoat.stoat-desktop.png`,
// ] as [string, string],
// ),
// [
// `assets/desktop/icon.svg`,
// `/app/share/icons/hicolor/scalable/apps/chat.stoat.stoat-desktop.svg`,
// ] as [string, string],
// ],
files: [],
} as MakerFlatpakOptionsConfig,
/* as Omit<
MakerFlatpakOptionsConfig,
"files"
> */
}),
}),
].slice(0, 0), // disable Flatpak build
new MakerDeb({
options: {
productName: STRINGS.name,
@@ -130,12 +137,7 @@ const config: ForgeConfig = {
target: "preload",
},
],
renderer: [
{
name: "main_window",
config: "vite.renderer.config.ts",
},
],
renderer: [],
}),
// Fuses are used to enable/disable various Electron functionality
// at package time, before code signing the application
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "stoat-desktop",
"productName": "stoat-desktop",
"version": "1.1.0",
"version": "1.1.7",
"main": ".vite/build/main.js",
"repository": "stoatchat/desktop",
"scripts": {
+4 -3
View File
@@ -1,5 +1,4 @@
import dbus from "@homebridge/dbus-native";
import { resolve } from "node:path";
import { NativeImage, app, nativeImage } from "electron";
@@ -19,8 +18,10 @@ export async function setBadgeCount(count: number) {
}
if (!nativeIcons[count])
nativeIcons[count] = nativeImage.createFromPath(
resolve(process.resourcesPath, `${Math.min(count, 10)}.ico`),
nativeIcons[count] = nativeImage.createFromDataURL(
await import(
`../../assets/desktop/badges/${Math.min(count, 10)}.ico?asset`
),
);
mainWindow.setOverlayIcon(
+2 -5
View File
@@ -1,7 +1,6 @@
import { resolve } from "node:path";
import { Menu, Tray, nativeImage } from "electron";
import trayIconAsset from "../../assets/desktop/icon.png?asset";
import { version } from "../../package.json";
import { mainWindow, quitApp } from "./window";
@@ -10,9 +9,7 @@ import { mainWindow, quitApp } from "./window";
let tray: Tray = null;
// load the tray icon
const trayIcon = nativeImage.createFromPath(
resolve(process.resourcesPath, "icon.png"),
);
const trayIcon = nativeImage.createFromDataURL(trayIconAsset);
// trayIcon.setTemplateImage(true);
+7 -10
View File
@@ -1,4 +1,4 @@
import { join, resolve } from "node:path";
import { join } from "node:path";
import {
BrowserWindow,
@@ -9,7 +9,8 @@ import {
nativeImage,
} from "electron";
import { setBadgeCount } from "./badges";
import windowIconAsset from "../../assets/desktop/icon.png?asset";
import { config } from "./config";
import { updateTrayMenu } from "./tray";
@@ -27,11 +28,7 @@ export const BUILD_URL = new URL(
let shouldQuit = false;
// load the window icon
const windowIcon = nativeImage.createFromPath(
resolve(process.resourcesPath, "icon.png"),
);
console.info(resolve(process.resourcesPath, "icon.png"));
const windowIcon = nativeImage.createFromDataURL(windowIconAsset);
// windowIcon.setTemplateImage(true);
@@ -43,7 +40,7 @@ export function createMainWindow() {
mainWindow = new BrowserWindow({
minWidth: 300,
minHeight: 300,
width: 800,
width: 1100,
height: 600,
backgroundColor: "#191919",
frame: !config.customFrame,
@@ -156,8 +153,8 @@ export function createMainWindow() {
// mainWindow.webContents.openDevTools();
let i = 0;
setInterval(() => setBadgeCount((++i % 30) + 1), 1000);
// let i = 0;
// setInterval(() => setBadgeCount((++i % 30) + 1), 1000);
}
/**
+2 -1
View File
@@ -10,6 +10,7 @@
"baseUrl": ".",
"outDir": "dist",
"moduleResolution": "node",
"resolveJsonModule": true
"resolveJsonModule": true,
"types": ["electron-vite/node"]
}
}