Skip to content

Commit daefd01

Browse files
committed
update readme for resolute rebase
1 parent d0612b4 commit daefd01

3 files changed

Lines changed: 124 additions & 97 deletions

File tree

Jenkinsfile

Lines changed: 85 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ pipeline {
7676
'''
7777
script{
7878
env.EXIT_STATUS = ''
79+
env.CI_TEST_ATTEMPTED = ''
7980
env.LS_RELEASE = sh(
8081
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:latest 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
8182
returnStdout: true).trim()
@@ -870,6 +871,7 @@ pipeline {
870871
script{
871872
env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
872873
env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json'
874+
env.CI_TEST_ATTEMPTED = 'true'
873875
}
874876
sh '''#! /bin/bash
875877
set -e
@@ -1073,98 +1075,13 @@ EOF
10731075
) '''
10741076
}
10751077
}
1076-
// If this is a Pull request send the CI link as a comment on it
1077-
stage('Pull Request Comment') {
1078-
when {
1079-
not {environment name: 'CHANGE_ID', value: ''}
1080-
environment name: 'EXIT_STATUS', value: ''
1081-
}
1082-
steps {
1083-
sh '''#! /bin/bash
1084-
# Function to retrieve JSON data from URL
1085-
get_json() {
1086-
local url="$1"
1087-
local response=$(curl -s "$url")
1088-
if [ $? -ne 0 ]; then
1089-
echo "Failed to retrieve JSON data from $url"
1090-
return 1
1091-
fi
1092-
local json=$(echo "$response" | jq .)
1093-
if [ $? -ne 0 ]; then
1094-
echo "Failed to parse JSON data from $url"
1095-
return 1
1096-
fi
1097-
echo "$json"
1098-
}
1099-
1100-
build_table() {
1101-
local data="$1"
1102-
1103-
# Get the keys in the JSON data
1104-
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
1105-
1106-
# Check if keys are empty
1107-
if [ -z "$keys" ]; then
1108-
echo "JSON report data does not contain any keys or the report does not exist."
1109-
return 1
1110-
fi
1111-
1112-
# Build table header
1113-
local header="| Tag | Passed |\\n| --- | --- |\\n"
1114-
1115-
# Loop through the JSON data to build the table rows
1116-
local rows=""
1117-
for build in $keys; do
1118-
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
1119-
if [ "$status" = "true" ]; then
1120-
status="✅"
1121-
else
1122-
status="❌"
1123-
fi
1124-
local row="| "$build" | "$status" |\\n"
1125-
rows="${rows}${row}"
1126-
done
1127-
1128-
local table="${header}${rows}"
1129-
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
1130-
echo "$escaped_table"
1131-
}
1132-
1133-
if [[ "${CI}" = "true" ]]; then
1134-
# Retrieve JSON data from URL
1135-
data=$(get_json "$CI_JSON_URL")
1136-
# Create table from JSON data
1137-
table=$(build_table "$data")
1138-
echo -e "$table"
1139-
1140-
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
1141-
-H "Accept: application/vnd.github.v3+json" \
1142-
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
1143-
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
1144-
else
1145-
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
1146-
-H "Accept: application/vnd.github.v3+json" \
1147-
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
1148-
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
1149-
fi
1150-
'''
1151-
1152-
}
1153-
}
11541078
}
11551079
/* ######################
1156-
Send status to Discord
1080+
Comment on PR and Send status to Discord
11571081
###################### */
11581082
post {
11591083
always {
1160-
sh '''#!/bin/bash
1161-
rm -rf /config/.ssh/id_sign
1162-
rm -rf /config/.ssh/id_sign.pub
1163-
git config --global --unset gpg.format
1164-
git config --global --unset user.signingkey
1165-
git config --global --unset commit.gpgsign
1166-
'''
1167-
script{
1084+
script {
11681085
env.JOB_DATE = sh(
11691086
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
11701087
returnStdout: true).trim()
@@ -1207,6 +1124,87 @@ EOF
12071124
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
12081125
}
12091126
}
1127+
script {
1128+
if (env.GITHUBIMAGE =~ /lspipepr/){
1129+
if (env.CI_TEST_ATTEMPTED == "true"){
1130+
sh '''#! /bin/bash
1131+
# Function to retrieve JSON data from URL
1132+
get_json() {
1133+
local url="$1"
1134+
local response=$(curl -s "$url")
1135+
if [ $? -ne 0 ]; then
1136+
echo "Failed to retrieve JSON data from $url"
1137+
return 1
1138+
fi
1139+
local json=$(echo "$response" | jq .)
1140+
if [ $? -ne 0 ]; then
1141+
echo "Failed to parse JSON data from $url"
1142+
return 1
1143+
fi
1144+
echo "$json"
1145+
}
1146+
1147+
build_table() {
1148+
local data="$1"
1149+
1150+
# Get the keys in the JSON data
1151+
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
1152+
1153+
# Check if keys are empty
1154+
if [ -z "$keys" ]; then
1155+
echo "JSON report data does not contain any keys or the report does not exist."
1156+
return 1
1157+
fi
1158+
1159+
# Build table header
1160+
local header="| Tag | Passed |\\n| --- | --- |\\n"
1161+
1162+
# Loop through the JSON data to build the table rows
1163+
local rows=""
1164+
for build in $keys; do
1165+
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
1166+
if [ "$status" = "true" ]; then
1167+
status="✅"
1168+
else
1169+
status="❌"
1170+
fi
1171+
local row="| "$build" | "$status" |\\n"
1172+
rows="${rows}${row}"
1173+
done
1174+
1175+
local table="${header}${rows}"
1176+
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
1177+
echo "$escaped_table"
1178+
}
1179+
1180+
if [[ "${CI}" = "true" ]]; then
1181+
# Retrieve JSON data from URL
1182+
data=$(get_json "$CI_JSON_URL")
1183+
# Create table from JSON data
1184+
table=$(build_table "$data")
1185+
echo -e "$table"
1186+
1187+
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
1188+
-H "Accept: application/vnd.github.v3+json" \
1189+
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
1190+
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
1191+
else
1192+
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
1193+
-H "Accept: application/vnd.github.v3+json" \
1194+
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
1195+
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
1196+
fi
1197+
'''
1198+
}
1199+
}
1200+
}
1201+
sh '''#!/bin/bash
1202+
rm -rf /config/.ssh/id_sign
1203+
rm -rf /config/.ssh/id_sign.pub
1204+
git config --global --unset gpg.format
1205+
git config --global --unset user.signingkey
1206+
git config --global --unset commit.gpgsign
1207+
'''
12101208
}
12111209
cleanup {
12121210
sh '''#! /bin/bash

