63 lines
2.5 KiB
YAML
63 lines
2.5 KiB
YAML
|
|
# Linux builds of the Pithos desktop app on Hephaestus's own runner
|
||
|
|
# (hephaestus-linux, jobs in node:22-bookworm inside docker-in-docker).
|
||
|
|
# Forgejo reads .forgejo/workflows and so leaves .github/workflows (the
|
||
|
|
# macOS build for a GitHub-hosted Mac) alone.
|
||
|
|
name: desktop-linux
|
||
|
|
|
||
|
|
on:
|
||
|
|
workflow_dispatch:
|
||
|
|
push:
|
||
|
|
tags: ['v*']
|
||
|
|
|
||
|
|
jobs:
|
||
|
|
build:
|
||
|
|
runs-on: linux-x64
|
||
|
|
steps:
|
||
|
|
- uses: actions/checkout@v4
|
||
|
|
|
||
|
|
- name: Install
|
||
|
|
run: npm ci --no-audit --no-fund
|
||
|
|
|
||
|
|
- name: Tests
|
||
|
|
run: npm test
|
||
|
|
|
||
|
|
- name: Build
|
||
|
|
run: npx electron-builder --linux AppImage deb tar.gz --x64 --publish never
|
||
|
|
|
||
|
|
# A desktop session is not available here, so check what a first run
|
||
|
|
# needs without a window: per-user paths for a user who cannot write
|
||
|
|
# /etc/s3d, the pinned s3d (checksum checked), and the bundled pty.
|
||
|
|
- name: Smoke test
|
||
|
|
run: |
|
||
|
|
useradd -m smoke 2>/dev/null || true
|
||
|
|
cat > smoke.mjs <<'JS'
|
||
|
|
import { resolveConfigPath, defaultDataDir, linuxUserMode } from './core/paths.js';
|
||
|
|
import { ensureConfig } from './core/config.js';
|
||
|
|
import { installS3d } from './core/binary.js';
|
||
|
|
import { execFileSync } from 'node:child_process';
|
||
|
|
const c = ensureConfig(resolveConfigPath());
|
||
|
|
console.log('user mode', linuxUserMode(), c.file, defaultDataDir());
|
||
|
|
if (!linuxUserMode() || !c.file.startsWith(process.env.HOME)) throw new Error('expected per-user paths');
|
||
|
|
const bin = await installS3d(process.env.HOME + '/bin');
|
||
|
|
console.log(execFileSync(bin, ['version'], { encoding: 'utf8' }).split('\n')[0]);
|
||
|
|
const pty = (await import('@lydell/node-pty')).default;
|
||
|
|
const t = pty.spawn('/bin/sh', ['-c', 'echo pty-ok'], {});
|
||
|
|
await new Promise((r) => { let o = ''; t.onData((d) => { o += d; }); t.onExit(() => { console.log('pty:', o.trim()); if (!o.includes('pty-ok')) process.exit(1); r(); }); });
|
||
|
|
JS
|
||
|
|
chmod -R a+rX .
|
||
|
|
su smoke -c "HOME=/home/smoke node smoke.mjs"
|
||
|
|
dpkg-deb -I dist/desktop/*.deb | grep -E 'Package|Version|Maintainer'
|
||
|
|
|
||
|
|
- name: Checksums
|
||
|
|
run: cd dist/desktop && sha256sum *.AppImage *.deb *.tar.gz | tee SHA256SUMS-linux.txt
|
||
|
|
|
||
|
|
- uses: https://code.forgejo.org/forgejo/upload-artifact@v4
|
||
|
|
with:
|
||
|
|
name: pithos-linux-x64
|
||
|
|
path: |
|
||
|
|
dist/desktop/*.AppImage
|
||
|
|
dist/desktop/*.deb
|
||
|
|
dist/desktop/*.tar.gz
|
||
|
|
dist/desktop/SHA256SUMS-linux.txt
|
||
|
|
retention-days: 14
|