--- name: CI-Flatpak permissions: contents: read on: workflow_call: inputs: release_commit: required: true type: string release_version: required: true type: string jobs: build_linux_flatpak: name: ${{ matrix.arch }} env: APP_ID: dev.lizardbyte.app.Sunshine MATRIX_ARCH: ${{ matrix.arch }} NODE_VERSION: "20" PLATFORM_VERSION: "24.08" runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - arch: x86_64 runner: ubuntu-22.04 - arch: aarch64 runner: ubuntu-22.04-arm steps: - name: More space if: matrix.arch == 'x86_64' uses: LizardByte/actions/actions/more_space@4586d7925d5781050fec9819bd497106a7ae2ba3 # v2025.1221.31807 with: analyze-space-savings: true clean-all: true - name: Checkout uses: actions/checkout@v6 with: submodules: recursive - name: Setup node id: node uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} - name: Install npm dependencies run: npm install --package-lock-only - name: Debug package-lock.json run: cat package-lock.json - name: Setup python id: python uses: actions/setup-python@v6 with: python-version: '3.12' - name: Setup Dependencies Linux Flatpak run: | python -m pip install ./packaging/linux/flatpak/deps/flatpak-builder-tools/node sudo apt-get update -y sudo apt-get install -y \ cmake \ flatpak sudo su "$(whoami)" -c "flatpak --user remote-add --if-not-exists flathub \ https://flathub.org/repo/flathub.flatpakrepo " sudo su "$(whoami)" -c "flatpak --user install -y flathub \ org.flatpak.Builder \ org.freedesktop.Platform/${MATRIX_ARCH}/${PLATFORM_VERSION} \ org.freedesktop.Sdk/${MATRIX_ARCH}/${PLATFORM_VERSION} \ org.freedesktop.Sdk.Extension.node${NODE_VERSION}/${MATRIX_ARCH}/${PLATFORM_VERSION} \ " flatpak run org.flatpak.Builder --version - name: flatpak node generator # https://github.com/flatpak/flatpak-builder-tools/blob/master/node/README.md run: flatpak-node-generator npm package-lock.json - name: Debug generated-sources.json run: cat generated-sources.json - name: Cache Flatpak build uses: actions/cache@v4 with: path: ./build/.flatpak-builder key: flatpak-${{ matrix.arch }}-${{ github.sha }} restore-keys: | flatpak-${{ matrix.arch }}- - name: Configure Flatpak Manifest env: INPUT_RELEASE_VERSION: ${{ inputs.release_version }} INPUT_RELEASE_COMMIT: ${{ inputs.release_commit }} REPOSITORY_CLONE_URL: ${{ github.event.repository.clone_url }} run: | # variables for manifest branch="${GITHUB_REF}" build_version="${INPUT_RELEASE_VERSION}" commit="${INPUT_RELEASE_COMMIT}" clone_url="${REPOSITORY_CLONE_URL}" if [ "${GITHUB_EVENT_NAME}" == "push" ]; then echo "This is a PUSH event" branch="${GITHUB_REF_NAME}" fi echo "Branch: ${branch}" echo "Commit: ${commit}" echo "Clone URL: ${clone_url}" export BRANCH=${branch} export BUILD_VERSION=${build_version} export CLONE_URL=${clone_url} export COMMIT=${commit} mkdir -p build mkdir -p artifacts cmake -DGITHUB_CLONE_URL="${clone_url}" \ -B build \ -S . \ -DSUNSHINE_CONFIGURE_FLATPAK_MAN=ON \ -DSUNSHINE_CONFIGURE_ONLY=ON - name: Debug Manifest working-directory: build run: cat "${APP_ID}.yml" - name: Build Linux Flatpak working-directory: build run: | echo "::add-matcher::.github/matchers/gcc-strip3.json" sudo su "$(whoami)" -c "flatpak run org.flatpak.Builder \ --arch=${MATRIX_ARCH} \ --force-clean \ --repo=repo \ --sandbox \ --stop-at=cuda build-sunshine ${APP_ID}.yml" cp -r .flatpak-builder copy-of-flatpak-builder sudo su "$(whoami)" -c "flatpak run org.flatpak.Builder \ --arch=${MATRIX_ARCH} \ --force-clean \ --repo=repo \ --sandbox \ build-sunshine ${APP_ID}.yml" rm -rf .flatpak-builder mv copy-of-flatpak-builder .flatpak-builder sudo su "$(whoami)" -c "flatpak build-bundle \ --arch=${MATRIX_ARCH} \ ./repo \ ../artifacts/sunshine_${MATRIX_ARCH}.flatpak ${APP_ID}" sudo su "$(whoami)" -c "flatpak build-bundle \ --runtime \ --arch=${MATRIX_ARCH} \ ./repo \ ../artifacts/sunshine_debug_${MATRIX_ARCH}.flatpak ${APP_ID}.Debug" echo "::remove-matcher owner=gcc-strip3::" - name: Lint Flatpak working-directory: build run: | exceptions_file="${GITHUB_WORKSPACE}/packaging/linux/flatpak/exceptions.json" echo "Linting flatpak manifest" flatpak run --command=flatpak-builder-lint org.flatpak.Builder \ --exceptions \ --user-exceptions "${exceptions_file}" \ manifest \ "${APP_ID}.yml" echo "Linting flatpak repo" # TODO: add arg # --mirror-screenshots-url=https://dl.flathub.org/media \ flatpak run --command=flatpak-builder-lint org.flatpak.Builder \ --exceptions \ --user-exceptions "${exceptions_file}" \ repo \ repo - name: Package Flathub repo archive # copy files required to generate the Flathub repo if: matrix.arch == 'x86_64' run: | mkdir -p flathub/modules cp "./build/generated-sources.json" "./flathub/" cp "./build/package-lock.json" "./flathub/" cp "./build/${APP_ID}.yml" "./flathub/" cp "./build/${APP_ID}.metainfo.xml" "./flathub/" cp "./packaging/linux/flatpak/README.md" "./flathub/" cp "./packaging/linux/flatpak/flathub.json" "./flathub/" cp -r "./packaging/linux/flatpak/modules/." "./flathub/modules/" # submodules will need to be handled in the workflow that creates the PR # create the archive tar -czf ./artifacts/flathub.tar.gz -C ./flathub . - name: Upload Artifacts uses: actions/upload-artifact@v5 with: name: build-Linux-Flatpak-${{ matrix.arch }} path: artifacts/ if-no-files-found: error