Skip to content

Commit 9cd3d2f

Browse files
authored
Merge branch 'OpenActionAPI:main' into main
2 parents 926b460 + bb4768d commit 9cd3d2f

18 files changed

Lines changed: 253 additions & 3 deletions
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
name: Format PR icons
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
pr_number:
7+
description: Pull request number to format
8+
required: true
9+
type: number
10+
11+
permissions:
12+
contents: write
13+
issues: read
14+
pull-requests: read
15+
16+
jobs:
17+
format:
18+
name: Format added icons
19+
runs-on: ubuntu-latest
20+
env:
21+
PR_NUMBER: ${{ inputs.pr_number }}
22+
GH_TOKEN: ${{ github.token }}
23+
steps:
24+
- name: Check out trusted formatter
25+
uses: actions/checkout@v7
26+
with:
27+
path: base
28+
ref: ${{ github.event.repository.default_branch }}
29+
fetch-depth: 1
30+
31+
- name: Get pull request head
32+
id: pr
33+
run: |
34+
gh pr view "$PR_NUMBER" --repo "${{ github.repository }}" --json \
35+
headRefName,headRepository,headRefOid,maintainerCanModify \
36+
--jq '"head_ref=\(.headRefName)\nhead_repository=\(.headRepository.nameWithOwner)\nhead_sha=\(.headRefOid)\nmaintainer_can_modify=\(.maintainerCanModify)"' >> "$GITHUB_OUTPUT"
37+
38+
- name: Require maintainer edits
39+
if: >-
40+
steps.pr.outputs.head_repository != github.repository &&
41+
steps.pr.outputs.maintainer_can_modify != 'true'
42+
run: |
43+
echo "This PR does not allow edits from maintainers." >&2
44+
exit 1
45+
46+
- name: Check out pull request
47+
uses: actions/checkout@v7
48+
with:
49+
repository: ${{ steps.pr.outputs.head_repository }}
50+
ref: ${{ steps.pr.outputs.head_sha }}
51+
path: pr
52+
token: ${{ github.token }}
53+
54+
- name: Set up uv
55+
uses: astral-sh/setup-uv@v7
56+
with:
57+
enable-cache: true
58+
59+
- name: Set up Python
60+
uses: actions/setup-python@v7
61+
with:
62+
python-version: "3.13"
63+
64+
- name: Format added icons
65+
id: format
66+
run: |
67+
set -euo pipefail
68+
mkdir -p format/icons
69+
70+
mapfile -t added_icons < <(
71+
gh api --paginate "repos/${{ github.repository }}/pulls/$PR_NUMBER/files" \
72+
--jq '.[] | select(.status == "added" and (.filename | startswith("icons/"))) | .filename'
73+
)
74+
75+
if ((${#added_icons[@]} == 0)); then
76+
echo "No added icons found in PR #$PR_NUMBER."
77+
echo "changed=false" >> "$GITHUB_OUTPUT"
78+
exit 0
79+
fi
80+
81+
for path in "${added_icons[@]}"; do
82+
relative_path="${path#icons/}"
83+
if [[ "$relative_path" == */* ]]; then
84+
echo "Icon path must be directly under icons/: $path" >&2
85+
exit 1
86+
fi
87+
cp "pr/$path" "format/icons/$relative_path"
88+
done
89+
90+
(
91+
cd format
92+
uv run --project ../base --locked python ../base/format_icons.py
93+
)
94+
95+
changed=false
96+
for path in "${added_icons[@]}"; do
97+
relative_path="${path#icons/}"
98+
if ! cmp -s "format/icons/$relative_path" "pr/$path"; then
99+
cp "format/icons/$relative_path" "pr/$path"
100+
changed=true
101+
fi
102+
done
103+
echo "changed=$changed" >> "$GITHUB_OUTPUT"
104+
105+
- name: Commit formatted icons to pull request
106+
if: steps.format.outputs.changed == 'true'
107+
working-directory: pr
108+
env:
109+
HEAD_REF: ${{ steps.pr.outputs.head_ref }}
110+
PUSH_TOKEN: >-
111+
${{ steps.pr.outputs.head_repository == github.repository &&
112+
github.token ||
113+
secrets.MAINTAINER_TOKEN }}
114+
run: |
115+
set -euo pipefail
116+
if [[ -z "$PUSH_TOKEN" ]]; then
117+
echo "MAINTAINER_TOKEN is required to push to fork PR branches." >&2
118+
exit 1
119+
fi
120+
git config user.name "github-actions[bot]"
121+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
122+
git add -- icons
123+
git commit -m "Format icons"
124+
git -c "http.extraheader=AUTHORIZATION: bearer $PUSH_TOKEN" \
125+
push origin "HEAD:$HEAD_REF"

‎.github/workflows/validate-plugin-submission.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ jobs:
1616
runs-on: ubuntu-latest
1717
steps:
1818
- name: Check out pull request
19-
uses: actions/checkout@v4
19+
uses: actions/checkout@v7
2020
with:
2121
fetch-depth: 0
2222

2323
- name: Set up Python
24-
uses: actions/setup-python@v5
24+
uses: actions/setup-python@v7
2525
with:
2626
python-version: "3.x"
2727

‎catalogue.json‎

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@
2929
"repository": "https://github.com/OpenActionPlugins/system",
3030
"description": "An OpenAction plugin for displaying system information"
3131
},
32+
"us.rivul.tacto": {
33+
"name": "Tacto Connect",
34+
"author": "Rivulus",
35+
"repository": "https://github.com/RivulusLive/tacto-connect-source",
36+
"description": "OpenAction plugin providing Tacto mobile and keyboard device support"
37+
},
3238
"com.ags.info_clock": {
3339
"name": "Info Clock",
3440
"author": "Alex Godinez",
@@ -47,6 +53,24 @@
4753
"repository": "https://github.com/babs/opendeck-plugins-rotary-command",
4854
"description": "Run custom shell commands on rotary encoder actions (CW, CCW, press, long press)"
4955
},
56+
"com.cadufpolis.monitor-brightness": {
57+
"name": "Linux Monitor Brightness",
58+
"author": "cadufpolis",
59+
"repository": "https://github.com/cadufpolis/linux-monitor-brightness",
60+
"description": "Control monitor brightness over DDC/CI from a Stream Deck+ dial (Linux only)",
61+
"flags": {
62+
"ai_assisted": true
63+
}
64+
},
65+
"io.github.cdcxd.herdr": {
66+
"name": "herdr agent status",
67+
"author": "cdcxd",
68+
"repository": "https://github.com/cdcxd/opendeck-herdr-plugin",
69+
"description": "Live herdr agent status on a Stream Deck, for OpenDeck on Linux",
70+
"flags": {
71+
"ai_assisted": true
72+
}
73+
},
5074
"com.sfgrimes.corsaircontrol": {
5175
"name": "Fan Profile Control",
5276
"author": "sfgrimes",
@@ -59,6 +83,15 @@
5983
"repository": "https://github.com/CronusAK/Pulse-Audio-Stream-Deck-Plugin",
6084
"description": "OpenDeck compatible Stream Deck plugin for controling Pulse Audio."
6185
},
86+
"me.dwot.keylight": {
87+
"name": "Key Light Direct",
88+
"author": "dwot",
89+
"repository": "https://github.com/dwot/opendeck-keylight",
90+
"description": "Control Elgato Key Lights from OpenDeck, directly over the network. No companion app needed.",
91+
"flags": {
92+
"ai_assisted": true
93+
}
94+
},
6295
"com.emaspa.openxlr": {
6396
"name": "OpenXLR",
6497
"author": "Emanuele Sparvoli",
@@ -68,6 +101,15 @@
68101
"ai_assisted": true
69102
}
70103
},
104+
"de.felitendo.obs-tools": {
105+
"name": "OBS Tools",
106+
"author": "Felitendo",
107+
"repository": "https://github.com/FeloDeck/obs-tools",
108+
"description": "OBS Studio plugin for OpenDeck",
109+
"flags": {
110+
"ai_assisted": true
111+
}
112+
},
71113
"com.gdwhisper.tikclock": {
72114
"name": "TikClock",
73115
"author": "GDWhisper",
@@ -101,6 +143,15 @@
101143
"ai_assisted": true
102144
}
103145
},
146+
"com.infamous-pattern.openhomeb": {
147+
"name": "OpenHomeB",
148+
"author": "Infamous Pattern",
149+
"repository": "https://github.com/infamous-pattern/OpenHome",
150+
"description": "A Homebridge plugin for OpenDeck",
151+
"flags": {
152+
"ai_assisted": true
153+
}
154+
},
104155
"com.kahikara.opendeck-redline": {
105156
"name": "Redline Monitor",
106157
"author": "Ming",
@@ -128,6 +179,42 @@
128179
"repository": "https://github.com/mdvictor/opendeck-volume-controller",
129180
"description": "A per-application volume control plugin for the Stream Deck using OpenDeck on Linux."
130181
},
182+
"systems.garcia.countdown": {
183+
"name": "Countdown",
184+
"author": "NyleGarcia",
185+
"repository": "https://github.com/NyleGarcia/countdown-opendeck",
186+
"description": "Countdown timer plugin for OpenDeck (Stream Deck on Linux)",
187+
"flags": {
188+
"ai_assisted": true
189+
}
190+
},
191+
"systems.garcia.cztimer": {
192+
"name": "CZ Timer",
193+
"author": "NyleGarcia",
194+
"repository": "https://github.com/NyleGarcia/cztimer-opendeck",
195+
"description": "Star Citizen contested-zone timers for OpenDeck (Stream Deck on Linux): exec hangar cycle and lights, keycard printers, vault door",
196+
"flags": {
197+
"ai_assisted": true
198+
}
199+
},
200+
"systems.garcia.gsr": {
201+
"name": "GPU Screen Recorder",
202+
"author": "NyleGarcia",
203+
"repository": "https://github.com/NyleGarcia/gpu-screen-recorder-opendeck",
204+
"description": "OpenDeck plugin for GPU Screen Recorder: replay buffer, recording and stream on Stream Deck keys, with one key that saves the buffer.",
205+
"flags": {
206+
"ai_assisted": true
207+
}
208+
},
209+
"systems.garcia.openwave": {
210+
"name": "OpenWave",
211+
"author": "NyleGarcia",
212+
"repository": "https://github.com/NyleGarcia/openwave-opendeck",
213+
"description": "OpenDeck plugin for OpenWave — mix, microphone and source volumes plus microphone-group switching from a Stream Deck",
214+
"flags": {
215+
"ai_assisted": true
216+
}
217+
},
131218
"fr.jourdois.pipewire": {
132219
"name": "PipeWire Audio (Native)",
133220
"author": "Stephane Jourdois",
@@ -137,6 +224,15 @@
137224
"ai_assisted": true
138225
}
139226
},
227+
"com.t01ik.macoscontrols": {
228+
"name": "macOS Controls",
229+
"author": "Anatoliy Shulika",
230+
"repository": "https://github.com/T01iK/opendeck-mac-controls",
231+
"description": "Native macOS controls: volume, media, brightness, Control Center switches, launchers, Shortcuts, apps and a hardware monitor.",
232+
"flags": {
233+
"ai_assisted": true
234+
}
235+
},
140236
"at.terrorwolf.helldivers2": {
141237
"name": "Helldivers2",
142238
"author": "Terrorwolf",
@@ -152,6 +248,15 @@
152248
"ai_assisted": true
153249
}
154250
},
251+
"io.github.tonyheadband.opendeck-steam": {
252+
"name": "Steam Dashboard Controller",
253+
"author": "Antonio Frontino",
254+
"repository": "https://github.com/TonyHeadband/opendeck-steam-plugin",
255+
"description": "Steam status, navigation, game launch and friend presence keys for OpenDeck on Linux",
256+
"flags": {
257+
"ai_assisted": true
258+
}
259+
},
155260
"net.parrec.deck.windows-essentials": {
156261
"name": "Windows Essentials",
157262
"author": "Xavi Parrec",
@@ -197,6 +302,15 @@
197302
"repository": "https://github.com/glmagalhaes/rs-ulanzi-d200",
198303
"description": "An unofficial plugin to use Ulanzi D200(H) with OpenDeck"
199304
},
305+
"com.github.grizbeard.opendeck-mirabox293v3": {
306+
"name": "Mirabox 293 V3",
307+
"author": "Grizbeard",
308+
"repository": "https://github.com/Grizbeard/opendeck-mirabox293v3",
309+
"description": "Unofficial OpenDeck device support plugin for the MiraBox Stream Dock 293 V3 (USB 6603:1006)",
310+
"flags": {
311+
"ai_assisted": true
312+
}
313+
},
200314
"com.github.ibanks42.opendeck-m18": {
201315
"name": "VSD Inside M18 / Mirabox M18",
202316
"author": "ibanks42",
@@ -221,6 +335,15 @@
221335
"repository": "https://github.com/MMonkeyKiller/opendeck-ss550",
222336
"description": "An unofficial OpenDeck plugin for the Redragon Streamcraft SS550"
223337
},
338+
"pl.sotomski.opendeck.openmasterhub": {
339+
"name": "Unofficial MasterHub Device Support",
340+
"author": "OpenMasterHub",
341+
"repository": "https://github.com/OpenMasterHub/openmasterhub",
342+
"description": "An unofficial OpenDeck device plugin for the MasterHub.",
343+
"flags": {
344+
"ai_assisted": true
345+
}
346+
},
224347
"com.github.pomeo.opendeck-mirabox-n1": {
225348
"name": "Mirabox N1",
226349
"author": "Sergey Ovechkin",
8.51 KB
Loading
6.63 KB
Loading
4.1 KB
Loading

‎icons/com.t01ik.macoscontrols.png‎

8.23 KB
Loading

‎icons/de.felitendo.obs-tools.png‎

10.2 KB
Loading

‎icons/io.github.cdcxd.herdr.png‎

10.2 KB
Loading
9.81 KB
Loading

0 commit comments

Comments
 (0)