README.md

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ This image provides various versions that are available via tags. Please read th
6767
| arch-i3 || i3 Arch *Wayland Support |
6868
| arch-kde || KDE Arch *Wayland Support |
6969
| arch-mate || MATE Arch |
70-
| arch-xfce || XFCE Arch |
70+
| arch-xfce || XFCE Arch *Wayland Support |
7171
| debian-i3 || i3 Debian *Wayland Support |
7272
| debian-kde || KDE Debian |
7373
| debian-mate || MATE Debian |
@@ -80,9 +80,9 @@ This image provides various versions that are available via tags. Please read th
8080
| fedora-mate || MATE Fedora |
8181
| fedora-xfce || XFCE Fedora |
8282
| ubuntu-i3 || i3 Ubuntu *Wayland Support |
83-
| ubuntu-kde || KDE Ubuntu |
83+
| ubuntu-kde || KDE Ubuntu *Wayland Only |
8484
| ubuntu-mate || MATE Ubuntu |
85-
| ubuntu-xfce || XFCE Ubuntu |
85+
| ubuntu-xfce || XFCE Ubuntu *Wayland Support |
8686

8787
## Application Setup
8888

@@ -134,7 +134,9 @@ To use hardware acceleration in Wayland mode, we distinguish between the card us
134134
* `DRINODE`: The path to the GPU used for **Rendering** (EGL).
135135
* `DRI_NODE`: The path to the GPU used for **Encoding** (VAAPI/NVENC).
136136

