Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b3104bc
chore(package.json): remove unused dependencies
plebe1us Jan 4, 2026
0770000
fix(vite): exclude @peculiar packages from optimizeDeps
plebe1us Jan 4, 2026
a1e5c2d
Merge pull request #789 from bitsocialhq/master
plebe1us Jan 15, 2026
09b29e5
chore(deps): upgrade vite, polyfills, add resolutions, move package
plebe1us Jan 15, 2026
aec53c7
Create AGENTS.md
plebe1us Jan 15, 2026
ee98d23
Merge branch 'development' of github.com:plebbit/seedit into development
plebe1us Jan 15, 2026
29e45cc
Update package.json
plebe1us Jan 15, 2026
519f7a9
refactor(tooling): migrate from eslint/prettier to oxlint/oxfmt
plebe1us Jan 15, 2026
86c1872
feat: add CI
plebe1us Jan 15, 2026
9cdb57e
fix lint warnings
plebe1us Jan 15, 2026
fc896eb
pin versions
plebe1us Jan 15, 2026
9c66288
Update domain.tsx
plebe1us Jan 15, 2026
1ce08b3
fix: add leading slashes to sort links in header for all/mod/domain v…
plebe1us Jan 15, 2026
6b2349a
Update README.md
plebe1us Jan 16, 2026
ca01e5c
Update README.md
plebe1us Jan 16, 2026
7c68886
Update index.html
plebe1us Jan 16, 2026
786d2a6
fix: dep version mismatches, vite config, upgrade hooks
plebe1us Jan 16, 2026
4f076c7
Update .gitignore
plebe1us Jan 16, 2026
27b4c3d
update links for rebrand
plebe1us Jan 16, 2026
e9ee4b3
Add audit mode to remove unused translation keys
plebe1us Jan 16, 2026
8bdda83
Remove unused translation keys from all language files
plebe1us Jan 16, 2026
edd75dc
rebrand
plebe1us Jan 16, 2026
505b50d
fix(vite.config.js): PWA denylist regex fails to exclude /_ paths
plebe1us Jan 16, 2026
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
8 changes: 0 additions & 8 deletions .eslintrc.cjs

This file was deleted.

295 changes: 295 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,295 @@
name: Test Builds

on:
push:
branches: [ development, master ]
pull_request:
branches: [ development, master ]

jobs:
test-linux:
name: Test Linux (Ubuntu)
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js v22
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'yarn'

- name: Cache electron binaries
uses: actions/cache@v4
with:
path: ~/.cache/electron
key: ${{ runner.os }}-electron-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-electron-

- name: Install dependencies
run: |
for i in 1 2 3; do
echo "yarn install attempt $i"
yarn install --frozen-lockfile --ignore-engines --network-timeout 100000 --network-concurrency 1 && break
sleep 5
[ "$i" = "3" ] && exit 1
done

- name: Download IPFS
run: node electron/download-ipfs && chmod +x bin/linux/ipfs

- name: Build React App
run: yarn build
env:
CI: ''

- name: Build Electron App (Linux)
run: yarn electron:build:linux

- name: Smoke Test
run: |
echo "Testing AppImage startup..."
APPIMAGE=$(find dist -name "*.AppImage" | head -n 1)
echo "Found AppImage: $APPIMAGE"
chmod +x "$APPIMAGE"
# Use --appimage-extract-and-run to avoid FUSE requirement in CI
# Run with timeout and expect it to start (will be killed after timeout)
timeout 10s "$APPIMAGE" --appimage-extract-and-run --no-sandbox &
APP_PID=$!
sleep 5
# Check if process is still running (means it started successfully)
if kill -0 $APP_PID 2>/dev/null; then
echo "✓ App started successfully"
kill $APP_PID 2>/dev/null || true
exit 0
else
echo "✗ App failed to start"
exit 1
fi

test-mac-intel:
name: Test Mac (Intel)
runs-on: macos-15-intel
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js v22
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'yarn'

- name: Install setuptools for native modules
run: |
# Use pip with --break-system-packages for CI environment
pip3 install --break-system-packages setuptools || pip3 install --user setuptools || true

- name: Cache electron binaries
uses: actions/cache@v4
with:
path: ~/Library/Caches/electron
key: ${{ runner.os }}-electron-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-electron-

- name: Install dependencies
run: |
for i in 1 2 3; do
echo "yarn install attempt $i"
yarn install --frozen-lockfile --ignore-engines --network-timeout 100000 --network-concurrency 1 && break
sleep 5
[ "$i" = "3" ] && exit 1
done

- name: Download IPFS
run: node electron/download-ipfs && chmod +x bin/mac/ipfs

- name: Build React App
run: yarn build
env:
CI: ''

- name: Build Electron App
# Use --dir to build only the .app bundle without DMG
# This avoids flaky hdiutil "Resource busy" errors in CI
run: yarn build && yarn build:preload && yarn electron-builder build --publish never -m --dir

