name: Release on: push: tags: - 'v*' workflow_dispatch: jobs: create-release: permissions: contents: write runs-on: ubuntu-latest outputs: release_id: ${{ steps.create-release.outputs.result }} package_version: ${{ steps.get-version.outputs.version }} steps: - uses: actions/checkout@v5 - name: setup node uses: actions/setup-node@v5 with: node-version: lts/* - name: get version id: get-version run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - name: create release id: create-release uses: actions/github-script@v7 env: PACKAGE_VERSION: ${{ steps.get-version.outputs.version }} with: script: | const tag = `app-v${process.env.PACKAGE_VERSION}`; try { const { data } = await github.rest.repos.getReleaseByTag({ owner: context.repo.owner, repo: context.repo.repo, tag, }); return data.id; } catch (e) { if (e.status !== 404) throw e; } const { data } = await github.rest.repos.createRelease({ owner: context.repo.owner, repo: context.repo.repo, tag_name: tag, name: `Psysonic v${process.env.PACKAGE_VERSION}`, body: 'See the assets to download this version and install.', draft: false, prerelease: false }); return data.id; build-macos-windows: needs: create-release permissions: contents: write strategy: fail-fast: false matrix: settings: - platform: 'macos-latest' args: '--target aarch64-apple-darwin' - platform: 'macos-latest' args: '--target x86_64-apple-darwin' - platform: 'windows-latest' args: '' runs-on: ${{ matrix.settings.platform }} steps: - uses: actions/checkout@v5 - name: setup node uses: actions/setup-node@v5 with: node-version: lts/* - name: install Rust stable uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.settings.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} - name: install npm dependencies run: npm install - uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: releaseId: ${{ needs.create-release.outputs.release_id }} args: ${{ matrix.settings.args }} build-linux: needs: create-release permissions: contents: write runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v5 - name: install dependencies run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf \ libasound2-dev \ gstreamer1.0-plugins-base gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad gstreamer1.0-libav - name: install linuxdeploy gstreamer plugin run: | wget -q "https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gstreamer/master/linuxdeploy-plugin-gstreamer.sh" \ -O /usr/local/bin/linuxdeploy-plugin-gstreamer.sh chmod +x /usr/local/bin/linuxdeploy-plugin-gstreamer.sh - name: setup node uses: actions/setup-node@v5 with: node-version: lts/* - name: install Rust stable uses: dtolnay/rust-toolchain@stable - name: install npm dependencies run: npm install - name: build run: npm run tauri:build env: APPIMAGE_EXTRACT_AND_RUN: 1 - name: patch AppImage AppRun run: | APPIMAGE=$(find src-tauri/target/release/bundle/appimage -name "*.AppImage" -not -name "*.tar.gz" | head -1) echo "Patching: $APPIMAGE" APPIMAGE_EXTRACT_AND_RUN=1 ./"$APPIMAGE" --appimage-extract sed -i '/^exec /i export WEBKIT_DISABLE_COMPOSITING_MODE=1\nexport WEBKIT_DISABLE_DMABUF_RENDERER=1\nexport GDK_BACKEND=x11\nexport EGL_PLATFORM=x11' squashfs-root/AppRun wget -q "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" \ -O appimagetool chmod +x appimagetool APPIMAGE_EXTRACT_AND_RUN=1 ./appimagetool squashfs-root "$APPIMAGE" rm -rf squashfs-root appimagetool - name: upload Linux artifacts env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | VERSION=${{ needs.create-release.outputs.package_version }} find src-tauri/target/release/bundle \ \( -name "*.AppImage" -not -name "*.tar.gz" -o -name "*.deb" -o -name "*.rpm" \) \ | xargs gh release upload "app-v${VERSION}" --clobber