137-
If both variables point to the same device, the container will automatically enable **Zero Copy** encoding, significantly reducing CPU usage and latency.
137+
If both variables point to the same device, the container will automatically enable **Zero Copy** encoding, significantly reducing CPU usage and latency. If they are set to different devices one will be used for **Rendering** and one for **Encoding** with a cpu readback.
138+
139+
You can also use the environment variable `AUTO_GPU=true`, with this set the first card detected in the container (IE `/dev/dri/renderD128`) will be used and configured for **Zero Copy**.
138140

139141
##### Intel & AMD (Open Source Drivers)
140142

@@ -152,13 +154,34 @@ For Intel and AMD GPUs.
152154
153155
##### Nvidia (Proprietary Drivers)
154156
157+
**Note: Nvidia support is currently considered experimental, driver changes can break it at any time.**
158+
155159
**Note: Nvidia support is not available for Alpine-based images.**
156160
161+
**Note: Nvidia frames have issues with hardware decoders in Chromium browsers you need to navigate to `chrome://flags/#disable-accelerated-video-decode` and toggle it to `Disabled` for smooth playback**
162+
157163
**Prerequisites:**
158164

159-
1. **Driver:** Proprietary drivers **580 or higher** are required.
160-
2. **Kernel Parameter:** Set `nvidia-drm.modeset=1` in your host bootloader (GRUB/systemd-boot).
161-
3. **Initialization:** On headless systems, run `nvidia-modprobe --modeset` on the host (once per boot) to initialize the card.
165+
1. **Driver:** Proprietary drivers **580 or higher** are required. **Crucially, you should install the driver using the `.run` file downloaded directly from the Nvidia website.**
166+
* **Unraid:** Use the production branch from the Nvidia Driver Plugin.
167+
168+
2. **Kernel Parameter:** You must set `nvidia-drm.modeset=1 nvidia_drm.fbdev=1` in your host bootloader.
169+
* **Standard Linux (GRUB):** Edit `/etc/default/grub` and add the parameter to your existing `GRUB_CMDLINE_LINUX_DEFAULT` line:
170+
171+
```text
172+
GRUB_CMDLINE_LINUX_DEFAULT="<other existing options> nvidia-drm.modeset=1 nvidia_drm.fbdev=1"
173+
```
174+
175+
Then apply the changes by running:
176+
177+
```bash
178+
sudo update-grub
179+
```
180+
181+
* **Unraid (Syslinux):** Edit the file `/boot/syslinux/syslinux.cfg` and add `nvidia-drm.modeset=1 nvidia_drm.fbdev=1` to the end of the `append` line for the Unraid OS boot entry.
182+
183+
3. **Hardware Initialization:** **On headless systems, the Nvidia video card requires a physical dummy plug inserted into the GPU so that DRM initializes properly.**
184+
162185
4. **Docker Runtime:** Configure the host docker daemon to use the Nvidia runtime:
163186

164187
```bash
@@ -187,6 +210,8 @@ services:
187210
capabilities: [compute,video,graphics,utility]
188211
```
189212

213+
* **Unraid:** Ensure you're properly setting the DRINODE/DRI_NODE and adding `--gpus all --runtime nvidia` to your extra parameters.
214+
190215
### SealSkin Compatibility
191216

