name: Electron Master defaults: run: shell: bash env: CI: true on: push: tags: - v** concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: false jobs: build: # this is so the assets can be added to the release permissions: contents: write strategy: matrix: os: - ubuntu-latest - windows-latest - macos-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - if: ${{ startsWith(matrix.os, 'windows') }} run: pip.exe install setuptools - if: ${{ ! startsWith(matrix.os, 'windows') }} run: | mkdir .venv python3 -m venv .venv source .venv/bin/activate python3 -m pip install setuptools - if: ${{ startsWith(matrix.os, 'ubuntu') }} run: | sudo apt-get update sudo apt-get install flatpak -y sudo apt-get install flatpak-builder -y sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo sudo flatpak install org.freedesktop.Sdk/x86_64/23.08 -y sudo flatpak install org.freedesktop.Platform/x86_64/23.08 -y sudo flatpak install org.electronjs.Electron2.BaseApp/x86_64/23.08 -y - name: Set up environment uses: ./.github/actions/setup - name: Build Electron for Mac if: ${{ startsWith(matrix.os, 'macos') }} run: ./bin/package-electron env: CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} CSC_LINK: ${{ secrets.CSC_LINK }} APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} - name: Build Electron if: ${{ ! startsWith(matrix.os, 'macos') }} run: ./bin/package-electron - name: Upload Build uses: actions/upload-artifact@v4 with: name: actual-electron-${{ matrix.os }} path: | packages/desktop-electron/dist/*.dmg packages/desktop-electron/dist/*.exe !packages/desktop-electron/dist/Actual-windows.exe packages/desktop-electron/dist/*.AppImage packages/desktop-electron/dist/*.flatpak - name: Upload Windows Store Build if: ${{ startsWith(matrix.os, 'windows') }} uses: actions/upload-artifact@v4 with: name: actual-electron-${{ matrix.os }}-appx path: | packages/desktop-electron/dist/*.appx - name: Process release version id: process_version run: | echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" - name: Add to new release uses: softprops/action-gh-release@v2 with: draft: true body: | :link: [View release notes](https://actualbudget.org/blog/release-${{ steps.process_version.outputs.version }}) ## Desktop releases Please note: Microsoft store updates can sometimes lag behind the main release by a couple of days while they verify the new version. files: | packages/desktop-electron/dist/*.dmg packages/desktop-electron/dist/*.exe !packages/desktop-electron/dist/Actual-windows.exe packages/desktop-electron/dist/*.AppImage packages/desktop-electron/dist/*.flatpak publish-microsoft-store: needs: build runs-on: windows-latest if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') }} steps: - name: Install StoreBroker shell: powershell run: | Install-Module -Name StoreBroker -AcceptLicense -Force -Scope CurrentUser -Verbose - name: Download Microsoft Store artifacts uses: actions/download-artifact@v4 with: name: actual-electron-windows-latest-appx - name: Submit to Microsoft Store shell: powershell run: | # Disable telemetry $global:SBDisableTelemetry = $true # Authenticate against the store $pass = ConvertTo-SecureString -String '${{ secrets.MICROSOFT_STORE_CLIENT_SECRET }}' -AsPlainText -Force $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ${{ secrets.MICROSOFT_STORE_CLIENT_ID }},$pass Set-StoreBrokerAuthentication -TenantId '${{ secrets.MICROSOFT_STORE_TENANT_ID }}' -Credential $cred # Zip and create metadata files $artifacts = Get-ChildItem -Path . -Filter *.appx | Select-Object -ExpandProperty FullName New-StoreBrokerConfigFile -Path "$PWD/config.json" -AppId ${{ secrets.MICROSOFT_STORE_PRODUCT_ID }} New-SubmissionPackage -ConfigPath "$PWD/config.json" -DisableAutoPackageNameFormatting -AppxPath $artifacts -OutPath "$PWD" -OutName submission # Submit the app # See https://github.com/microsoft/StoreBroker/blob/master/Documentation/USAGE.md#the-easy-way Update-ApplicationSubmission ` -AppId ${{ secrets.MICROSOFT_STORE_PRODUCT_ID }} ` -SubmissionDataPath "submission.json" ` -PackagePath "submission.zip" ` -ReplacePackages ` -NoStatus ` -AutoCommit ` -Force