Skip to content

Commit 77e6783

Browse files
ci: add build + release workflow
Build the plugin in CI with the Decky CLI on ubuntu-latest, upload the zip as an artifact on push/PR, and publish a GitHub Release with the zip on v* tags. Document building from source in the README. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent c71c763 commit 77e6783

2 files changed

Lines changed: 78 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Build
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
tags:
8+
- "v*"
9+
pull_request:
10+
workflow_dispatch:
11+
12+
permissions:
13+
contents: write
14+
15+
jobs:
16+
build:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Download Decky CLI
23+
run: |
24+
mkdir -p "$GITHUB_WORKSPACE/cli"
25+
curl -L -o "$GITHUB_WORKSPACE/cli/decky" \
26+
https://github.com/SteamDeckHomebrew/cli/releases/latest/download/decky-linux-x86_64
27+
chmod +x "$GITHUB_WORKSPACE/cli/decky"
28+
29+
- name: Build plugin
30+
run: |
31+
sudo -E "$GITHUB_WORKSPACE/cli/decky" plugin build \
32+
--output-path "$GITHUB_WORKSPACE/out" \
33+
--tmp-output-path "$GITHUB_WORKSPACE/build" \
34+
"$GITHUB_WORKSPACE"
35+
36+
- name: Normalize output permissions
37+
run: sudo chown -R "$(id -u):$(id -g)" "$GITHUB_WORKSPACE/out"
38+
39+
- name: Upload build artifact
40+
uses: actions/upload-artifact@v4
41+
with:
42+
name: Decky-Framegen
43+
path: out/*.zip
44+
if-no-files-found: error
45+
46+
- name: Create GitHub Release
47+
if: startsWith(github.ref, 'refs/tags/v')
48+
uses: softprops/action-gh-release@v2
49+
with:
50+
files: out/*.zip
51+
generate_release_notes: true

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,33 @@ Dx12Upscaler=fsr31 ~/fgmod/fgmod %command%
113113
- **Supporting Libraries**: All required DX12/Vulkan libraries (libxess.dll, amd_fidelityfx, etc.)
114114

115115

116+
## Building From Source
117+
118+
This plugin is built with the [Decky CLI](https://github.com/SteamDeckHomebrew/cli), which runs the frontend `rollup` build, downloads the bundled `remote_binary` assets (OptiScaler archive + FSR4 DLLs) declared in `package.json`, and packages everything into an installable zip.
119+
120+
### In CI (recommended)
121+
122+
A GitHub Actions workflow at [.github/workflows/build.yml](.github/workflows/build.yml) builds the plugin on every push/PR and uploads the zip as a build artifact. Pushing a `v*` tag additionally publishes a GitHub Release with the zip attached:
123+
124+
```bash
125+
git tag v0.16.0
126+
git push origin v0.16.0
127+
```
128+
129+
### Locally
130+
131+
Requires Docker (the CLI builds inside a Linux container) and the Decky CLI binary in `./cli/decky`:
132+
133+
```bash
134+
# One-time: fetch dependencies + the Decky CLI (interactive)
135+
.vscode/setup.sh
136+
137+
# Build -> produces out/<plugin-name>.zip
138+
just build # or: .vscode/build.sh
139+
```
140+
141+
Then install the resulting zip via Decky Loader's "Install from ZIP" option in developer settings. Note: a full build cannot run on machines without Docker (e.g. stock macOS without Docker Desktop) - use the CI workflow instead.
142+
116143
## Credits
117144

118145
### Core Technologies

0 commit comments

Comments
 (0)