192217
This container is compatible with [SealSkin](https://sealskin.app).
@@ -207,12 +232,14 @@ This container is based on [Docker Baseimage Selkies](https://github.com/linuxse
207232
| Variable | Description |
208233
| :----: | --- |
209234
| PIXELFLUX_WAYLAND | **Experimental** If set to true the container will initialize in Wayland mode running [Smithay](https://github.com/Smithay/smithay) and Labwc while enabling zero copy encoding with a GPU |
235+
| SELKIES_DESKTOP | If set to true and in Wayland mode, a simple panel will be initialized with labwc |
210236
| CUSTOM_PORT | Internal port the container listens on for http if it needs to be swapped from the default `3000` |
211237
| CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default `3001` |
212238
| CUSTOM_WS_PORT | Internal port the container listens on for websockets if it needs to be swapped from the default 8082 |
213239
| CUSTOM_USER | HTTP Basic auth username, abc is default. |
214240
| DRI_NODE | **Encoding GPU**: Enable VAAPI/NVENC stream encoding and use the specified device IE `/dev/dri/renderD128` |
215241
| DRINODE | **Rendering GPU**: Specify which GPU to use for EGL/3D acceleration IE `/dev/dri/renderD129` |
242+
| AUTO_GPU | If set to true and in Wayland mode, we will automatically use the first GPU available for encoding and rendering IE `/dev/dri/renderD128` |
216243
| PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |
217244
| SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE `/subfolder/` |
218245
| TITLE | The page title displayed on the web browser, default "Selkies" |
@@ -642,6 +669,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
642669

643670
## Versions
644671

672+
* **07.04.26:** - Rebase Ubuntu images to Resolute.
645673
* **26.03.26:** - Rebase Fedora images to 44.
646674
* **24.03.26:** - Update tags that support Wayland to pass ozone platform for chromium.
647675
* **27.12.25:** - Rebase Alpine images to 3.23.

readme-vars.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ development_versions_items:
2222
- {tag: "arch-i3", desc: "i3 Arch *Wayland Support"}
2323
- {tag: "arch-kde", desc: "KDE Arch *Wayland Support"}
2424
- {tag: "arch-mate", desc: "MATE Arch"}
25-
- {tag: "arch-xfce", desc: "XFCE Arch"}
25+
- {tag: "arch-xfce", desc: "XFCE Arch *Wayland Support"}
2626
- {tag: "debian-i3", desc: "i3 Debian *Wayland Support"}
2727
- {tag: "debian-kde", desc: "KDE Debian"}
2828
- {tag: "debian-mate", desc: "MATE Debian"}
@@ -35,9 +35,9 @@ development_versions_items:
3535
- {tag: "fedora-mate", desc: "MATE Fedora"}
3636
- {tag: "fedora-xfce", desc: "XFCE Fedora"}
3737
- {tag: "ubuntu-i3", desc: "i3 Ubuntu *Wayland Support"}
38-
- {tag: "ubuntu-kde", desc: "KDE Ubuntu"}
38+
- {tag: "ubuntu-kde", desc: "KDE Ubuntu *Wayland Only"}
3939
- {tag: "ubuntu-mate", desc: "MATE Ubuntu"}
40-
- {tag: "ubuntu-xfce", desc: "XFCE Ubuntu"}
40+
- {tag: "ubuntu-xfce", desc: "XFCE Ubuntu *Wayland Support"}
4141
# container parameters
4242
param_container_name: "{{ project_name }}"
4343
param_usage_include_vols: true
@@ -126,6 +126,7 @@ init_diagram: |
126126
"webtop:latest" <- Base Images
127127
# changelog
128128
changelogs:
129+
- {date: "07.04.26:", desc: "Rebase Ubuntu images to Resolute."}
129130
- {date: "26.03.26:", desc: "Rebase Fedora images to 44."}
130131
- {date: "24.03.26:", desc: "Update tags that support Wayland to pass ozone platform for chromium."}
131132
- {date: "27.12.25:", desc: "Rebase Alpine images to 3.23."}

0 commit comments

Comments
 (0)