name: Builder on: push: pull_request: # schedule: # - cron: '0 13 * * *' # run at 1 PM UTC workflow_dispatch: inputs: release: type: choice description: Release the asset default: 'none' options: - none - prerelease - release bump: type: choice description: Semver to bump default: 'none' options: - none - patch - minor - major permissions: contents: write jobs: build: name: Build PluginLoader runs-on: ubuntu-22.10 steps: - name: Print input run : | echo "release: ${{ github.event.inputs.release }}\n" echo "bump: ${{ github.event.inputs.bump }}\n" - name: Checkout 🧰 uses: actions/checkout@v3 - name: Set up NodeJS 18 💎 uses: actions/setup-node@v3 with: node-version: 18 - name: Set up Python 3.11.4 🐍 uses: actions/setup-python@v4 with: python-version: "3.11.4" - name: Install Python dependencies ⬇️ run: | python -m pip install --upgrade pip pip install pyinstaller==5.13.0 [ -f requirements.txt ] && pip install -r requirements.txt - name: Install JS dependencies ⬇️ working-directory: ./frontend run: | npm i -g pnpm pnpm i --frozen-lockfile - name: Build JS Frontend 🛠️ working-directory: ./frontend run: pnpm run build - name: Build Python Backend 🛠️ run: pyinstaller --noconfirm --onefile --name "PluginLoader" --add-data ./backend/static:/static --add-data ./backend/locales:/locales --add-data ./backend/legacy:/legacy --add-data ./plugin:/plugin --hidden-import=sqlite3 ./backend/*.py - name: Upload package artifact ⬆️ if: ${{ !env.ACT }} uses: actions/upload-artifact@v3 with: name: PluginLoader path: ./dist/PluginLoader - name: Download package artifact locally if: ${{ env.ACT }} uses: actions/upload-artifact@v3 with: path: ./dist/PluginLoader build-win: name: Build PluginLoader for Win runs-on: windows-2022 steps: - name: Checkout 🧰 uses: actions/checkout@v3 - name: Set up NodeJS 18 💎 uses: actions/setup-node@v3 with: node-version: 18 - name: Set up Python 3.11.4 🐍 uses: actions/setup-python@v4 with: python-version: "3.11.4" - name: Install Python dependencies ⬇️ run: | python -m pip install --upgrade pip pip install pyinstaller==5.13.0 pip install -r requirements.txt - name: Install JS dependencies ⬇️ working-directory: ./frontend run: | npm i -g pnpm pnpm i --frozen-lockfile - name: Build JS Frontend 🛠️ working-directory: ./frontend run: pnpm run build - name: Build Python Backend 🛠️ run: pyinstaller --noconfirm --onefile --name "PluginLoader" --add-data "./backend/static;/static" --add-data "./backend/locales;/locales" --add-data "./backend/legacy;/legacy" --add-data "./plugin;/plugin" --hidden-import=sqlite3 ./backend/main.py - name: Upload package artifact ⬆️ uses: actions/upload-artifact@v3 with: name: PluginLoader Win path: ./dist/PluginLoader.exe release: name: Release stable version of the package if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.release == 'release' }} needs: build runs-on: ubuntu-latest steps: - name: Checkout 🧰 uses: actions/checkout@v3 - name: Install semver-tool asdf uses: asdf-vm/actions/install@v1 with: tool_versions: | semver 3.3.0 - name: Fetch package artifact ⬇️ uses: actions/download-artifact@v3 if: ${{ !env.ACT }} with: name: PluginLoader path: dist - name: Get latest release uses: rez0n/actions-github-release@main id: latest_release env: token: ${{ secrets.GITHUB_TOKEN }} repository: "SteamDeckHomebrew/decky-loader" type: "nodraft" - name: Prepare tag ⚙️ id: ready_tag run: | export VERSION=${{ steps.latest_release.outputs.release }} echo "VERS: $VERSION" OUT="notsemver" if [[ "$VERSION" =~ "-pre" ]]; then printf "is prerelease, bumping to release\n" OUT=$(semver bump release "$VERSION") printf "OUT: ${OUT}\n"\ printf "bumping by selected type.\n" if [[ "${{github.event.inputs.bump}}" != "none" ]]; then OUT=$(semver bump ${{github.event.inputs.bump}} "$OUT") printf "OUT: ${OUT}\n" else printf "no type selected, not bumping for release.\n" fi elif [[ ! "$VERSION" =~ "-pre" ]]; then printf "previous tag is a release, bumping by selected type.\n" if [[ "${{github.event.inputs.bump}}" != "none" ]]; then OUT=$(semver bump ${{github.event.inputs.bump}} "$VERSION") printf "OUT: ${OUT}\n" else printf "previous tag is a release, but no bump selected. Defaulting to a patch bump.\n" OUT=$(semver bump patch "$VERSION") printf "OUT: ${OUT}\n" fi fi echo "vOUT: v$OUT" echo tag_name=v$OUT >> $GITHUB_OUTPUT - name: Push tag 📤 uses: rickstaa/action-create-tag@v1.3.2 if: ${{ steps.ready_tag.outputs.tag_name && github.event_name == 'workflow_dispatch' && !env.ACT }} with: tag: ${{ steps.ready_tag.outputs.tag_name }} message: Pre-release ${{ steps.ready_tag.outputs.tag_name }} - name: Release 📦 uses: softprops/action-gh-release@v1 if: ${{ github.event_name == 'workflow_dispatch' && !env.ACT }} with: name: Release ${{ steps.ready_tag.outputs.tag_name }} tag_name: ${{ steps.ready_tag.outputs.tag_name }} files: ./dist/PluginLoader prerelease: false generate_release_notes: true prerelease: name: Release the pre-release version of the package if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.release == 'prerelease' }} needs: build runs-on: ubuntu-latest steps: - name: Checkout 🧰 uses: actions/checkout@v3 - name: Install semver-tool asdf uses: asdf-vm/actions/install@v1 with: tool_versions: | semver 3.3.0 - name: Fetch package artifact ⬇️ uses: actions/download-artifact@v3 if: ${{ !env.ACT }} with: name: PluginLoader path: dist - name: Get latest release uses: rez0n/actions-github-release@main id: latest_release env: token: ${{ secrets.GITHUB_TOKEN }} repository: "SteamDeckHomebrew/decky-loader" type: "nodraft" - name: Prepare tag ⚙️ id: ready_tag run: | export VERSION=${{ steps.latest_release.outputs.release }} echo "VERS: $VERSION" OUT="" if [[ ! "$VERSION" =~ "-pre" ]]; then printf "pre-release from release, bumping by selected type and prerel\n" if [[ ! ${{ github.event.inputs.bump }} == "none" ]]; then OUT=$(semver bump ${{github.event.inputs.bump}} "$VERSION") printf "OUT: ${OUT}\n" else printf "type not selected, defaulting to patch\n" OUT=$(semver bump patch "$VERSION") printf "OUT: ${OUT}\n" fi OUT="$OUT-pre" OUT=$(semver bump prerel "$OUT") printf "OUT: ${OUT}\n" elif [[ "$VERSION" =~ "-pre" ]]; then printf "pre-release to pre-release, bumping by selected type and or prerel version\n" if [[ ! ${{ github.event.inputs.bump }} == "none" ]]; then OUT=$(semver bump ${{github.event.inputs.bump}} "$VERSION") printf "OUT: ${OUT}\n" OUT="$OUT-pre" printf "OUT: ${OUT}\n" printf "bumping prerel\n" OUT=$(semver bump prerel "$OUT") printf "OUT: ${OUT}\n" else printf "type not selected, defaulting to new pre-release only\n" printf "bumping prerel\n" OUT=$(semver bump prerel "$VERSION") printf "OUT: ${OUT}\n" fi fi printf "vOUT: v${OUT}\n" echo tag_name=v$OUT >> $GITHUB_OUTPUT - name: Push tag 📤 uses: rickstaa/action-create-tag@v1.3.2 if: ${{ steps.ready_tag.outputs.tag_name && github.event_name == 'workflow_dispatch' && !env.ACT }} with: tag: ${{ steps.ready_tag.outputs.tag_name }} message: Pre-release ${{ steps.ready_tag.outputs.tag_name }} - name: Release 📦 uses: softprops/action-gh-release@v1 if: ${{ github.event_name == 'workflow_dispatch' && !env.ACT }} with: name: Prerelease ${{ steps.ready_tag.outputs.tag_name }} tag_name: ${{ steps.ready_tag.outputs.tag_name }} files: ./dist/PluginLoader prerelease: true generate_release_notes: true