name: Build WebDrop Bridge on: push: tags: - 'v*' workflow_dispatch: jobs: build-windows: name: Build Windows Executable runs-on: windows-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements-dev.txt - name: Run tests run: | python -m pytest tests -v --tb=short - name: Build Windows executable run: | python build/scripts/build_windows.py - name: Generate checksum run: | $file = "build\dist\windows\WebDropBridge.exe" $hash = (Get-FileHash -Path $file -Algorithm SHA256).Hash $hash | Out-File -FilePath "build\dist\windows\WebDropBridge.exe.sha256" -NoNewline Write-Host "SHA256: $hash" - name: Upload Windows artifacts uses: actions/upload-artifact@v3 with: name: windows-build path: | build/dist/windows/WebDropBridge.exe build/dist/windows/WebDropBridge.exe.sha256 build-macos: name: Build macOS DMG runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements-dev.txt brew install create-dmg - name: Run tests run: | python -m pytest tests -v --tb=short - name: Build macOS DMG run: | bash build/scripts/build_macos.sh - name: Generate checksum run: | file="build/dist/macos/WebDropBridge.dmg" hash=$(shasum -a 256 "$file" | awk '{print $1}') echo "$hash" > "build/dist/macos/WebDropBridge.dmg.sha256" echo "SHA256: $hash" - name: Upload macOS artifacts uses: actions/upload-artifact@v3 with: name: macos-build path: | build/dist/macos/WebDropBridge.dmg build/dist/macos/WebDropBridge.dmg.sha256 release: name: Create Release needs: [build-windows, build-macos] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - name: Checkout code uses: actions/checkout@v3 - name: Download Windows artifacts uses: actions/download-artifact@v3 with: name: windows-build path: artifacts/windows - name: Download macOS artifacts uses: actions/download-artifact@v3 with: name: macos-build path: artifacts/macos - name: Get version from tag id: get_version run: | VERSION=${GITHUB_REF#refs/tags/} echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - name: Create release uses: actions/create-release@v1 env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} with: tag_name: ${{ steps.get_version.outputs.VERSION }} release_name: Release ${{ steps.get_version.outputs.VERSION }} body: | # WebDrop Bridge ${{ steps.get_version.outputs.VERSION }} ## Downloads ### Windows - **WebDropBridge.exe** - Standalone executable - SHA256: See WebDropBridge.exe.sha256 ### macOS - **WebDropBridge.dmg** - DMG package - SHA256: See WebDropBridge.dmg.sha256 ## Installation ### Windows 1. Download `WebDropBridge.exe` 2. Run the executable 3. No installation required - it's portable ### macOS 1. Download `WebDropBridge.dmg` 2. Open the DMG file 3. Drag WebDropBridge.app to Applications ## Verification To verify the integrity of downloaded files: ```bash # Windows (PowerShell) $file = "WebDropBridge.exe" $expected = Get-Content "WebDropBridge.exe.sha256" $actual = (Get-FileHash -Path $file -Algorithm SHA256).Hash if ($actual -eq $expected) { Write-Host "OK" } else { Write-Host "MISMATCH" } # macOS/Linux shasum -c WebDropBridge.dmg.sha256 ``` ## What's New See [CHANGELOG.md](CHANGELOG.md) for details. draft: false prerelease: false - name: Upload Windows executable uses: actions/upload-release-asset@v1 env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: artifacts/windows/WebDropBridge.exe asset_name: WebDropBridge.exe asset_content_type: application/octet-stream - name: Upload Windows checksum uses: actions/upload-release-asset@v1 env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: artifacts/windows/WebDropBridge.exe.sha256 asset_name: WebDropBridge.exe.sha256 asset_content_type: text/plain - name: Upload macOS DMG uses: actions/upload-release-asset@v1 env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: artifacts/macos/WebDropBridge.dmg asset_name: WebDropBridge.dmg asset_content_type: application/octet-stream - name: Upload macOS checksum uses: actions/upload-release-asset@v1 env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: artifacts/macos/WebDropBridge.dmg.sha256 asset_name: WebDropBridge.dmg.sha256 asset_content_type: text/plain