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 permissions: contents: write jobs: build: name: Build PluginLoader runs-on: ubuntu-latest steps: - name: Checkout 🧰 uses: actions/checkout@v3 - name: Set up NodeJS 17 💎 uses: actions/setup-node@v3 with: node-version: 17 - name: Set up Python 3.10 🐍 uses: actions/setup-python@v3 with: python-version: "3.10" - name: Install Python dependencies ⬇️ run: | python -m pip install --upgrade pip pip install pyinstaller [ -f requirements.txt ] && pip install -r requirements.txt - name: Install NodeJS dependencies ⬇️ run: | cd frontend npm i npm run build - name: Build 🛠️ run: pyinstaller --noconfirm --onefile --name "PluginLoader" --add-data ./backend/static:/static --add-data ./backend/legacy:/legacy ./backend/*.py - name: Upload package artifact ⬆️ uses: actions/upload-artifact@v3 with: name: PluginLoader path: ./dist/PluginLoader release: name: Release 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: Fetch package artifact ⬇️ uses: actions/download-artifact@v3 with: name: PluginLoader path: dist - name: Bump version and push tag ⏫ id: tag_version uses: mathieudutour/github-tag-action@v6.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} - name: Release 📦 uses: softprops/action-gh-release@v1 with: name: Release ${{ steps.tag_version.outputs.new_tag }} tag_name: ${{ steps.tag_version.outputs.new_tag }} files: ./dist/PluginLoader generate_release_notes: true nightly: name: Release the nightly version of the package if: ${{ github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.release == 'prerelease') }} needs: build runs-on: ubuntu-latest steps: - name: Checkout 🧰 uses: actions/checkout@v3 - name: Fetch package artifact ⬇️ uses: actions/download-artifact@v3 with: name: PluginLoader path: dist - name: Get tag 🏷️ id: old_tag uses: rafarlopes/get-latest-pre-release-tag-action@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: repository: 'decky-loader' - name: Prepare tag ⚙️ id: ready_tag run: | shopt -s extglob echo ::set-output name=${${{ steps.old_tag.outputs.tag }}#"-pre"} - name: Bump version ⏫ id: tag_version uses: anothrNick/github-tag-action@1.39.0 if: ${{ github.event_name == 'workflow_dispatch' }} with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} WITH_V: true INITIAL_VERSION: ${{ steps.ready_tag.outputs.name }} - name: Push tag 📤 uses: rickstaa/action-create-tag@v1.3.2 if: ${{ steps.tag_version.outputs.new_tag && github.event_name == 'workflow_dispatch' }} with: tag: ${{ steps.tag_version.outputs.new_tag }}-pre message: Nightly ${{ steps.tag_version.outputs.new_tag }} - name: Release 📦 uses: softprops/action-gh-release@v1 if: ${{ github.event_name == 'workflow_dispatch' }} with: name: Nightly ${{ steps.tag_version.outputs.new_tag }} tag_name: ${{ steps.tag_version.outputs.new_tag }}-pre files: ./dist/PluginLoader prerelease: true generate_release_notes: true - name: Bump prerelease ⏫ id: bump if: ${{ github.event_name == 'schedule' }} run: | git_hash=$(git rev-parse --short "$GITHUB_SHA") echo ::set-output new_tag="nightly-$git_hash" - name: Push tag 📤 uses: rickstaa/action-create-tag@v1.3.2 if: ${{ github.event_name == 'schedule' }} with: tag: ${{ steps.bump.outputs.new_tag }} message: Nightly ${{ steps.bump.outputs.new_tag }} - name: Release 📦 uses: softprops/action-gh-release@v1 if: ${{ github.event_name == 'schedule' }} with: name: Nightly ${{ steps.bump.outputs.new_tag }} tag_name: ${{ steps.bump.outputs.new_tag }} files: ./dist/PluginLoader prerelease: true generate_release_notes: true