diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..f81927b1 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: RetroDECK # Replace with a single Patreon username +#open_collective: # Replace with a single Open Collective username +#ko_fi: # Replace with a single Ko-fi username +#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +#liberapay: # Replace with a single Liberapay username +#issuehunt: # Replace with a single IssueHunt username +#otechie: # Replace with a single Otechie username +#lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: ['https://retrodeck.readthedocs.io/en/latest/wiki_about/donations-licenses/'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/workflows/cooker-selfhosted-persistent.yml b/.github/workflows/cooker-selfhosted-persistent.yml new file mode 100644 index 00000000..dced323f --- /dev/null +++ b/.github/workflows/cooker-selfhosted-persistent.yml @@ -0,0 +1,152 @@ +name: "Build cooker (persistent)" + +env: + PERSISTENCE: true + +on: + push: + branches: + - cooker* + - feat* + paths: + - '.github/workflows/**' + - 'automation_tools/**' + - 'emu-configs/**' + - 'es-configs/**' + - 'functions/**' + - 'rd-submodules/**' + - '*.sh' + - 'net.retrodeck.retrodeck.yml' + - 'net.retrodeck.retrodeck.appdata.xml' + pull_request: + branches: + - cooker* + + workflow_dispatch: + +jobs: + + Building_RetroDECK: + runs-on: self-hosted + steps: + + # Circumventing this bug: https://github.com/flatpak/flatpak-builder/issues/317 + - name: Remove stuck mounts + run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/* + continue-on-error: true + + - name: Clone RetroDECK repo + uses: actions/checkout@v3 + with: + submodules: 'true' + + - name: "Install dependencies" + run: "automation_tools/install_dependencies.sh" + + - name: Generate cooker build ID + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_build_id.sh" + + # backing up manifest in case download fails and hashes must be recalculated + - name: Manifest backup + run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" + + - name: Run pre-build automation tasks + run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + + - name: "Adding flatpak portal for automated updates (cooker only)" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_flatpak_portal_add.sh" + + - name: "Updating release notes in appdata" + run: "automation_tools/appdata_management.sh" + + - name: "[DEBUG] Outputting manifest" + run: cat net.retrodeck.retrodeck.yml + + - name: "Build flatpak: download only" + id: "flatpak-download" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only_persistent.sh" + continue-on-error: true + + # Sometimes flatpak download fails, in this case it tries a second time + - name: "Build flatpak: download only (retry)" + if: steps.flatpak-download.outcome == 'failure' + run: | + echo "Download failed, maybe some hash changed since the build start." + echo "Recalculating hashes and retrying download..." + rm -f "{GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml" + cp "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml" + "${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + "${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only_persistent.sh" + + - name: Build flatpak + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only_persistent.sh" + + - name: Create Artifact for flathub + run: | + tar -czf ${GITHUB_WORKSPACE}/RetroDECK-Artifact-cooker.tar.gz -C ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker . + hash=($(sha256sum ${GITHUB_WORKSPACE}/RetroDECK-Artifact-cooker.tar.gz)) + echo $hash > ${GITHUB_WORKSPACE}/RetroDECK-Artifact-cooker.sha + mv -f RetroDECK-Artifact-cooker.* ${{ secrets.ARTIFACT_REPO }} + continue-on-error: true + + - name: Create Bundle + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_bundle_persistent.sh" + + - name: Set environment variable with current branch name + run: echo "GITHUB_REF_SLUG=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV + + - name: Get commits since last release + run: | + # Get the latest release tag + LATEST_TAG=$(git describe --tags --abbrev=0) + # Get all commits since the latest release tag + COMMITS=$(git log $LATEST_TAG..HEAD --pretty=format:"- %s") + # Set the output variable + echo "::set-output name=commits::$COMMITS" + id: commits + continue-on-error: true + + - name: Get branch name + id: branch_name + run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV + + # if it's a feature branch it will not marked as "latest" cooker version + - name: "Set makeLatest (cooker only)" + run: | + if [[ "$BRANCH_NAME" == 'feat/'* ]]; then + echo "MAKE_LATEST=false" >> $GITHUB_ENV + else + echo "MAKE_LATEST=true" >> $GITHUB_ENV + fi + + - name: Publish the flatpak in a new cooker release + uses: ncipollo/release-action@v1 + with: + tag: "${{env.BRANCH_NAME}}-${{ env.buildid }}" + body: | + # Release Notes (Cooker) + This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. + On branch [${{env.BRANCH_NAME}}](https://github.com/XargonWan/RetroDECK/tree/${{env.BRANCH_NAME}}). + + ## Commits since last release + ${{ steps.commits.outputs.commits }} + + For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/qQcrFvaA2C) on our Discord server. + + Cooker channel is provided for the community to test fixes and explore new functionality. + Please DO NOT open issues or ask support on this build. + + artifacts: "RetroDECK-cooker.flatpak,RetroDECK-Artifact.tar.gz" + allowUpdates: true + makeLatest: ${{env.MAKE_LATEST}} # if it's a feat branch is not considered the latest build + token: ${{ secrets.TRIGGER_BUILD_TOKEN }} + repo: RetroDECK-cooker + continue-on-error: true + + # In case it cannot publish the release at least it's providing the flatpak file for creating a manual release + - name: Upload RetroDECK-cooker.flatpak + uses: actions/upload-artifact@v3 + with: + name: retrodeck-flatpak + path: RetroDECK-cooker.flatpak + continue-on-error: true diff --git a/.github/workflows/cooker-selfhosted.yml b/.github/workflows/cooker-selfhosted.yml index 957d036a..43d086c9 100644 --- a/.github/workflows/cooker-selfhosted.yml +++ b/.github/workflows/cooker-selfhosted.yml @@ -1,23 +1,28 @@ name: "Build cooker" on: - push: - branches: - - cooker* - - feat* - paths: - - '.github/workflows/**' - - 'automation_tools/**' - - 'emu-configs/**' - - 'es-configs/**' - - 'functions/**' - - 'rd-submodules/**' - - '*.sh' - - 'net.retrodeck.retrodeck.yml' - - 'net.retrodeck.retrodeck.appdata.xml' - pull_request: - branches: - - cooker* + # push: + # branches: + # - cooker* + # - feat* + # paths: + # - '.github/workflows/**' + # - 'automation_tools/**' + # - 'emu-configs/**' + # - 'es-configs/**' + # - 'functions/**' + # - 'rd-submodules/**' + # - '*.sh' + # - 'net.retrodeck.retrodeck.yml' + # - 'net.retrodeck.retrodeck.appdata.xml' + # pull_request: + # branches: + # - cooker* + + # Italy (CET): 11:00 PM + # Japan (JST): 7:00 AM + schedule: + - cron: '0 22 * * *' workflow_dispatch: @@ -44,6 +49,10 @@ jobs: - name: Generate cooker build ID run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_build_id.sh" + # backing up manifest in case download fails and hashes must be recalculated + - name: Manifest backup + run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" + - name: Run pre-build automation tasks run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" @@ -62,12 +71,15 @@ jobs: continue-on-error: true # Sometimes flatpak download fails, in this case it tries a second time - - name: Run pre-build automation tasks (retry) - if: steps.flatpak-download.outcome == 'failure' - run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" - name: "Build flatpak: download only (retry)" if: steps.flatpak-download.outcome == 'failure' - run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" + run: | + echo "Download failed, maybe some hash changed since the build start." + echo "Recalculating hashes and retrying download..." + rm -f "{GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml" + cp "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml" + "${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + "${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" - name: Build flatpak run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only.sh" diff --git a/.github/workflows/main-selfhosted.yml b/.github/workflows/main-selfhosted.yml index 4e533c2d..2618d7ba 100644 --- a/.github/workflows/main-selfhosted.yml +++ b/.github/workflows/main-selfhosted.yml @@ -40,6 +40,10 @@ jobs: - name: "Install dependencies" run: "automation_tools/install_dependencies.sh" + # backing up manifest in case download fails and hashes must be recalculated + - name: Manifest backup + run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" + - name: Run pre-build automation tasks run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" @@ -65,7 +69,13 @@ jobs: # Sometimes flatpak download fails, in this case it tries a second time - name: "Build flatpak: download only (retry)" if: steps.flatpak-download.outcome == 'failure' - run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" + run: | + echo "Download failed, maybe some hash changed since the build start." + echo "Recalculating hashes and retrying download..." + rm -f "{GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml" + cp "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml" + "${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + "${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" - name: Build flatpak run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only.sh" diff --git a/.github/workflows/submodule-update.yml b/.github/workflows/submodule-update.yml index af02cfd7..03ab876b 100644 --- a/.github/workflows/submodule-update.yml +++ b/.github/workflows/submodule-update.yml @@ -2,8 +2,8 @@ name: Sunday Submodule Update on: # At 4:00 (CET) - schedule: - - cron: '0 2 * * 0' + # schedule: + # - cron: '0 2 * * 0' workflow_dispatch: jobs: diff --git a/.gitignore b/.gitignore index 2784d558..d2569309 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ tmp rd-submodules/es-de/patches-tmp* .local/ buildid +*.bak # Python # ########## @@ -27,6 +28,7 @@ __pycache__ # Submodules # ############## -rd-submodules/retroarch/ -rd-submodules/ryujinx/ -rd-submodules/shared-modules/ \ No newline at end of file +rd-submodules/retroarch* +rd-submodules/ryujinx* +rd-submodules/shared-modules* +rd-submodules/es-de/patches-tmp* diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index 5bf1fa68..00000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 - -# Set the OS, Python version and other tools you might need -build: - os: ubuntu-22.04 - tools: - python: "3.11" - # You can also specify other tool versions: - # nodejs: "19" - # rust: "1.64" - # golang: "1.19" - -# Build documentation in the "docs/" directory with Sphinx -sphinx: - configuration: wiki-rtd/conf.py - -# Optionally build your docs in additional formats such as PDF and ePub -formats: - - pdf - - epub - -# Optional but recommended, declare the Python requirements required -# to build your documentation -# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html -python: - install: - - requirements: wiki-rtd/requirements.txt \ No newline at end of file diff --git a/README.md b/README.md index f053a1ad..88b3f7cb 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ # RetroDECK on your device! +
-
-
RetroDECK is a polished and beginner-friendly environment for playing your retro games on Steam Deck, available with just one click from the Discover app.
+ +RetroDECK is a polished and beginner-friendly environment for playing your retro games on Steam Deck and Linux Desktop, available with just one click from the Discover app or wherever you get your flatpaks.
RetroDECK teamed up with ES-DE to bring you the best retro launcher out there!
+Together with ES-DE, other software and RetroDECK's own Framework. We are trying to bring you the best all-in-one system out there.
No configuration, just play!
+No configuration is needed to start. You provide the games and we provide the play.
Close your game? No worries! Pick up exactly where you left off!
+Quit your game and pick it up exactly where you left off.
Seems like you died! Go back in time and retry without having to restart your game or lose a life. (Must be manually enabled during the beta)
+Go back in time and retry without having to restart your game or skip over that long conversation.
+A super powerful multi-tool interface that allows you to have quick access to the advanced functions and tweak them to your desire.
+Everything is contained within one application and not over your entire filesystem. Only one place to look and one place to backu.!
+With RetroDECK there is no need to replace your existing Linux / SteamOS to get a all-in-one retro gaming solution. Install it on what you already have.
+Features a in-depth global hotkey system with radial menus in addition to button combos via Steam Input.
Wanna be that guy? You can.
-Thanks to RetroArch's Netplay you will be able to play online with your friends, stay tuned for this feature!
Can't surpass THAT point? Don't want to farm? Enable cheats and play smoothly.
RetroDECK pulls information from your library to create a beautiful user experience!
RetroDECK will backup your progression and sync it across multiple devices. (User configuration may be needed)
From the ES-DE frontend you can pull information to your library to create a beautiful user experience from various sources, that fits your style.
The RetroDECK Team always have several things in the works, what follows is just a tiny selection. To stay up to date on latest RetroDECK news check the the Wiki and join the Discord.
+Tools to make it easier to play with your friends online.
RetroDECK will backup your progression and sync it across multiple devices.
Use local RetroDECK users or bind Steam Deck users to your own saves and emulator configurations.
The new controller friendly configurator with even more advanced tools.
Tools for adding all your favorite games as seperate entries in Steam with the click of a button.
RetroDECK will support even more Emulators / Game Engines / Tools and Systems.
Made with by gabeee_boii#5232
+Made with by gabeee_boii#5232 and RetroDECK Team
@@ -171,4 +227,4 @@