- name: Smoke Test
run: |
if [ -d "dist/mac/5chan.app" ]; then
echo "Testing dist/mac/5chan.app..."
# Run the app in background - it will start IPFS which takes time
# We just verify it launches without crashing
./dist/mac/5chan.app/Contents/MacOS/5chan &
APP_PID=$!
sleep 10
# Check if process is still running (means it started successfully)
if kill -0 $APP_PID 2>/dev/null; then
echo "✓ App started successfully"
kill $APP_PID 2>/dev/null || true
# Also kill any child processes (IPFS)
pkill -P $APP_PID 2>/dev/null || true
pkill -f ipfs 2>/dev/null || true
exit 0
else
echo "✗ App failed to start or crashed"
exit 1
fi
else
echo "Could not find dist/mac/5chan.app to test"
ls -R dist
exit 1
fi

test-mac-arm:
name: Test Mac (Apple Silicon)
runs-on: macOS-14
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js v22
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'yarn'

- name: Install setuptools for native modules
run: |
# Use pip with --break-system-packages for CI environment
pip3 install --break-system-packages setuptools || pip3 install --user setuptools || true

- name: Cache electron binaries
uses: actions/cache@v4
with:
path: ~/Library/Caches/electron
key: ${{ runner.os }}-electron-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-electron-

- name: Install dependencies
run: |
for i in 1 2 3; do
echo "yarn install attempt $i"
yarn install --frozen-lockfile --ignore-engines --network-timeout 100000 --network-concurrency 1 && break
sleep 5
[ "$i" = "3" ] && exit 1
done

- name: Download IPFS
run: node electron/download-ipfs && chmod +x bin/mac/ipfs

- name: Build React App
run: yarn build
env:
CI: ''

- name: Build Electron App
# On M1 runner, this should produce arm64 build
# Use --dir to build only the .app bundle without DMG
# This avoids flaky hdiutil "Resource busy" errors in CI
run: yarn build && yarn build:preload && yarn electron-builder build --publish never -m --dir

- name: Smoke Test
run: |
if [ -d "dist/mac-arm64/5chan.app" ]; then
APP_PATH="dist/mac-arm64/5chan.app"
elif [ -d "dist/mac/5chan.app" ]; then
APP_PATH="dist/mac/5chan.app"
else
echo "Could not find 5chan.app to test"
ls -R dist
exit 1
fi

echo "Testing $APP_PATH..."
# Run the app in background - it will start IPFS which takes time
# We just verify it launches without crashing
"./$APP_PATH/Contents/MacOS/5chan" &
APP_PID=$!
sleep 10
# Check if process is still running (means it started successfully)
if kill -0 $APP_PID 2>/dev/null; then
echo "✓ App started successfully"
kill $APP_PID 2>/dev/null || true
# Also kill any child processes (IPFS)
pkill -P $APP_PID 2>/dev/null || true
pkill -f ipfs 2>/dev/null || true
exit 0
else
echo "✗ App failed to start or crashed"
exit 1
fi

test-windows:
name: Test Windows
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js v22
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'yarn'

- name: Cache electron binaries
uses: actions/cache@v4
with:
path: ~/AppData/Local/electron/Cache
key: ${{ runner.os }}-electron-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-electron-

- name: Install dependencies
shell: bash
run: |
for i in 1 2 3; do
echo "yarn install attempt $i"
yarn install --frozen-lockfile --ignore-engines --network-timeout 100000 --network-concurrency 1 && break
sleep 5
[ "$i" = "3" ] && exit 1
done

- name: Download IPFS
run: node electron/download-ipfs

- name: Build React App
run: yarn build
env:
CI: ''

- name: Build Electron App
run: yarn electron:build:windows
timeout-minutes: 30

- name: Smoke Test
shell: bash
run: |
# Try to find the unpacked executable first as it's easiest to run
if [ -d "dist/win-unpacked" ]; then
echo "Testing unpacked exe..."
# Run with timeout - app starts IPFS so won't exit on its own
timeout 15s ./dist/win-unpacked/5chan.exe &
APP_PID=$!
sleep 8
# Check if process started successfully
if kill -0 $APP_PID 2>/dev/null; then
echo "✓ App started successfully"
taskkill //F //PID $APP_PID 2>/dev/null || true
# Kill any IPFS processes
taskkill //F //IM ipfs.exe 2>/dev/null || true
exit 0
else
echo "✗ App failed to start"
exit 1
fi
else
echo "No unpacked directory found"
ls -R dist
exit 1
fi
9 changes: 1 addition & 8 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,4 @@ yarn-debug.log*
yarn-error.log*

.vscode
.cursor
.playwright-mcp

# YoYo AI version control directory
.yoyo/

.specstory/
.cursorindexingignore
.cursor
13 changes: 13 additions & 0 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"semi": true,
"singleQuote": true,
"printWidth": 170,
"bracketSpacing": true,
"tabWidth": 2,
"trailingComma": "all",
"jsxSingleQuote": true,
"arrowParens": "always",
"useTabs": false,
"ignorePatterns": []
}
Loading
Loading