chore: release v6.4.0 #48
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Multi-Platform Release | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-windows: | |
| runs-on: windows-2022 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Install server dependencies | |
| run: | | |
| cd server | |
| npm ci | |
| - name: Rebuild native modules for Windows | |
| run: | | |
| npm rebuild better-sqlite3 --build-from-source | |
| npm rebuild keytar --build-from-source | |
| - name: Build Vite app | |
| run: npm run build | |
| - name: Build and publish Windows installer | |
| run: npx electron-builder --win --publish always | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Upload Windows artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: windows-installer | |
| path: | | |
| dist/*.exe | |
| dist/latest.yml | |
| retention-days: 5 | |
| build-macos: | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Install server dependencies | |
| run: | | |
| cd server | |
| npm ci | |
| - name: Rebuild native modules for macOS | |
| run: | | |
| npm rebuild better-sqlite3 --build-from-source | |
| npm rebuild keytar --build-from-source | |
| - name: Build Vite app | |
| run: npm run build | |
| - name: Build and publish macOS installers | |
| run: npx electron-builder --mac --publish always | |
| env: | |
| CSC_IDENTITY_AUTO_DISCOVERY: false | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Upload macOS artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: macos-installer | |
| path: | | |
| dist/*.dmg | |
| dist/*.zip | |
| dist/latest-mac.yml | |
| retention-days: 5 | |
| build-linux: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install build tools | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y build-essential libsecret-1-dev rpm libasound2-dev | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Install server dependencies | |
| run: | | |
| cd server | |
| npm ci | |
| - name: Rebuild native modules for Linux | |
| run: | | |
| npm rebuild better-sqlite3 --build-from-source | |
| npm rebuild keytar --build-from-source | |
| - name: Build Vite app | |
| run: npm run build | |
| - name: Build and publish Linux installers | |
| run: npx electron-builder --linux --publish always | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Upload Linux artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-installer | |
| path: | | |
| dist/*.AppImage | |
| dist/*.deb | |
| dist/*.rpm | |
| dist/latest-linux.yml | |
| retention-days: 5 | |
| create-release: | |
| needs: [build-windows, build-macos, build-linux] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: dist-artifacts | |
| - name: Display structure of downloaded files | |
| run: ls -R dist-artifacts | |
| - name: Extract version from tag | |
| id: get_version | |
| run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT | |
| - name: Read release notes from commit | |
| id: release_notes | |
| run: | | |
| git log -1 --pretty=%B > commit_msg.txt | |
| if grep -q "RELEASE_NOTES_START" commit_msg.txt; then | |
| echo "CUSTOM_NOTES<<EOF" >> $GITHUB_OUTPUT | |
| sed -n '/RELEASE_NOTES_START/,/RELEASE_NOTES_END/p' commit_msg.txt | sed '1d;$d' >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| echo "Found release notes in commit message" | |
| else | |
| echo "CUSTOM_NOTES=" >> $GITHUB_OUTPUT | |
| echo "No release notes found in commit message" | |
| fi | |
| rm -f commit_msg.txt | |
| - name: Create or update release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ github.ref_name }} | |
| name: v${{ steps.get_version.outputs.VERSION }} | |
| draft: false | |
| prerelease: false | |
| files: | | |
| dist-artifacts/windows-installer/* | |
| dist-artifacts/macos-installer/* | |
| dist-artifacts/linux-installer/* | |
| fail_on_unmatched_files: false | |
| body: | | |
| ## LyricDisplay v${{ steps.get_version.outputs.VERSION }} | |
| ${{ steps.release_notes.outputs.CUSTOM_NOTES }} | |
| --- | |
| ### Downloads | |
| **Windows:** | |
| - **Windows 10/11 (64-bit)**: Download `LyricDisplay-${{ steps.get_version.outputs.VERSION }}-Windows-Setup.exe` | |
| **macOS:** | |
| - **Apple Silicon (M1/M2/M3)**: Download `LyricDisplay-${{ steps.get_version.outputs.VERSION }}-macOS-arm64.dmg` | |
| - **Intel Macs**: Download `LyricDisplay-${{ steps.get_version.outputs.VERSION }}-macOS-x64.dmg` | |
| **Linux:** | |
| - **AppImage** (recommended): `LyricDisplay-${{ steps.get_version.outputs.VERSION }}-Linux.AppImage` - Works on all distributions | |
| ### Installation | |
| See the [Installation Guide](https://lyricdisplay.app/integration-guide) for detailed setup instructions. | |
| --- | |
| ### ⚠️ macOS Users: Important Installation Steps | |
| Because this app is not code-signed with an Apple Developer certificate, macOS will show a "damaged" or "can't be opened" error. **This is expected** and can be easily fixed: | |
| 1. Download and open the `.dmg` file, drag LyricDisplay to Applications | |
| 2. **Before opening the app**, open Terminal and run: | |
| ``` | |
| xattr -cr /Applications/LyricDisplay.app | |
| ``` | |
| 3. Now open LyricDisplay from Applications | |
| 4. If prompted, go to **System Preferences → Security & Privacy → General** and click "Open Anyway" | |
| You only need to do this once. After the first launch, macOS will remember your choice. | |
| --- | |
| ### Windows & Linux Notes | |
| **Windows:** If SmartScreen appears, click "More info" → "Run anyway" | |
| **Linux:** Make the AppImage executable before running: | |
| ``` | |
| chmod +x LyricDisplay-*.AppImage | |
| ./LyricDisplay-*.AppImage | |
| ``` | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |