Fix Windows linker errors by adding missing source files #34
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: Create Release | ||
| on: | ||
| workflow_dispatch: | ||
| inputs: | ||
| version: | ||
| description: 'Release version (e.g., v1.0.0)' | ||
| required: true | ||
| type: string | ||
| release_title: | ||
| description: 'Release title' | ||
| required: false | ||
| default: '' | ||
| type: string | ||
| release_notes: | ||
| description: 'Release notes (markdown supported)' | ||
| required: false | ||
| default: '' | ||
| type: string | ||
| prerelease: | ||
| description: 'Mark as pre-release' | ||
| required: false | ||
| default: false | ||
| type: boolean | ||
| jobs: | ||
| trigger-builds: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Trigger Windows Build | ||
| uses: actions/github-script@v7 | ||
| with: | ||
| script: | | ||
| await github.rest.actions.createWorkflowDispatch({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| workflow_id: 'build-windows.yml', | ||
| ref: 'main', | ||
| inputs: { | ||
| version: '${{ github.event.inputs.version }}' | ||
| } | ||
| }); | ||
| - name: Trigger Linux Build | ||
| uses: actions/github-script@v7 | ||
| with: | ||
| script: | | ||
| await github.rest.actions.createWorkflowDispatch({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| workflow_id: 'build-linux.yml', | ||
| ref: 'main', | ||
| inputs: { | ||
| version: '${{ github.event.inputs.version }}' | ||
| } | ||
| }); | ||
| - name: Wait for builds to complete | ||
| run: | | ||
| echo "Triggered Windows and Linux builds" | ||
| echo "Please wait for them to complete before running this workflow again" | ||
| echo "Or manually download artifacts from the individual build runs" | ||
| build-macos: | ||
| runs-on: macos-latest | ||
| steps: | ||
| - name: Checkout code | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| submodules: recursive | ||
| - name: Install dependencies | ||
| run: | | ||
| brew install cmake qt@5 | ||
| - name: Build macOS app bundle | ||
| run: | | ||
| export CMAKE_PREFIX_PATH="/opt/homebrew/opt/qt@5" | ||
| export FUJISAN_VERSION="${{ github.event.inputs.version }}" | ||
| ./scripts/build-macos-release.sh --skip-sign --skip-notarize | ||
| - name: Upload macOS artifacts | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: fujisan-macos-x64 | ||
| path: | | ||
| dist/Fujisan-*.dmg | ||
| dist/Fujisan-*.dmg.sha256 | ||
| retention-days: 30 | ||
| create-draft-release: | ||
| needs: [trigger-builds, build-macos] | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout code | ||
| uses: actions/checkout@v4 | ||
| - name: Download all artifacts | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| path: artifacts | ||
| - name: List downloaded artifacts | ||
| run: | | ||
| echo "=== Downloaded Artifacts ===" | ||
| find artifacts -type f -exec ls -lh {} \; | ||
| - name: Generate release notes | ||
| id: release_notes | ||
| run: | | ||
| VERSION="${{ github.event.inputs.version }}" | ||
| TITLE="${{ github.event.inputs.release_title }}" | ||
| NOTES="${{ github.event.inputs.release_notes }}" | ||
| # Use provided title or generate default | ||
| if [ -z "$TITLE" ]; then | ||
| RELEASE_TITLE="Fujisan $VERSION" | ||
| else | ||
| RELEASE_TITLE="$TITLE" | ||
| fi | ||
| # Generate release notes | ||
| if [ -z "$NOTES" ]; then | ||
| # Auto-generate release notes from recent commits | ||
| COMMITS=$(git log --oneline --since="2 weeks ago" --pretty=format:"- %s (%h)" | head -10) | ||
| RELEASE_NOTES="## Fujisan $VERSION | ||
| ### 🎮 Multi-Platform Atari 8-bit Emulator | ||
| Self-contained packages with no external dependencies required. | ||
| ### 📦 Downloads | ||
| **Choose your platform:** | ||
| - **Windows**: \`Fujisan-*-Windows-x64.msi\` - MSI installer for Windows 10/11 | ||
| - **macOS**: \`Fujisan-*-macOS.dmg\` - DMG installer for macOS 11.0+ | ||
| - **Linux**: | ||
| - \`fujisan_*_amd64.deb\` - Debian/Ubuntu package | ||
| - \`fujisan-*-linux-x64.tar.gz\` - Portable archive | ||
| ### ✅ What's Included | ||
| - **Complete Atari 8-bit emulation** (400/800/XL/XE) | ||
| - **Modern Qt5 interface** with file management | ||
| - **Network debugging support** via TCP server | ||
| - **Disk image support** (.atr, .xfd) | ||
| - **All dependencies bundled** - just install and run! | ||
| ### 🛠️ Technical Details | ||
| - Built with Qt5 and libatari800 | ||
| - Supports Atari BASIC and modern disk formats | ||
| - Cross-platform compatibility | ||
| - No external ROMs or libraries required | ||
| ### 📋 Recent Changes | ||
| $COMMITS | ||
| ### 🔐 Verification | ||
| Each download includes SHA256 checksums for integrity verification. | ||
| --- | ||
| **Need help?** Visit the [GitHub repository](https://github.com/8bitrelics/fujisan) for documentation and support." | ||
| else | ||
| RELEASE_NOTES="$NOTES" | ||
| fi | ||
| # Save for next step | ||
| echo "release_title=$RELEASE_TITLE" >> $GITHUB_OUTPUT | ||
| echo "release_notes<<EOF" >> $GITHUB_OUTPUT | ||
| echo "$RELEASE_NOTES" >> $GITHUB_OUTPUT | ||
| echo "EOF" >> $GITHUB_OUTPUT | ||
| - name: Create GitHub Release | ||
| id: create_release | ||
| uses: actions/create-release@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| tag_name: ${{ github.event.inputs.version }} | ||
| release_name: ${{ steps.release_notes.outputs.release_title }} | ||
| body: ${{ steps.release_notes.outputs.release_notes }} | ||
| draft: true | ||
| prerelease: ${{ github.event.inputs.prerelease }} | ||
| - name: Upload Windows MSI | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-windows-x64/Fujisan-*-Windows-x64.msi | ||
| asset_name: Fujisan-${{ github.event.inputs.version }}-Windows-x64.msi | ||
| asset_content_type: application/x-msi | ||
| - name: Upload Windows MSI Checksum | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-windows-x64/Fujisan-*-Windows-x64.msi.sha256 | ||
| asset_name: Fujisan-${{ github.event.inputs.version }}-Windows-x64.msi.sha256 | ||
| asset_content_type: text/plain | ||
| - name: Upload Linux DEB | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-linux-x64/fujisan_*_amd64.deb | ||
| asset_name: fujisan_${{ github.event.inputs.version }}_amd64.deb | ||
| asset_content_type: application/vnd.debian.binary-package | ||
| - name: Upload Linux DEB Checksum | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-linux-x64/fujisan_*_amd64.deb.sha256 | ||
| asset_name: fujisan_${{ github.event.inputs.version }}_amd64.deb.sha256 | ||
| asset_content_type: text/plain | ||
| - name: Upload Linux TAR.GZ | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-linux-x64/fujisan-*-linux-x64.tar.gz | ||
| asset_name: fujisan-${{ github.event.inputs.version }}-linux-x64.tar.gz | ||
| asset_content_type: application/gzip | ||
| - name: Upload Linux TAR.GZ Checksum | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-linux-x64/fujisan-*-linux-x64.tar.gz.sha256 | ||
| asset_name: fujisan-${{ github.event.inputs.version }}-linux-x64.tar.gz.sha256 | ||
| asset_content_type: text/plain | ||
| - name: Upload macOS DMG | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-macos-x64/Fujisan-*-macOS.dmg | ||
| asset_name: Fujisan-${{ github.event.inputs.version }}-macOS.dmg | ||
| asset_content_type: application/x-apple-diskimage | ||
| - name: Upload macOS DMG Checksum | ||
| uses: actions/upload-release-asset@v1 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
| asset_path: artifacts/fujisan-macos-x64/Fujisan-*-macOS.dmg.sha256 | ||
| asset_name: Fujisan-${{ github.event.inputs.version }}-macOS.dmg.sha256 | ||
| asset_content_type: text/plain | ||
| - name: Display release summary | ||
| run: | | ||
| echo "🎉 Draft Release Created Successfully!" | ||
| echo "" | ||
| echo "📝 Release Details:" | ||
| echo " Version: ${{ github.event.inputs.version }}" | ||
| echo " Title: ${{ steps.release_notes.outputs.release_title }}" | ||
| echo " Draft: Yes (ready for testing)" | ||
| echo " Pre-release: ${{ github.event.inputs.prerelease }}" | ||
| echo "" | ||
| echo "📦 Assets Included:" | ||
| echo " ✅ Windows MSI installer + checksum" | ||
| echo " ✅ Linux DEB package + checksum" | ||
| echo " ✅ Linux TAR.GZ portable + checksum" | ||
| echo " ✅ macOS DMG installer + checksum" | ||
| echo "" | ||
| echo "🔗 Release URL: ${{ steps.create_release.outputs.html_url }}" | ||
| echo "" | ||
| echo "📋 Next Steps:" | ||
| echo " 1. Visit the release URL above" | ||
| echo " 2. Download and test each platform's binaries" | ||
| echo " 3. Edit release notes if needed" | ||
| echo " 4. Publish the release when ready" | ||