mirror of
https://github.com/amitwh/markdown-converter.git
synced 2026-10-02 01:29:32 +05:30
Two step-by-step TDD plans derived from the 2026-09-14 design specs: * theme-registry: 9 tasks, 70+ steps. Creates src/main/ThemeRegistry.js (pure module), bootstrap with 37 themes, buildThemeMenu for main.js, migrates 25 existing per-theme CSS blocks into src/styles/themes/<id>.css, rewrites the renderer apply-theme function to toggle <link disabled>, adds 12 new theme CSS files using shared token vocabulary. * flowchart-editor: 8 tasks, 41 TDD steps. Pure renderer-side feature (no main-process modules). Pure data store with IO injection, 5 SVG shape functions, Mermaid translator, hand-rolled SVG canvas with pointer events, sidebar panel wiring with debounced preview (250ms) + debounced persistence (500ms) + panel-scoped keyboard shortcuts. Three minimal userData-path-validated IPC channels added for persistence (renderer can't reach <userData> under the current nodeIntegration:true security model without them). Amit Haridas
197 lines
5.3 KiB
YAML
197 lines
5.3 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags: ['v*']
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build-linux:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 20
|
|
cache: npm
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Download external tools (pandoc)
|
|
run: node scripts/download-tools.js
|
|
|
|
- name: Bundle MarkItDown (optional, best effort)
|
|
# Freezes markitdown + Python into bin/linux/markitdown; failure is
|
|
# non-fatal — the build then ships without it and the app falls back
|
|
# to a system markitdown at runtime.
|
|
run: npm run bundle:markitdown
|
|
continue-on-error: true
|
|
|
|
- name: Run tests
|
|
run: npm test
|
|
|
|
- name: Build Linux packages
|
|
run: npm run build:linux-ci -- --publish=never
|
|
|
|
- name: Upload Linux artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-artifacts
|
|
path: |
|
|
dist/*.deb
|
|
dist/*.AppImage
|
|
dist/*.snap
|
|
dist/*.rpm
|
|
retention-days: 5
|
|
|
|
build-windows:
|
|
runs-on: windows-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 20
|
|
cache: npm
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Download external tools (pandoc)
|
|
run: node scripts/download-tools.js
|
|
|
|
- name: Bundle MarkItDown (optional, best effort)
|
|
# Windows runners ship python + venv; non-fatal on failure — the
|
|
# package then omits the bundled binary by design. We capture the
|
|
# log so a silent failure is visible in the GitHub Actions step UI
|
|
# instead of disappearing into stdout.
|
|
run: |
|
|
python -m pip install --upgrade pip wheel setuptools 2>&1 | tee bundle-pip.log
|
|
npm run bundle:markitdown 2>&1 | tee bundle-markitdown.log
|
|
if [ ! -f bin/win32/markitdown.exe ]; then
|
|
echo "::warning::bin/win32/markitdown.exe was not produced — see bundle-markitdown.log"
|
|
fi
|
|
continue-on-error: true
|
|
shell: bash
|
|
|
|
- name: Upload MarkItDown bundle logs (on failure)
|
|
if: failure()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-bundle-logs
|
|
path: |
|
|
bundle-pip.log
|
|
bundle-markitdown.log
|
|
retention-days: 5
|
|
|
|
- name: Run tests
|
|
run: npm test
|
|
|
|
- name: Decode certificate (if available)
|
|
if: ${{ env.CSC_LINK_BASE64 != '' }}
|
|
shell: pwsh
|
|
env:
|
|
CSC_LINK_BASE64: ${{ secrets.CSC_LINK_BASE64 }}
|
|
run: |
|
|
$bytes = [Convert]::FromBase64String("$env:CSC_LINK_BASE64")
|
|
[IO.File]::WriteAllBytes("${{ github.workspace }}\code-signing-cert.pfx", $bytes)
|
|
echo "CERT_AVAILABLE=true" >> $env:GITHUB_ENV
|
|
|
|
- name: Build Windows packages (signed)
|
|
if: ${{ env.CERT_AVAILABLE == 'true' }}
|
|
env:
|
|
CSC_LINK: code-signing-cert.pfx
|
|
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
|
run: npm run build:win-signed -- --publish=never
|
|
|
|
- name: Build Windows packages (unsigned)
|
|
if: ${{ env.CERT_AVAILABLE != 'true' }}
|
|
env:
|
|
CSC_IDENTITY_AUTO_DISCOVERY: 'false'
|
|
run: npm run build:win-unsigned -- --publish=never
|
|
|
|
- name: Upload Windows artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-artifacts
|
|
path: |
|
|
dist/*.exe
|
|
dist/*.zip
|
|
retention-days: 5
|
|
|
|
build-macos:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 20
|
|
cache: npm
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Download external tools (pandoc)
|
|
run: node scripts/download-tools.js
|
|
|
|
- name: Bundle MarkItDown (optional, best effort)
|
|
run: npm run bundle:markitdown
|
|
continue-on-error: true
|
|
|
|
- name: Run tests
|
|
run: npm test
|
|
|
|
- name: Build macOS packages
|
|
run: npm run build:mac -- --publish=never
|
|
|
|
- name: Upload macOS artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: macos-artifacts
|
|
path: |
|
|
dist/*.dmg
|
|
dist/*.zip
|
|
retention-days: 5
|
|
|
|
release:
|
|
needs: [build-linux, build-windows, build-macos]
|
|
if: always()
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Download Linux artifacts
|
|
uses: actions/download-artifact@v4
|
|
continue-on-error: true
|
|
with:
|
|
name: linux-artifacts
|
|
path: dist
|
|
|
|
- name: Download Windows artifacts
|
|
uses: actions/download-artifact@v4
|
|
continue-on-error: true
|
|
with:
|
|
name: windows-artifacts
|
|
path: dist
|
|
|
|
- name: Download macOS artifacts
|
|
uses: actions/download-artifact@v4
|
|
continue-on-error: true
|
|
with:
|
|
name: macos-artifacts
|
|
path: dist
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
generate_release_notes: true
|
|
files: dist/*
|