Skip to content

release-linux.yml

release-linux.yml #16

Workflow file for this run

name: release-linux.yml
on:
push:
tags:
- 'v*'
workflow_dispatch:
permissions:
contents: write
jobs:
build-linux:
name: Build Linux (Debian + AppImage)
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev
- name: Install frontend dependencies
run: npm install
- name: Build frontend
run: npm run build
- name: Generate Tauri icons
run: npx tauri icon public/icon.png
continue-on-error: true
- name: Install Tauri Rust dependencies
working-directory: src-tauri
run: cargo fetch
- name: Build Tauri app (Linux)
run: npx tauri build 2>&1
timeout-minutes: 30
- name: List build output
run: find src-tauri/target/release/bundle -type f 2>/dev/null || true
continue-on-error: true
- name: Upload Linux artifacts
uses: actions/upload-artifact@v4
with:
name: multimdreader-linux-artifacts
path: |
src-tauri/target/release/bundle/deb/*.deb
src-tauri/target/release/bundle/appimage/*.AppImage
retention-days: 30
- name: Create/Update GitHub Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
name: 'MultiMDReader ${{ github.ref_name }}'
body: 'See release assets below.'
draft: false
prerelease: true
files: |
src-tauri/target/release/bundle/deb/*.deb
src-tauri/target/release/bundle/appimage/*.AppImage
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-arch:
name: Build Arch Linux Package
runs-on: ubuntu-latest
needs: build-linux
steps:
- name: Download Linux artifacts
uses: actions/download-artifact@v4
with:
name: multimdreader-linux-artifacts
path: artifacts/
- name: Build Arch package
uses: addnab/docker-run-action@v3
with:
image: archlinux:latest
options: -v ${{ github.workspace }}/artifacts:/artifacts
run: |
set -e
pacman -Syu --noconfirm
pacman -S --noconfirm base-devel binutils fakeroot sudo dpkg
mkdir -p /tmp/multimdreader-pkg
# Estrai il binario puro ELF a 64-bit dal .deb per creare un pacchetto Arch nativo al 100%
DEB=$(find /artifacts/ -name "*.deb" | head -1)
if [ -z "$DEB" ]; then echo "ERROR: No .deb found"; exit 1; fi
dpkg-deb -x "$DEB" /tmp/extract
BIN=$(find /tmp/extract -type f -path "*/bin/*" | head -1)
if [ -z "$BIN" ]; then BIN=$(find /tmp/extract -type f -perm -111 ! -name "*.so*" | head -1); fi
if [ -z "$BIN" ]; then echo "ERROR: No executable found inside .deb"; exit 1; fi
cp "$BIN" /tmp/multimdreader-pkg/MultiMDReader
chmod +x /tmp/multimdreader-pkg/MultiMDReader
TAG="${{ github.ref_name }}"
VERSION="${TAG#v}"
[ -z "$VERSION" ] || [ "$VERSION" = "$TAG" ] && VERSION="0.1.1"
cat > /tmp/multimdreader-pkg/PKGBUILD << PKGBUILDEOF
pkgname=multimdreader-bin
pkgver=$VERSION
pkgrel=1
pkgdesc="A cross-platform Markdown file reader — Native 64-bit binary"
arch=('x86_64')
url="https://github.com/PiBOH/multimdreader"
license=('AGPL3')
depends=('webkit2gtk-4.1' 'gtk3')
provides=('multimdreader')
conflicts=('multimdreader')
source=("MultiMDReader")
sha256sums=('SKIP')
package() {
install -Dm755 "\$srcdir/MultiMDReader" "\$pkgdir/usr/bin/multimdreader"
install -Dm644 /dev/stdin "\$pkgdir/usr/share/applications/multimdreader.desktop" << DESKTOP
[Desktop Entry]
Name=MultiMDReader
Comment=Cross-Platform Markdown Reader
Exec=multimdreader %F
Icon=multimdreader
Terminal=false
Type=Application
Categories=Utility;Office;TextEditor;Viewer;
MimeType=text/markdown;text/x-markdown;
DESKTOP
}
PKGBUILDEOF
cd /tmp/multimdreader-pkg
useradd -m builduser
echo "builduser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chown -R builduser:builduser /tmp/multimdreader-pkg
su - builduser -c "cd /tmp/multimdreader-pkg && makepkg -sd --noconfirm"
find /tmp/multimdreader-pkg -name "*.pkg.tar.zst" -exec cp {} /artifacts/ \;
- name: Upload Arch package
uses: actions/upload-artifact@v4
with:
name: multimdreader-arch-package
path: artifacts/*.pkg.tar.zst
retention-days: 30
- name: Create/Update GitHub Release with Arch package
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
name: 'MultiMDReader ${{ github.ref_name }}'
body: 'See release assets below.'
draft: false
prerelease: true
files: artifacts/*.pkg.tar.zst
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}