Compare commits

...

12 Commits

Author SHA1 Message Date
LinuxServer-CI 241a23f0ea Bot Updating Package Versions 2026-06-02 11:55:17 +00:00
LinuxServer-CI 6770bf7b76 Bot Updating Package Versions 2026-05-28 18:26:15 +00:00
LinuxServer-CI 0e89eeca25 Bot Updating Package Versions 2026-05-26 14:22:15 +00:00
LinuxServer-CI b6e8b29047 Bot Updating Package Versions 2026-05-15 18:41:47 +00:00
LinuxServer-CI 65e2192a0f Bot Updating Package Versions 2026-05-12 13:35:36 +00:00
LinuxServer-CI eb420ead75 Bot Updating Templated Files 2026-05-12 13:27:36 +00:00
LinuxServer-CI 1f44ecb4b1 Bot Updating Package Versions 2026-05-05 12:56:33 +00:00
LinuxServer-CI f0af7e0bee Bot Updating Package Versions 2026-04-30 17:57:48 +00:00
LinuxServer-CI 5adfcae53d Bot Updating Package Versions 2026-04-28 13:25:13 +00:00
LinuxServer-CI ba86674661 Bot Updating Package Versions 2026-04-21 12:49:57 +00:00
LinuxServer-CI 5932c8f2cf Bot Updating Package Versions 2026-04-14 12:49:46 +00:00
LinuxServer-CI 311cc969e5 Bot Updating Templated Files 2026-04-07 12:43:18 +00:00
2 changed files with 129 additions and 114 deletions
Vendored
+104 -88
View File
@@ -75,6 +75,8 @@ pipeline {
'''
script{
env.EXIT_STATUS = ''
env.CI_TEST_ATTEMPTED = ''
env.PUSH_ATTEMPTED = ''
env.LS_RELEASE = sh(
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' || : ''',
returnStdout: true).trim()
@@ -871,6 +873,7 @@ pipeline {
script{
env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json'
env.CI_TEST_ATTEMPTED = 'true'
}
sh '''#! /bin/bash
set -e
@@ -923,6 +926,9 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
env.PUSH_ATTEMPTED = 'true'
}
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
@@ -952,11 +958,18 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
env.PUSH_ATTEMPTED = 'true'
}
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
[[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
if [[ "${MANIFESTIMAGE%%/*}" =~ \\. ]]; then
MANIFESTIMAGEPLUS="${MANIFESTIMAGE}"
else
MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
fi
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
@@ -1073,98 +1086,13 @@ EOF
) '''
}
}
// If this is a Pull request send the CI link as a comment on it
stage('Pull Request Comment') {
when {
not {environment name: 'CHANGE_ID', value: ''}
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''#! /bin/bash
# Function to retrieve JSON data from URL
get_json() {
local url="$1"
local response=$(curl -s "$url")
if [ $? -ne 0 ]; then
echo "Failed to retrieve JSON data from $url"
return 1
fi
local json=$(echo "$response" | jq .)
if [ $? -ne 0 ]; then
echo "Failed to parse JSON data from $url"
return 1
fi
echo "$json"
}
build_table() {
local data="$1"
# Get the keys in the JSON data
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
# Check if keys are empty
if [ -z "$keys" ]; then
echo "JSON report data does not contain any keys or the report does not exist."
return 1
fi
# Build table header
local header="| Tag | Passed |\\n| --- | --- |\\n"
# Loop through the JSON data to build the table rows
local rows=""
for build in $keys; do
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
if [ "$status" = "true" ]; then
status="✅"
else
status="❌"
fi
local row="| "$build" | "$status" |\\n"
rows="${rows}${row}"
done
local table="${header}${rows}"
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
echo "$escaped_table"
}
if [[ "${CI}" = "true" ]]; then
# Retrieve JSON data from URL
data=$(get_json "$CI_JSON_URL")
# Create table from JSON data
table=$(build_table "$data")
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
}
}
}
/* ######################
Send status to Discord
Comment on PR and Send status to Discord
###################### */
post {
always {
sh '''#!/bin/bash
rm -rf /config/.ssh/id_sign
rm -rf /config/.ssh/id_sign.pub
git config --global --unset gpg.format
git config --global --unset user.signingkey
git config --global --unset commit.gpgsign
'''
script{
script {
env.JOB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
@@ -1207,6 +1135,94 @@ EOF
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
script {
if (env.GITHUBIMAGE =~ /lspipepr/){
if (env.CI_TEST_ATTEMPTED == "true" || env.PUSH_ATTEMPTED == "true"){
sh '''#! /bin/bash
# Function to retrieve JSON data from URL
get_json() {
local url="$1"
local response=$(curl -s "$url")
if [ $? -ne 0 ]; then
echo "Failed to retrieve JSON data from $url"
return 1
fi
local json=$(echo "$response" | jq .)
if [ $? -ne 0 ]; then
echo "Failed to parse JSON data from $url"
return 1
fi
echo "$json"
}
build_table() {
local data="$1"
# Get the keys in the JSON data
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
# Check if keys are empty
if [ -z "$keys" ]; then
echo "JSON report data does not contain any keys or the report does not exist."
return 1
fi
# Build table header
local header="| Tag | Passed |\\n| --- | --- |\\n"
# Loop through the JSON data to build the table rows
local rows=""
for build in $keys; do
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
if [ "$status" = "true" ]; then
status="✅"
else
status="❌"
fi
local row="| "$build" | "$status" |\\n"
rows="${rows}${row}"
done
local table="${header}${rows}"
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
echo "$escaped_table"
}
if [[ "${CI}" = "true" ]]; then
# Retrieve JSON data from URL
data=$(get_json "$CI_JSON_URL")
# Create table from JSON data
table=$(build_table "$data")
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR for commit ${COMMIT_SHA:0:7} : \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR for commit ${COMMIT_SHA:0:7} : \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
} else {
sh '''#! /bin/bash
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, the build for PR commit ${COMMIT_SHA:0:7} failed and as a result no CI test was attempted and no images were pushed.\\"}"
'''
}
}
}
sh '''#!/bin/bash
rm -rf /config/.ssh/id_sign
rm -rf /config/.ssh/id_sign.pub
git config --global --unset gpg.format
git config --global --unset user.signingkey
git config --global --unset commit.gpgsign
'''
}
cleanup {
sh '''#! /bin/bash
+25 -26
View File
@@ -6,7 +6,7 @@ agetty 2.41-r9 apk
alpine-baselayout 3.7.0-r0 apk
alpine-baselayout-data 3.7.0-r0 apk
alpine-keys 2.5-r0 apk
alpine-release 3.22.3-r0 apk
alpine-release 3.22.4-r0 apk
alsa-lib 1.2.14-r0 apk
amphp/amp v2.6.5 php-composer
amphp/byte-stream v1.8.2 php-composer
@@ -23,7 +23,7 @@ anstyle-query 1.0.2 rust-crate
anyhow 1.0.79 rust-crate
anyhow 1.0.98 rust-crate
aom-libs 3.12.1-r0 apk
apache2-utils 2.4.66-r0 apk
apache2-utils 2.4.67-r0 apk
apk-tools 2.14.9-r3 apk
apr 1.7.5-r0 apk
apr-util 1.6.3-r1 apk
@@ -34,7 +34,7 @@ av-metrics 0.9.1 rust-crate
av1-grain 0.2.3 rust-crate
avahi-libs 0.8-r21 apk
aws/aws-crt-php v1.2.7 php-composer
aws/aws-sdk-php 3.369.9 php-composer
aws/aws-sdk-php 3.376.2 php-composer
bamarni/composer-bin-plugin 1.8.3 php-composer
bantu/ini-get-wrapper v1.0.1 php-composer
bash 5.2.37-r0 apk
@@ -50,8 +50,8 @@ busybox 1.37.0-r20 apk
busybox-binsh 1.37.0-r20 apk
c-ares 1.34.6-r0 apk
c-client 2007f-r15 apk
ca-certificates 20250911-r0 apk
ca-certificates-bundle 20250911-r0 apk
ca-certificates 20260413-r0 apk
ca-certificates-bundle 20260413-r0 apk
cairo 1.18.4-r0 apk
catatonit 0.2.1-r0 apk
cfdisk 2.41-r9 apk
@@ -64,7 +64,7 @@ clap_complete 4.4.6 rust-crate
clap_derive 4.4.7 rust-crate
clap_lex 0.6.0 rust-crate
colorchoice 1.0.0 rust-crate
composer 2.9.5 binary
composer 2.10.0 binary
console 0.15.8 rust-crate
coreutils 9.7-r1 apk
coreutils-env 9.7-r1 apk
@@ -78,7 +78,7 @@ crossbeam-deque 0.8.5 rust-crate
crossbeam-epoch 0.9.18 rust-crate
crossbeam-queue 0.3.11 rust-crate
crossbeam-utils 0.8.19 rust-crate
cups-libs 2.4.16-r0 apk
cups-libs 2.4.18-r0 apk
curl 8.14.1-r2 apk
cweagans/composer-patches 1.7.3 php-composer
dbus-libs 1.16.2-r1 apk
@@ -129,7 +129,7 @@ glslang-libs 1.4.309.0-r0 apk
gmp 6.3.0-r3 apk
gnu-libiconv 1.17-r2 apk
gnu-libiconv-libs 1.17-r2 apk
gnutls 3.8.12-r0 apk
gnutls 3.8.13-r0 apk
graphite2 1.3.14-r6 apk
guzzlehttp/guzzle 7.10.0 php-composer
guzzlehttp/promises 2.3.0 php-composer
@@ -171,7 +171,7 @@ lab 0.11.0 rust-crate
lame-libs 3.100-r5 apk
laravel/serializable-closure v2.0.4 php-composer
lazy_static 1.4.0 rust-crate
lcms2 2.16-r0 apk
lcms2 2.19-r0 apk
lcobucci/clock 3.0.0 php-composer
ldb 4.21.9-r1 apk
libSvtAv1Enc 2.3.0-r0 apk
@@ -189,8 +189,8 @@ libbz2 1.0.8-r6 apk
libc 0.2.155 rust-crate
libc 0.2.172 rust-crate
libcap-ng 0.8.5-r0 apk
libcap2 2.76-r0 apk
libcrypto3 3.5.5-r0 apk
libcap2 2.78-r0 apk
libcrypto3 3.5.6-r0 apk
libcurl 8.14.1-r2 apk
libdav1d 1.5.1-r0 apk
libde265 1.0.15-r1 apk
@@ -225,8 +225,8 @@ libopenmpt 0.7.15-r0 apk
libpanelw 6.5_p20250503-r0 apk
libpciaccess 0.18.1-r0 apk
libplacebo 6.338.2-r3 apk
libpng 1.6.56-r0 apk
libpq 17.9-r0 apk
libpng 1.6.57-r0 apk
libpq 17.10-r0 apk
libproc2 4.0.4-r3 apk
libpsl 0.21.5-r3 apk
libpulse 17.0-r5 apk
@@ -241,7 +241,7 @@ libsndfile 1.2.2-r2 apk
libsodium 1.0.20-r1 apk
libsrt 1.5.3-r1 apk
libssh 0.11.2-r0 apk
libssl3 3.5.5-r0 apk
libssl3 3.5.6-r0 apk
libstdc++ 14.2.0-r6 apk
libtasn1 4.21.0-r0 apk
libtheora 1.1.1-r18 apk
@@ -264,7 +264,7 @@ libxext 1.3.6-r2 apk
libxfixes 6.0.1-r4 apk
libxft 2.3.8-r3 apk
libxml2 2.13.9-r0 apk
libxpm 3.5.17-r0 apk
libxpm 3.5.19-r0 apk
libxrender 0.9.12-r0 apk
libxt 1.3.1-r0 apk
libxxhash 0.8.3-r0 apk
@@ -297,8 +297,8 @@ mlocati/ip-lib 1.22.0 php-composer
mount 2.41-r9 apk
mpg123-libs 1.32.10-r0 apk
mtdowling/jmespath.php 2.8.0 php-composer
musl 1.2.5-r10 apk
musl-utils 1.2.5-r10 apk
musl 1.2.5-r12 apk
musl-utils 1.2.5-r12 apk
nano 8.4-r0 apk
ncurses-terminfo-base 6.5_p20250503-r0 apk
nelexa/buffer 1.3.0 php-composer
@@ -307,8 +307,8 @@ nettle 3.10.2-r0 apk
new_debug_unreachable 1.0.4 rust-crate
nextcloud 1.0.0 npm
nextcloud/lognormalizer v3.0.1 php-composer
nghttp2-libs 1.65.0-r0 apk
nginx 1.28.3-r0 apk
nghttp2-libs 1.69.0-r0 apk
nginx 1.28.3-r2 apk
nom 7.1.3 rust-crate
noop_proc_macro 0.3.0 rust-crate
notifications 6.0.0-dev.0 npm
@@ -326,7 +326,7 @@ openexr-libilmthread 3.3.2-r0 apk
openexr-libopenexr 3.3.2-r0 apk
openexr-libopenexrcore 3.3.2-r0 apk
openjpeg 2.5.3-r0 apk
openssl 3.5.5-r0 apk
openssl 3.5.6-r0 apk
opus 1.5.2-r1 apk
orc 0.4.40-r1 apk
p11-kit 0.25.5-r2 apk
@@ -391,7 +391,7 @@ php84-xml 8.4.16-r0 apk
php84-xmlreader 8.4.16-r0 apk
php84-xmlwriter 8.4.16-r0 apk
php84-zip 8.4.16-r0 apk
phpseclib/phpseclib 2.0.47 php-composer
phpseclib/phpseclib 2.0.53 php-composer
pimple/pimple v3.6.0 php-composer
pixman 0.46.4-r0 apk
pkgconf 2.4.3-r0 apk
@@ -423,7 +423,7 @@ rayon 1.8.0 rust-crate
rayon-core 1.12.0 rust-crate
readline 8.2.13-r1 apk
recommendations 6.0.0-dev.0 npm
rsync 3.4.1-r1 apk
rsync 3.4.3-r0 apk
rubix/ml 2.5.3 php-composer
rubix/tensor 3.0.5 php-composer
rullzer/easytotp v0.1.4 php-composer
@@ -507,8 +507,7 @@ thiserror 1.0.56 rust-crate
thiserror-impl 1.0.56 rust-crate
tiff 4.7.1-r0 apk
tinyvec 1.9.0 rust-crate
twofactor_totp 15.0.0-dev.0 npm
tzdata 2026a-r0 apk
tzdata 2026b-r0 apk
umount 2.41-r9 apk
unicode-ident 1.0.12 rust-crate
unicode-width 0.1.11 rust-crate
@@ -533,9 +532,9 @@ wyz 0.5.1 rust-crate
x264-libs 0.164.3108-r0 apk
x265-libs 3.6-r0 apk
xvidcore 1.3.7-r2 apk
xz-libs 5.8.1-r0 apk
xz-libs 5.8.3-r0 apk
y4m 0.8.0 rust-crate
zimg 3.0.5-r3 apk
zix-libs 0.6.2-r0 apk
zlib 1.3.1-r2 apk
zlib 1.3.2-r0 apk
zstd-libs 1.5.7-r0 apk