mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-06-06 19:35:44 +02:00
Merge branch 'dev' of github.com:rowboatlabs/rowboat into dev
This commit is contained in:
commit
ac305bd62a
7 changed files with 36 additions and 64 deletions
35
.github/workflows/electron-build.yml
vendored
35
.github/workflows/electron-build.yml
vendored
|
|
@ -97,41 +97,6 @@ jobs:
|
|||
run: npm run publish
|
||||
working-directory: apps/x/apps/main
|
||||
|
||||
- name: Diagnose built app
|
||||
run: |
|
||||
echo "=== Architecture Check ==="
|
||||
APP_PATH=$(find apps/x/apps/main/out -name "Rowboat.app" -type d | head -1)
|
||||
if [ -n "$APP_PATH" ]; then
|
||||
EXECUTABLE="$APP_PATH/Contents/MacOS/rowboat"
|
||||
if [ -f "$EXECUTABLE" ]; then
|
||||
echo "App executable found at: $EXECUTABLE"
|
||||
echo "Architecture:"
|
||||
lipo -info "$EXECUTABLE" || file "$EXECUTABLE"
|
||||
echo ""
|
||||
echo "=== Code Signing Check ==="
|
||||
codesign --verify --deep --strict --verbose=2 "$APP_PATH" || echo "App is not signed (this is OK if code signing secrets are not configured)"
|
||||
echo ""
|
||||
echo "=== _CodeSignature Check ==="
|
||||
if [ -d "$APP_PATH/Contents/_CodeSignature" ]; then
|
||||
echo "WARNING: _CodeSignature directory still exists!"
|
||||
ls -la "$APP_PATH/Contents/_CodeSignature" || true
|
||||
else
|
||||
echo "✓ No _CodeSignature directory (expected for unsigned app)"
|
||||
fi
|
||||
echo ""
|
||||
echo "=== Extended Attributes Check ==="
|
||||
xattr -l "$APP_PATH" | head -5 || echo "No extended attributes (or not on macOS)"
|
||||
echo ""
|
||||
echo "=== Gatekeeper Check ==="
|
||||
spctl --assess --type execute --verbose "$APP_PATH" || echo "Gatekeeper assessment failed (expected for unsigned apps)"
|
||||
else
|
||||
echo "Executable not found at: $EXECUTABLE"
|
||||
fi
|
||||
else
|
||||
echo "App bundle not found"
|
||||
fi
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload workflow artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ module.exports = {
|
|||
icon: './icons/icon', // .icns extension added automatically
|
||||
appBundleId: 'com.rowboat.app',
|
||||
appCategoryType: 'public.app-category.productivity',
|
||||
osxSign: {},
|
||||
osxSign: {
|
||||
batchCodesignCalls: true,
|
||||
},
|
||||
osxNotarize: {
|
||||
appleId: process.env.APPLE_ID,
|
||||
appleIdPassword: process.env.APPLE_PASSWORD,
|
||||
|
|
@ -39,10 +41,10 @@ module.exports = {
|
|||
makers: [
|
||||
{
|
||||
name: '@electron-forge/maker-dmg',
|
||||
config: {
|
||||
config: (arch) => ({
|
||||
format: 'ULFO',
|
||||
name: 'Rowboat',
|
||||
}
|
||||
name: `Rowboat-${arch}`, // Architecture-specific name to avoid conflicts
|
||||
})
|
||||
},
|
||||
{
|
||||
name: '@electron-forge/maker-zip',
|
||||
|
|
@ -61,7 +63,7 @@ module.exports = {
|
|||
bucket: 'rowboat-desktop-app-releases',
|
||||
region: 'us-east-1',
|
||||
public: true,
|
||||
folder: 'releases' // Creates structure: releases/darwin/arm64/files
|
||||
folder: 'releases' // Creates structure: releases/darwin/{arch}/files (separate builds for arm64 and x64)
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
@ -153,9 +155,11 @@ module.exports = {
|
|||
// This tells Electron where to find the entry point
|
||||
// Note: No "type": "module" since we bundle as CommonJS for compatibility
|
||||
// with dependencies that use dynamic require()
|
||||
// Read version from source package.json (updated by CI from git tag)
|
||||
const sourcePackageJson = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8'));
|
||||
const packageJson = {
|
||||
name: '@x/main',
|
||||
version: '0.1.0',
|
||||
version: sourcePackageJson.version,
|
||||
main: 'dist-bundle/main.js',
|
||||
};
|
||||
fs.writeFileSync(
|
||||
|
|
@ -220,9 +224,11 @@ module.exports = {
|
|||
const packageJsonPath = path.join(appResourcesPath, 'package.json');
|
||||
if (fs.existsSync(packageJsonPath)) {
|
||||
console.log('Updating package.json...');
|
||||
// Read version from source package.json (updated by CI from git tag)
|
||||
const sourcePackageJson = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8'));
|
||||
const packageJson = {
|
||||
name: '@x/main',
|
||||
version: '0.1.0',
|
||||
version: sourcePackageJson.version,
|
||||
main: 'dist-bundle/main.js',
|
||||
// Note: No "type": "module" since we bundle as CommonJS
|
||||
// No dependencies/devDependencies since everything is bundled
|
||||
|
|
|
|||
|
|
@ -6,26 +6,26 @@
|
|||
"scripts": {
|
||||
"start": "electron .",
|
||||
"build": "rm -rf dist && tsc",
|
||||
"package": "electron-forge package",
|
||||
"make": "electron-forge make",
|
||||
"publish": "electron-forge publish"
|
||||
"package": "electron-forge package --arch=arm64,x64 --platform=darwin",
|
||||
"make": "electron-forge make --arch=arm64,x64 --platform=darwin",
|
||||
"publish": "electron-forge publish --arch=arm64,x64 --platform=darwin"
|
||||
},
|
||||
"dependencies": {
|
||||
"@x/core": "workspace:*",
|
||||
"@x/shared": "workspace:*",
|
||||
"chokidar": "^4.0.3",
|
||||
"update-electron-app": "^3.0.0",
|
||||
"update-electron-app": "^3.1.2",
|
||||
"zod": "^4.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^25.0.3",
|
||||
"electron": "^39.2.7",
|
||||
"esbuild": "^0.24.2",
|
||||
"@electron-forge/cli": "^7.11.1",
|
||||
"@electron-forge/maker-deb": "^7.11.1",
|
||||
"@electron-forge/maker-dmg": "^7.11.1",
|
||||
"@electron-forge/maker-squirrel": "^7.11.1",
|
||||
"@electron-forge/maker-zip": "^7.11.1",
|
||||
"@electron-forge/publisher-s3": "^7.11.1"
|
||||
"@electron-forge/cli": "^7.10.2",
|
||||
"@electron-forge/maker-deb": "^7.10.2",
|
||||
"@electron-forge/maker-dmg": "^7.10.2",
|
||||
"@electron-forge/maker-squirrel": "^7.10.2",
|
||||
"@electron-forge/maker-zip": "^7.10.2",
|
||||
"@electron-forge/publisher-s3": "^7.10.2"
|
||||
}
|
||||
}
|
||||
|
|
@ -68,7 +68,7 @@ export function GraphView({ nodes, edges, isLoading, error, onSelectNode }: Grap
|
|||
const hasCenteredRef = useRef(false)
|
||||
const [viewport, setViewport] = useState({ width: 1, height: 1 })
|
||||
const [pan, setPan] = useState({ x: 0, y: 0 })
|
||||
const [zoom, setZoom] = useState(1)
|
||||
const [zoom, setZoom] = useState(0.6)
|
||||
const [hoveredNodeId, setHoveredNodeId] = useState<string | null>(null)
|
||||
const [searchQuery, setSearchQuery] = useState('')
|
||||
const [selectedGroup, setSelectedGroup] = useState<string | null>(null)
|
||||
|
|
@ -501,7 +501,7 @@ export function GraphView({ nodes, edges, isLoading, error, onSelectNode }: Grap
|
|||
style={{ backgroundColor: item.color, boxShadow: `0 0 0 1px ${item.stroke}` }}
|
||||
/>
|
||||
<span className="truncate">{item.label}</span>
|
||||
{isSelected && <X className="ml-auto size-3 text-muted-foreground" />}
|
||||
<X className={`ml-auto size-3 ${isSelected ? 'text-muted-foreground' : 'invisible'}`} />
|
||||
</button>
|
||||
)
|
||||
})}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { GoogleClientFactory } from './google-client-factory.js';
|
|||
|
||||
// Configuration
|
||||
const SYNC_DIR = path.join(WorkDir, 'calendar_sync');
|
||||
const SYNC_INTERVAL_MS = 60 * 1000; // Check every minute
|
||||
const SYNC_INTERVAL_MS = 5 * 60 * 1000; // Check every 5 minutes
|
||||
const LOOKBACK_DAYS = 14;
|
||||
const REQUIRED_SCOPES = [
|
||||
'https://www.googleapis.com/auth/calendar.readonly',
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { GoogleClientFactory } from './google-client-factory.js';
|
|||
|
||||
// Configuration
|
||||
const SYNC_DIR = path.join(WorkDir, 'gmail_sync');
|
||||
const SYNC_INTERVAL_MS = 60 * 1000; // Check every minute
|
||||
const SYNC_INTERVAL_MS = 5 * 60 * 1000; // Check every 5 minutes
|
||||
const REQUIRED_SCOPE = 'https://www.googleapis.com/auth/gmail.readonly';
|
||||
|
||||
const nhm = new NodeHtmlMarkdown();
|
||||
|
|
@ -253,7 +253,7 @@ async function partialSync(auth: OAuth2Client, startHistoryId: string, syncDir:
|
|||
}
|
||||
|
||||
async function performSync() {
|
||||
const LOOKBACK_DAYS = 7; // Default to 7 days
|
||||
const LOOKBACK_DAYS = 30; // Default to 1 month
|
||||
const ATTACHMENTS_DIR = path.join(SYNC_DIR, 'attachments');
|
||||
const STATE_FILE = path.join(SYNC_DIR, 'sync_state.json');
|
||||
|
||||
|
|
|
|||
15
apps/x/pnpm-lock.yaml
generated
15
apps/x/pnpm-lock.yaml
generated
|
|
@ -51,29 +51,29 @@ importers:
|
|||
specifier: ^4.0.3
|
||||
version: 4.0.3
|
||||
update-electron-app:
|
||||
specifier: ^3.0.0
|
||||
specifier: ^3.1.2
|
||||
version: 3.1.2
|
||||
zod:
|
||||
specifier: ^4.2.1
|
||||
version: 4.2.1
|
||||
devDependencies:
|
||||
'@electron-forge/cli':
|
||||
specifier: ^7.11.1
|
||||
specifier: ^7.10.2
|
||||
version: 7.11.1(encoding@0.1.13)(esbuild@0.24.2)
|
||||
'@electron-forge/maker-deb':
|
||||
specifier: ^7.11.1
|
||||
specifier: ^7.10.2
|
||||
version: 7.11.1
|
||||
'@electron-forge/maker-dmg':
|
||||
specifier: ^7.11.1
|
||||
specifier: ^7.10.2
|
||||
version: 7.11.1
|
||||
'@electron-forge/maker-squirrel':
|
||||
specifier: ^7.11.1
|
||||
specifier: ^7.10.2
|
||||
version: 7.11.1
|
||||
'@electron-forge/maker-zip':
|
||||
specifier: ^7.11.1
|
||||
specifier: ^7.10.2
|
||||
version: 7.11.1
|
||||
'@electron-forge/publisher-s3':
|
||||
specifier: ^7.11.1
|
||||
specifier: ^7.10.2
|
||||
version: 7.11.1
|
||||
'@types/node':
|
||||
specifier: ^25.0.3
|
||||
|
|
@ -5901,6 +5901,7 @@ packages:
|
|||
tar@6.2.1:
|
||||
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
|
||||
engines: {node: '>=10'}
|
||||
deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
|
||||
|
||||
temp@0.9.4:
|
||||
resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue