name: Desktop Build on: push: branches: [main, neutralino] workflow_dispatch: permissions: contents: write jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: include: - os: windows-latest platform: windows binary_source: Monochrome-win_x64.exe binary_dest: Monochrome.exe archive_name: monochrome-windows.zip - os: ubuntu-latest platform: linux binary_source: Monochrome-linux_x64 binary_dest: Monochrome archive_name: monochrome-linux.zip - os: macos-latest platform: macos binary_source: Monochrome-mac_universal binary_dest: Monochrome archive_name: monochrome-mac.zip steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 1 - name: Setup Bun uses: oven-sh/setup-bun@v1 with: bun-version: latest - name: Install dependencies run: bun install - name: Download Neutralino binaries run: bun x neu update - name: Auto-Bump Version run: | $json = Get-Content neutralino.config.json -Raw | ConvertFrom-Json $v = $json.version.Split('.') if ($v.Count -lt 2) { $v += "0" } $newVersion = "{0}.{1}.{2}" -f $v[0], $v[1], ${{ github.run_number }} $json.version = $newVersion $json | ConvertTo-Json -Depth 5 | Set-Content neutralino.config.json shell: pwsh - name: Build application run: bun run build - name: Prepare Release Folder run: | mkdir release cp dist/Monochrome/resources.neu release/ cp neutralino.config.json release/ cp -r dist/Monochrome/extensions release/ cp dist/Monochrome/${{ matrix.binary_source }} release/${{ matrix.binary_dest }} shell: bash - name: Set Permissions (Linux/macOS) if: matrix.platform != 'windows' run: chmod +x release/${{ matrix.binary_dest }} - name: Zip for R2 (Windows) if: matrix.platform == 'windows' run: Compress-Archive -Path release/* -DestinationPath ${{ matrix.archive_name }} -Force shell: pwsh - name: Zip for R2 (Linux/macOS) if: matrix.platform != 'windows' run: | cd release zip -r ../${{ matrix.archive_name }} . shell: bash - name: Isolate Zip File run: | mkdir out_delivery mv ${{ matrix.archive_name }} out_delivery/ shell: bash - name: Generate Update Manifest run: | $config = Get-Content neutralino.config.json | ConvertFrom-Json $version = $config.version $platform = "${{ matrix.platform }}" $archive = "${{ matrix.archive_name }}" $json = @{ version = $version url = "https://downloads.samidy.com/out_delivery/$archive" notes = "Update $version is available." } $json | ConvertTo-Json | Set-Content "out_delivery/update-$platform.json" shell: pwsh - name: Upload to R2 uses: ryand56/r2-upload-action@latest with: r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} r2-bucket: ${{ secrets.R2_BUCKET }} source-dir: 'out_delivery' destination-dir: 'out_delivery' - name: Upload Artifact (GH Internal) uses: actions/upload-artifact@v4 with: name: Monochrome-${{ matrix.platform }} path: release/ retention-days: 30