Compare commits

...

34 Commits

Author SHA1 Message Date
LinuxServer-CI
0ae7678864 Bot Updating Package Versions 2023-05-22 22:39:52 +00:00
LinuxServer-CI
cb5d2afc49 Bot Updating Templated Files 2023-05-22 22:35:36 +00:00
Adam
2745879e4f Merge pull request #231 from linuxserver/perl-json 2023-05-22 23:33:16 +01:00
TheSpad
cdbd7d4080 Restore perl-json package 2023-05-22 19:21:44 +01:00
LinuxServer-CI
60b1f4555c Bot Updating Package Versions 2023-05-21 19:12:30 +00:00
LinuxServer-CI
93731a94d8 Bot Updating Package Versions 2023-05-20 21:48:36 +00:00
Adam
3eeeba16c1 Merge pull request #229 from linuxserver/perl-datetime 2023-05-20 22:42:20 +01:00
TheSpad
6e208ad59e Add missing perl-datetime-format-strptime 2023-05-20 21:50:13 +01:00
LinuxServer-CI
b03f694d47 Bot Updating Package Versions 2023-05-20 15:36:21 +00:00
LinuxServer-CI
dcc93f08db Bot Updating Package Versions 2023-05-19 17:29:54 +00:00
LinuxServer-CI
139184ed01 Bot Updating Templated Files 2023-05-19 17:23:57 +00:00
Adam
02298ceb0b Merge pull request #227 from linuxserver/xmltv 2023-05-19 18:22:01 +01:00
TheSpad
16a6f605b8 Remove obsolete XMLTV version arg 2023-05-18 18:21:37 +01:00
TheSpad
befef1f62c Don't try and build perl modules we're not going to use 2023-05-18 17:29:46 +01:00
TheSpad
58976c0865 Install XMLTV from Alpine repos 2023-05-18 17:22:57 +01:00
LinuxServer-CI
99c92673db Bot Updating Package Versions 2023-05-18 13:27:11 +00:00
Adam
3942e747ec Merge pull request #226 from linuxserver/3.18 2023-05-18 14:02:56 +01:00
TheSpad
09a5492c00 Rebase to Alpine 3.18 2023-05-18 11:31:19 +01:00
LinuxServer-CI
bf96299763 Bot Updating Package Versions 2023-05-06 15:45:01 +00:00
LinuxServer-CI
2f5ba232b3 Bot Updating Templated Files 2023-04-29 10:36:42 -05:00
LinuxServer-CI
e908baf512 Bot Updating Templated Files 2023-04-29 10:35:08 -05:00
LinuxServer-CI
ba4ea42004 Bot Updating Package Versions 2023-04-22 10:46:53 -05:00
LinuxServer-CI
9eb549257c Bot Updating Package Versions 2023-04-15 17:46:32 +02:00
LinuxServer-CI
9d937649a3 Bot Updating Package Versions 2023-04-08 17:50:10 +02:00
LinuxServer-CI
fb3cf77ee1 Bot Updating Package Versions 2023-04-02 10:13:37 -05:00
LinuxServer-CI
ba4c2d4ddf Bot Updating Templated Files 2023-04-02 10:01:59 -05:00
LinuxServer-CI
872a422b3b Bot Updating Templated Files 2023-04-02 10:00:27 -05:00
LinuxServer-CI
0fc26ae6d2 Bot Updating Templated Files 2023-04-02 09:58:49 -05:00
LinuxServer-CI
86630cc696 Bot Updating Package Versions 2023-03-28 13:31:01 -05:00
aptalca
e6e49062ec Merge pull request #221 from linuxserver/piconbuild
extract picons during build
2023-03-28 14:13:23 -04:00
LinuxServer-CI
d7e8758b7d Bot Updating Package Versions 2023-03-26 10:07:35 -05:00
aptalca
a1c3f4e8a9 fix lsiown command 2023-03-17 14:01:28 -04:00
aptalca
fa7487747d Use lsiown to fix perms 2023-03-17 10:00:17 -04:00
aptalca
cf936490b9 extract picons during build 2023-03-17 09:43:24 -04:00
18 changed files with 549 additions and 741 deletions

View File

@@ -1,12 +0,0 @@
name: Comment on invalid interaction
on:
issues:
types:
- labeled
jobs:
add-comment-on-invalid:
if: github.event.label.name == 'invalid'
permissions:
issues: write
uses: linuxserver/github-workflows/.github/workflows/invalid-interaction-helper.yml@v1
secrets: inherit

16
.github/workflows/call_issue_pr_tracker.yml vendored Executable file
View File

@@ -0,0 +1,16 @@
name: Issue & PR Tracker
on:
issues:
types: [opened,reopened,labeled,unlabeled,closed]
pull_request_target:
types: [opened,reopened,review_requested,review_request_removed,labeled,unlabeled,closed]
pull_request_review:
types: [submitted,edited,dismissed]
jobs:
manage-project:
permissions:
issues: write
uses: linuxserver/github-workflows/.github/workflows/issue-pr-tracker.yml@v1
secrets: inherit

13
.github/workflows/call_issues_cron.yml vendored Executable file
View File

@@ -0,0 +1,13 @@
name: Mark stale issues and pull requests
on:
schedule:
- cron: '27 13 * * *'
workflow_dispatch:
jobs:
stale:
permissions:
issues: write
pull-requests: write
uses: linuxserver/github-workflows/.github/workflows/issues-cron.yml@v1
secrets: inherit

View File

@@ -14,9 +14,11 @@ jobs:
run: | run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER }}" ]; then if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER is set; skipping trigger. ****" echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER\". ****" echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER\". ****"
echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_TVHEADEND_MASTER\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****" echo "**** Retrieving external version ****"
EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/tvheadend/tvheadend/commits/master" | jq -r '. | .sha' | cut -c1-8) EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/tvheadend/tvheadend/commits/master" | jq -r '. | .sha' | cut -c1-8)
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
@@ -30,6 +32,7 @@ jobs:
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****" echo "**** External version: ${EXT_RELEASE} ****"
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****" echo "**** Retrieving last pushed version ****"
image="linuxserver/tvheadend" image="linuxserver/tvheadend"
tag="latest" tag="latest"
@@ -65,14 +68,18 @@ jobs:
exit 1 exit 1
fi fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****" echo "**** Last pushed version: ${IMAGE_VERSION} ****"
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****" echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****" echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
echo "New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
else else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****" echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \ response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/buildWithParameters?PACKAGE_CHECK=false \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
@@ -82,6 +89,7 @@ jobs:
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}" buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****" echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****" echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \ curl -iX POST \
"${buildurl}submitDescription" \ "${buildurl}submitDescription" \

View File

@@ -2,7 +2,7 @@ name: External Trigger Scheduler
on: on:
schedule: schedule:
- cron: '03 * * * *' - cron: '39 * * * *'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -17,18 +17,18 @@ jobs:
run: | run: |
echo "**** Branches found: ****" echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes git for-each-ref --format='%(refname:short)' refs/remotes
echo "**** Pulling the yq docker image ****"
docker pull ghcr.io/linuxserver/yq
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****" echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/jenkins-vars.yml \ ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/jenkins-vars.yml)
| docker run --rm -i --entrypoint yq ghcr.io/linuxserver/yq -r .ls_branch) ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
if [ "$br" == "$ls_branch" ]; then ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
echo "**** Branch ${br} appears to be live; checking workflow. ****" if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****." echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****."
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
curl -iX POST \ curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \ -H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \ -H "Accept: application/vnd.github.v3+json" \
@@ -36,8 +36,10 @@ jobs:
https://api.github.com/repos/linuxserver/docker-tvheadend/actions/workflows/external_trigger.yml/dispatches https://api.github.com/repos/linuxserver/docker-tvheadend/actions/workflows/external_trigger.yml/dispatches
else else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi fi
else else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****" echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi fi
done done

View File

@@ -14,13 +14,16 @@ jobs:
run: | run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER }}" ]; then if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER is set; skipping trigger. ****" echo "**** Github secret PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****" echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****"
echo "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
echo "**** Package trigger running off of master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER\". ****" echo "**** Package trigger running off of master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER\". ****"
echo "Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_TVHEADEND_MASTER\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \ response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/buildWithParameters?PACKAGE_CHECK=true \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
@@ -30,6 +33,7 @@ jobs:
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}" buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****" echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****" echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \ curl -iX POST \
"${buildurl}submitDescription" \ "${buildurl}submitDescription" \

View File

@@ -2,7 +2,7 @@ name: Package Trigger Scheduler
on: on:
schedule: schedule:
- cron: '52 14 * * 0' - cron: '25 15 * * 6'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -17,18 +17,16 @@ jobs:
run: | run: |
echo "**** Branches found: ****" echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes git for-each-ref --format='%(refname:short)' refs/remotes
echo "**** Pulling the yq docker image ****"
docker pull ghcr.io/linuxserver/yq
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****" echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/jenkins-vars.yml \ ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/jenkins-vars.yml | yq -r '.ls_branch')
| docker run --rm -i --entrypoint yq ghcr.io/linuxserver/yq -r .ls_branch)
if [ "${br}" == "${ls_branch}" ]; then if [ "${br}" == "${ls_branch}" ]; then
echo "**** Branch ${br} appears to be live; checking workflow. ****" echo "**** Branch ${br} appears to be live; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-tvheadend/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****" echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****"
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} " triggered_branches="${triggered_branches}${br} "
curl -iX POST \ curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \ -H "Authorization: token ${{ secrets.CR_PAT }}" \
@@ -38,9 +36,11 @@ jobs:
sleep 30 sleep 30
else else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi fi
else else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****" echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi fi
done done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****" echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"

View File

@@ -1,9 +1,10 @@
name: Permission check name: Permission check
on: on:
pull_request: pull_request_target:
paths: paths:
- '**/run' - '**/run'
- '**/finish' - '**/finish'
- '**/check'
jobs: jobs:
permission_check: permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1 uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1

View File

@@ -1,23 +0,0 @@
name: Mark stale issues and pull requests
on:
schedule:
- cron: "30 1 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v6.0.1
with:
stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'
days-before-stale: 30
days-before-close: 365
exempt-issue-labels: 'awaiting-approval,work-in-progress'
exempt-pr-labels: 'awaiting-approval,work-in-progress'
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,19 +1,24 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:3.17 as buildstage ############## picons stage ##############
# built by https://github.com/linuxserver/picons-builder
FROM ghcr.io/linuxserver/picons-builder as piconsstage
FROM ghcr.io/linuxserver/baseimage-alpine:3.18 as buildstage
############## build stage ############## ############## build stage ##############
# package versions # package versions
ARG ARGTABLE_VER="2.13" ARG ARGTABLE_VER="2.13"
ARG XMLTV_VER="v1.0.0"
# environment settings # environment settings
ARG TZ="Etc/UTC" ARG TZ="Etc/UTC"
ARG TVHEADEND_COMMIT ARG TVHEADEND_COMMIT
ENV HOME="/config" ENV HOME="/config"
# copy patches # copy patches and picons
COPY patches/ /tmp/patches/ COPY patches/ /tmp/patches/
COPY --from=piconsstage /picons.tar.bz2 /picons.tar.bz2
RUN \ RUN \
echo "**** install build packages ****" && \ echo "**** install build packages ****" && \
@@ -42,58 +47,6 @@ RUN \
opus-dev \ opus-dev \
patch \ patch \
pcre2-dev \ pcre2-dev \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-dev \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-json-xs \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-lwp-useragent-determined \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
pkgconf \ pkgconf \
pngquant \ pngquant \
python3 \ python3 \
@@ -108,29 +61,6 @@ RUN \
rm -rf /usr/include/iconv.h && \ rm -rf /usr/include/iconv.h && \
cp /usr/include/gnu-libiconv/iconv.h /usr/include/iconv.h cp /usr/include/gnu-libiconv/iconv.h /usr/include/iconv.h
RUN \
echo "**** install perl modules for xmltv ****" && \
curl -s -L https://cpanmin.us | perl - App::cpanminus && \
cpanm --installdeps /tmp/patches
RUN \
echo "**** compile XMLTV ****" && \
git clone https://github.com/XMLTV/xmltv.git /tmp/xmltv && \
cd /tmp/xmltv && \
git checkout ${XMLTV_VER} && \
echo "**** Perl 5.26 fixes for XMTLV ****" && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_latex && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_text && \
sed "s/\(lib\/set_share_dir.pl';\)/.\/\1/" -i grab/it/tv_grab_it.PL && \
sed "s/\(filter\/Grep.pm';\)/.\/\1/" -i filter/tv_grep.PL && \
sed "s/\(lib\/XMLTV.pm.in';\)/.\/\1/" -i lib/XMLTV.pm.PL && \
sed "s/\(lib\/Ask\/Term.pm';\)/.\/\1/" -i Makefile.PL && \
PERL5LIB=`pwd` && \
echo -e "yes" | perl Makefile.PL PREFIX=/usr/ INSTALLDIRS=vendor && \
make -j 2 && \
make test && \
make DESTDIR=/tmp/xmltv-build install
RUN \ RUN \
echo "**** compile tvheadend ****" && \ echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \ if [ -z ${TVHEADEND_COMMIT+x} ]; then \
@@ -211,13 +141,15 @@ RUN \
make -j 2 && \ make -j 2 && \
make DESTDIR=/tmp/comskip-build install make DESTDIR=/tmp/comskip-build install
############## picons stage ############## RUN \
# built by https://github.com/linuxserver/picons-builder echo "***** extract picons ****" && \
FROM ghcr.io/linuxserver/picons-builder as piconsstage mkdir -p /picons && \
tar xf \
/picons.tar.bz2 -C \
/picons
############## runtime stage ############## ############## runtime stage ##############
FROM ghcr.io/linuxserver/baseimage-alpine:3.17 FROM ghcr.io/linuxserver/baseimage-alpine:3.18
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -233,7 +165,14 @@ RUN \
apk add --no-cache \ apk add --no-cache \
bsd-compat-headers \ bsd-compat-headers \
ffmpeg \ ffmpeg \
ffmpeg4-libs \ ffmpeg4-libavcodec \
ffmpeg4-libavdevice \
ffmpeg4-libavfilter \
ffmpeg4-libavformat \
ffmpeg4-libavutil \
ffmpeg4-libpostproc \
ffmpeg4-libswresample \
ffmpeg4-libswscale \
gnu-libiconv \ gnu-libiconv \
libdvbcsa \ libdvbcsa \
libhdhomerun-libs \ libhdhomerun-libs \
@@ -248,72 +187,21 @@ RUN \
opus \ opus \
pcre2 \ pcre2 \
perl \ perl \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \ perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \ perl-json \
perl-json-xs \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-lwp-useragent-determined \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
py3-requests \ py3-requests \
python3 \ python3 \
uriparser \ uriparser \
x264 \ x264 \
x265 \ x265 \
xmltv \
zlib zlib
# copy local files and buildstage artifacts # copy local files and buildstage artifacts
COPY --from=buildstage /tmp/argtable-build/usr/ /usr/ COPY --from=buildstage /tmp/argtable-build/usr/ /usr/
COPY --from=buildstage /tmp/comskip-build/usr/ /usr/ COPY --from=buildstage /tmp/comskip-build/usr/ /usr/
COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/ COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/
COPY --from=buildstage /tmp/xmltv-build/usr/ /usr/ COPY --from=buildstage /picons /picons
COPY --from=buildstage /usr/local/share/man/ /usr/local/share/man/
COPY --from=buildstage /usr/local/share/perl5/ /usr/local/share/perl5/
COPY --from=piconsstage /picons.tar.bz2 /picons.tar.bz2
COPY root/ / COPY root/ /
# ports and volumes # ports and volumes

View File

@@ -1,19 +1,24 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.17 as buildstage ############## picons stage ##############
# built by https://github.com/linuxserver/picons-builder
FROM ghcr.io/linuxserver/picons-builder as piconsstage
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.18 as buildstage
############## build stage ############## ############## build stage ##############
# package versions # package versions
ARG ARGTABLE_VER="2.13" ARG ARGTABLE_VER="2.13"
ARG XMLTV_VER="v1.0.0"
# environment settings # environment settings
ARG TZ="Etc/UTC" ARG TZ="Etc/UTC"
ARG TVHEADEND_COMMIT ARG TVHEADEND_COMMIT
ENV HOME="/config" ENV HOME="/config"
# copy patches # copy patches and picons
COPY patches/ /tmp/patches/ COPY patches/ /tmp/patches/
COPY --from=piconsstage /picons.tar.bz2 /picons.tar.bz2
RUN \ RUN \
echo "**** install build packages ****" && \ echo "**** install build packages ****" && \
@@ -42,58 +47,6 @@ RUN \
opus-dev \ opus-dev \
patch \ patch \
pcre2-dev \ pcre2-dev \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-dev \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-json-xs \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-lwp-useragent-determined \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
pkgconf \ pkgconf \
pngquant \ pngquant \
python3 \ python3 \
@@ -108,29 +61,6 @@ RUN \
rm -rf /usr/include/iconv.h && \ rm -rf /usr/include/iconv.h && \
cp /usr/include/gnu-libiconv/iconv.h /usr/include/iconv.h cp /usr/include/gnu-libiconv/iconv.h /usr/include/iconv.h
RUN \
echo "**** install perl modules for xmltv ****" && \
curl -s -L https://cpanmin.us | perl - App::cpanminus && \
cpanm --installdeps /tmp/patches
RUN \
echo "**** compile XMLTV ****" && \
git clone https://github.com/XMLTV/xmltv.git /tmp/xmltv && \
cd /tmp/xmltv && \
git checkout ${XMLTV_VER} && \
echo "**** Perl 5.26 fixes for XMTLV ****" && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_latex && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_text && \
sed "s/\(lib\/set_share_dir.pl';\)/.\/\1/" -i grab/it/tv_grab_it.PL && \
sed "s/\(filter\/Grep.pm';\)/.\/\1/" -i filter/tv_grep.PL && \
sed "s/\(lib\/XMLTV.pm.in';\)/.\/\1/" -i lib/XMLTV.pm.PL && \
sed "s/\(lib\/Ask\/Term.pm';\)/.\/\1/" -i Makefile.PL && \
PERL5LIB=`pwd` && \
echo -e "yes" | perl Makefile.PL PREFIX=/usr/ INSTALLDIRS=vendor && \
make -j 2 && \
make test && \
make DESTDIR=/tmp/xmltv-build install
RUN \ RUN \
echo "**** compile tvheadend ****" && \ echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \ if [ -z ${TVHEADEND_COMMIT+x} ]; then \
@@ -211,13 +141,16 @@ RUN \
make -j 2 && \ make -j 2 && \
make DESTDIR=/tmp/comskip-build install make DESTDIR=/tmp/comskip-build install
############## picons stage ############## RUN \
# built by https://github.com/linuxserver/picons-builder echo "***** extract picons ****" && \
FROM ghcr.io/linuxserver/picons-builder as piconsstage mkdir -p /picons && \
tar xf \
/picons.tar.bz2 -C \
/picons
############## runtime stage ############## ############## runtime stage ##############
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.17 FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.18
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -233,7 +166,14 @@ RUN \
apk add --no-cache \ apk add --no-cache \
bsd-compat-headers \ bsd-compat-headers \
ffmpeg \ ffmpeg \
ffmpeg4-libs \ ffmpeg4-libavcodec \
ffmpeg4-libavdevice \
ffmpeg4-libavfilter \
ffmpeg4-libavformat \
ffmpeg4-libavutil \
ffmpeg4-libpostproc \
ffmpeg4-libswresample \
ffmpeg4-libswscale \
gnu-libiconv \ gnu-libiconv \
libdvbcsa \ libdvbcsa \
libhdhomerun-libs \ libhdhomerun-libs \
@@ -246,72 +186,21 @@ RUN \
opus \ opus \
pcre2 \ pcre2 \
perl \ perl \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \ perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \ perl-json \
perl-json-xs \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-lwp-useragent-determined \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
py3-requests \ py3-requests \
python3 \ python3 \
uriparser \ uriparser \
x264 \ x264 \
x265 \ x265 \
xmltv \
zlib zlib
# copy local files and buildstage artifacts # copy local files and buildstage artifacts
COPY --from=buildstage /tmp/argtable-build/usr/ /usr/ COPY --from=buildstage /tmp/argtable-build/usr/ /usr/
COPY --from=buildstage /tmp/comskip-build/usr/ /usr/ COPY --from=buildstage /tmp/comskip-build/usr/ /usr/
COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/ COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/
COPY --from=buildstage /tmp/xmltv-build/usr/ /usr/ COPY --from=buildstage /picons /picons
COPY --from=buildstage /usr/local/share/man/ /usr/local/share/man/
COPY --from=buildstage /usr/local/share/perl5/ /usr/local/share/perl5/
COPY --from=piconsstage /picons.tar.bz2 /picons.tar.bz2
COPY root/ / COPY root/ /
# ports and volumes # ports and volumes

211
Jenkinsfile vendored
View File

@@ -42,10 +42,16 @@ pipeline {
// Setup all the basic environment variables needed for the build // Setup all the basic environment variables needed for the build
stage("Set ENV Variables base"){ stage("Set ENV Variables base"){
steps{ steps{
sh '''#! /bin/bash
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
script{ script{
env.EXIT_STATUS = '' env.EXIT_STATUS = ''
env.LS_RELEASE = sh( env.LS_RELEASE = sh(
script: '''docker run --rm ghcr.io/linuxserver/alexeiled-skopeo sh -c 'skopeo inspect docker://docker.io/'${DOCKERHUB_IMAGE}':latest 2>/dev/null' | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''', 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() returnStdout: true).trim()
env.LS_RELEASE_NOTES = sh( env.LS_RELEASE_NOTES = sh(
script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''', script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''',
@@ -59,7 +65,7 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/stale.yml ./.github/workflows/call_invalid_helper.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml' env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
} }
script{ script{
env.LS_RELEASE_NUMBER = sh( env.LS_RELEASE_NUMBER = sh(
@@ -213,12 +219,12 @@ pipeline {
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
} else { } else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
} }
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
@@ -238,19 +244,16 @@ pipeline {
script{ script{
env.SHELLCHECK_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/shellcheck-result.xml' env.SHELLCHECK_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/shellcheck-result.xml'
} }
sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-shellcheck/master/checkrun.sh | /bin/bash''' sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-jenkins-builder/master/checkrun.sh | /bin/bash'''
sh '''#! /bin/bash sh '''#! /bin/bash
set -e
docker pull ghcr.io/linuxserver/lsiodev-spaces-file-upload:latest
docker run --rm \ docker run --rm \
-e DESTINATION=\"${IMAGE}/${META_TAG}/shellcheck-result.xml\" \ -v ${WORKSPACE}:/mnt \
-e FILE_NAME="shellcheck-result.xml" \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e MIMETYPE="text/xml" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
-v ${WORKSPACE}:/mnt \ ghcr.io/linuxserver/baseimage-alpine:3.17 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
-e SECRET_KEY=\"${S3_SECRET}\" \ apk add --no-cache py3-pip && \
-e ACCESS_KEY=\"${S3_KEY}\" \ pip install s3cmd && \
-t ghcr.io/linuxserver/lsiodev-spaces-file-upload:latest \ s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :'''
python /upload.py'''
} }
} }
} }
@@ -287,7 +290,7 @@ pipeline {
echo "Jenkinsfile is up to date." echo "Jenkinsfile is up to date."
fi fi
# Stage 2 - Delete old templates # Stage 2 - Delete old templates
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md\n.github/ISSUE_TEMPLATE/issue.bug.md\n.github/ISSUE_TEMPLATE/issue.feature.md" OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml"
for i in ${OLD_TEMPLATES}; do for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}" TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
@@ -304,7 +307,7 @@ pipeline {
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Deleting old templates" echo "Deleting old and deprecated templates"
rm -Rf ${TEMPDIR} rm -Rf ${TEMPDIR}
exit 0 exit 0
else else
@@ -349,6 +352,8 @@ pipeline {
git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates
if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-icon.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
fi fi
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then
cd ${TEMPDIR}/unraid/templates/ cd ${TEMPDIR}/unraid/templates/
@@ -389,6 +394,26 @@ pipeline {
} }
} }
} }
// If this is a master build check the S6 service file perms
stage("Check S6 Service file Permissions"){
when {
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
sh '''#! /bin/bash
WRONG_PERM=$(find ./ -path "./.git" -prune -o \\( -name "run" -o -name "finish" -o -name "check" \\) -not -perm -u=x,g=x,o=x -print)
if [[ -n "${WRONG_PERM}" ]]; then
echo "The following S6 service files are missing the executable bit; canceling the faulty build: ${WRONG_PERM}"
exit 1
else
echo "S6 service file perms look good."
fi '''
}
}
}
/* ####################### /* #######################
GitLab Mirroring GitLab Mirroring
####################### */ ####################### */
@@ -420,8 +445,7 @@ pipeline {
} }
steps{ steps{
sh '''#! /bin/bash sh '''#! /bin/bash
set -e PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/organizations/linuxserver-ci/packages | jq -r '.[] | select(.name=="linuxserver/tvheadend") | .uuid' || :)
PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/organizations/linuxserver-ci/packages | jq -r '.[] | select(.name=="linuxserver/tvheadend") | .uuid')
if [ -z "${PACKAGE_UUID}" ]; then if [ -z "${PACKAGE_UUID}" ]; then
echo "Adding package to Scarf.sh" echo "Adding package to Scarf.sh"
curl -sX POST https://scarf.sh/api/v1/organizations/linuxserver-ci/packages \ curl -sX POST https://scarf.sh/api/v1/organizations/linuxserver-ci/packages \
@@ -531,9 +555,12 @@ pipeline {
retry(5) { retry(5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
} }
sh '''docker rmi \ sh '''#! /bin/bash
${IMAGE}:arm64v8-${META_TAG} \ containers=$(docker ps -aq)
ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :''' if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
} }
} }
} }
@@ -594,13 +621,6 @@ pipeline {
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
sh '''#! /bin/bash
echo "Packages were updated. Cleaning up the image and exiting."
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
docker rmi ${IMAGE}:amd64-${META_TAG}
else
docker rmi ${IMAGE}:${META_TAG}
fi'''
script{ script{
env.EXIT_STATUS = 'ABORTED' env.EXIT_STATUS = 'ABORTED'
} }
@@ -618,13 +638,6 @@ pipeline {
} }
} }
steps { steps {
sh '''#! /bin/bash
echo "There are no package updates. Cleaning up the image and exiting."
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
docker rmi ${IMAGE}:amd64-${META_TAG}
else
docker rmi ${IMAGE}:${META_TAG}
fi'''
script{ script{
env.EXIT_STATUS = 'ABORTED' env.EXIT_STATUS = 'ABORTED'
} }
@@ -646,6 +659,7 @@ pipeline {
]) { ]) {
script{ script{
env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html' 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'
} }
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
@@ -670,8 +684,6 @@ pipeline {
-e WEB_SCREENSHOT=\"${CI_WEB}\" \ -e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \ -e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \
-e DO_REGION="ams3" \
-e DO_BUCKET="lsio-ci" \
-t ghcr.io/linuxserver/ci:latest \ -t ghcr.io/linuxserver/ci:latest \
python3 test_build.py''' python3 test_build.py'''
} }
@@ -724,17 +736,6 @@ pipeline {
done done
''' '''
} }
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:${META_TAG} \
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
${DELETEIMAGE}:latest || :
if [ -n "${SEMVER}" ]; then
docker rmi ${DELETEIMAGE}:${SEMVER} || :
fi
done
'''
} }
} }
} }
@@ -805,6 +806,16 @@ pipeline {
docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8 docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
fi fi
token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Alinuxserver%2F${CONTAINER_NAME}%3Apull" | jq -r '.token')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/linuxserver/${CONTAINER_NAME}/manifests/arm32v7-latest")
if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest || :
docker manifest create ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:amd64-latest
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest
fi
docker manifest push --purge ${MANIFESTIMAGE}:latest docker manifest push --purge ${MANIFESTIMAGE}:latest
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
@@ -814,24 +825,6 @@ pipeline {
done done
''' '''
} }
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:amd64-${META_TAG} \
${DELETEIMAGE}:amd64-latest \
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
${DELETEIMAGE}:arm64v8-${META_TAG} \
${DELETEIMAGE}:arm64v8-latest \
${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
if [ -n "${SEMVER}" ]; then
docker rmi \
${DELETEIMAGE}:amd64-${SEMVER} \
${DELETEIMAGE}:arm64v8-${SEMVER} || :
fi
done
docker rmi \
ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :
'''
} }
} }
} }
@@ -902,12 +895,78 @@ pipeline {
stage('Pull Request Comment') { stage('Pull Request Comment') {
when { when {
not {environment name: 'CHANGE_ID', value: ''} not {environment name: 'CHANGE_ID', value: ''}
environment name: 'CI', value: 'true'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/issues/${PULL_REQUEST}/comments \ sh '''#! /bin/bash
-d '{"body": "I am a bot, here are the test results for this PR: \\n'${CI_URL}' \\n'${SHELLCHECK_URL}'"}' ''' # 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
'''
} }
} }
} }
@@ -933,6 +992,14 @@ pipeline {
} }
} }
cleanup { cleanup {
sh '''#! /bin/bash
echo "Performing docker system prune!!"
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || :
'''
cleanWs() cleanWs()
} }
} }

View File

@@ -301,6 +301,9 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **18.05.23:** - Install XMLTV from Alpine repos.
* **18.05.23:** - Rebase to Alpine 3.18.
* **17.03.23:** - Extract picons during build instead of init.
* **23.02.23:** - Rebase to Alpine 3.17, migrate to s6v3, drop armhf support. * **23.02.23:** - Rebase to Alpine 3.17, migrate to s6v3, drop armhf support.
* **31.08.22:** - Update sample env vars and how RUN_OPTS are handled. * **31.08.22:** - Update sample env vars and how RUN_OPTS are handled.
* **19.08.22:** - Switch to new picons builder. * **19.08.22:** - Switch to new picons builder.

View File

@@ -1,273 +1,276 @@
NAME VERSION TYPE NAME VERSION TYPE
alpine-baselayout 3.4.0-r0 apk alpine-baselayout 3.4.3-r1 apk
alpine-baselayout-data 3.4.0-r0 apk alpine-baselayout-data 3.4.3-r1 apk
alpine-keys 2.4-r1 apk alpine-keys 2.4-r1 apk
alpine-release 3.17.2-r0 apk alpine-release 3.18.0-r0 apk
alsa-lib 1.2.8-r0 apk alsa-lib 1.2.9-r0 apk
aom-libs 3.5.0-r0 apk aom-libs 3.6.1-r0 apk
apk-tools 2.12.10-r1 apk apk-tools 2.14.0-r2 apk
bash 5.2.15-r0 apk bash 5.2.15-r3 apk
brotli-libs 1.0.9-r9 apk brotli-libs 1.0.9-r14 apk
bsd-compat-headers 0.7.2-r3 apk bsd-compat-headers 0.7.2-r5 apk
busybox 1.35.0 binary busybox 1.36.0 binary
busybox 1.35.0-r29 apk busybox 1.36.0-r9 apk
busybox-binsh 1.35.0-r29 apk busybox-binsh 1.36.0-r9 apk
ca-certificates 20220614-r4 apk ca-certificates 20230506-r0 apk
ca-certificates-bundle 20220614-r4 apk ca-certificates-bundle 20230506-r0 apk
certifi 2022.12.7 python certifi 2023.5.7 python
charset-normalizer 3.0.1 python charset-normalizer 3.1.0 python
cjson 1.7.15-r3 apk cjson 1.7.15-r4 apk
coreutils 9.1-r0 apk coreutils 9.3-r1 apk
curl 7.88.1-r0 apk curl 8.1.0-r1 apk
dbus-libs 1.14.4-r0 apk dbus-libs 1.14.6-r3 apk
ffmpeg 5.1.2-r1 apk ffmpeg 6.0-r14 apk
ffmpeg-libs 5.1.2-r1 apk ffmpeg-libavcodec 6.0-r14 apk
ffmpeg4-libs 4.4.3-r0 apk ffmpeg-libavdevice 6.0-r14 apk
flac-libs 1.4.2-r0 apk ffmpeg-libavfilter 6.0-r14 apk
fontconfig 2.14.1-r0 apk ffmpeg-libavformat 6.0-r14 apk
freetype 2.12.1-r0 apk ffmpeg-libavutil 6.0-r14 apk
fribidi 1.0.12-r0 apk ffmpeg-libpostproc 6.0-r14 apk
gdbm 1.23-r0 apk ffmpeg-libswresample 6.0-r14 apk
glib 2.74.6-r0 apk ffmpeg-libswscale 6.0-r14 apk
gmp 6.2.1-r2 apk ffmpeg4 4.4.4-r1 apk
gnu-libiconv 1.17-r0 apk ffmpeg4-libavcodec 4.4.4-r1 apk
gnu-libiconv-libs 1.17-r0 apk ffmpeg4-libavdevice 4.4.4-r1 apk
gnutls 3.7.8-r3 apk ffmpeg4-libavfilter 4.4.4-r1 apk
graphite2 1.3.14-r2 apk ffmpeg4-libavformat 4.4.4-r1 apk
harfbuzz 5.3.1-r1 apk ffmpeg4-libavutil 4.4.4-r1 apk
hwdata-pci 0.364-r0 apk ffmpeg4-libpostproc 4.4.4-r1 apk
idna 3.4 python ffmpeg4-libswresample 4.4.4-r1 apk
intel-gmmlib 22.3.1-r0 apk ffmpeg4-libswscale 4.4.4-r1 apk
intel-media-driver 22.6.3-r0 apk flac-libs 1.4.2-r2 apk
jq 1.6-r2 apk fontconfig 2.14.2-r3 apk
lame 3.100-r2 apk freetype 2.13.0-r5 apk
libacl 2.3.1-r1 apk fribidi 1.0.13-r0 apk
libass 0.16.0-r1 apk gdbm 1.23-r1 apk
libasyncns 0.8-r1 apk glib 2.76.2-r0 apk
libattr 2.5.1-r2 apk glslang-libs 1.3.243.0-r1 apk
libblkid 2.38.1-r1 apk gmp 6.2.1-r3 apk
libbsd 0.11.7-r0 apk gnu-libiconv 1.17-r1 apk
libbz2 1.0.8-r4 apk gnu-libiconv-libs 1.17-r1 apk
libc-utils 0.7.2-r3 apk gnutls 3.8.0-r2 apk
libcrypto3 3.0.8-r0 apk graphite2 1.3.14-r5 apk
libcurl 7.88.1-r0 apk harfbuzz 7.3.0-r0 apk
libdav1d 1.0.0-r2 apk hwdata-pci 0.370-r0 apk
libdrm 2.4.114-r0 apk idna 3.4 python
libdvbcsa 1.1.0-r1 apk intel-gmmlib 22.3.5-r0 apk
libexpat 2.5.0-r0 apk intel-media-driver 23.2.2-r0 apk
libffi 3.4.4-r0 apk jq 1.6-r3 apk
libgcc 12.2.1_git20220924-r4 apk lame-libs 3.100-r5 apk
libgcrypt 1.10.1-r0 apk lcms2 2.15-r2 apk
libgomp 12.2.1_git20220924-r4 apk libacl 2.3.1-r3 apk
libgpg-error 1.46-r1 apk libass 0.17.1-r0 apk
libhdhomerun-libs 20200225-r1 apk libasyncns 0.8-r1 apk
libintl 0.21.1-r1 apk libattr 2.5.1-r4 apk
libjpeg-turbo 2.1.4-r0 apk libblkid 2.38.1-r7 apk
libltdl 2.4.7-r1 apk libbluray 1.3.4-r0 apk
libmd 1.0.4-r0 apk libbsd 0.11.7-r1 apk
libmount 2.38.1-r1 apk libbz2 1.0.8-r5 apk
libogg 1.3.5-r2 apk libc-utils 0.7.2-r5 apk
libpciaccess 0.17-r0 apk libcrypto3 3.1.0-r4 apk
libpng 1.6.38-r0 apk libcurl 8.1.0-r1 apk
libproc 3.3.17-r2 apk libdav1d 1.2.0-r0 apk
libpulse 16.1-r6 apk libdrm 2.4.115-r4 apk
librist 0.2.7-r0 apk libdvbcsa 1.1.0-r1 apk
libsndfile 1.1.0-r2 apk libexpat 2.5.0-r1 apk
libsodium 1.0.18-r2 apk libffi 3.4.4-r2 apk
libsrt 1.5.1-r0 apk libgcc 12.2.1_git20220924-r10 apk
libssh 0.10.4-r0 apk libgcrypt 1.10.2-r1 apk
libssl3 3.0.8-r0 apk libgomp 12.2.1_git20220924-r10 apk
libstdc++ 12.2.1_git20220924-r4 apk libgpg-error 1.47-r1 apk
libtasn1 4.19.0-r0 apk libhdhomerun-libs 20200225-r1 apk
libtheora 1.1.1-r16 apk libhwy 1.0.4-r1 apk
libunistring 1.1-r0 apk libidn2 2.3.4-r1 apk
liburiparser 0.9.7-r0 apk libintl 0.21.1-r7 apk
libva 2.16.0-r0 apk libjpeg-turbo 2.1.5.1-r2 apk
libva-intel-driver 2.4.1-r0 apk libjxl 0.8.1-r5 apk
libvdpau 1.5-r0 apk libltdl 2.4.7-r2 apk
libvorbis 1.3.7-r0 apk libmd 1.0.4-r2 apk
libvpx 1.12.0-r1 apk libmount 2.38.1-r7 apk
libwebp 1.2.4-r1 apk libncursesw 6.4_p20230506-r0 apk
libx11 1.8.4-r0 apk libogg 1.3.5-r4 apk
libxau 1.0.10-r0 apk libopenmpt 0.7.1-r0 apk
libxcb 1.15-r0 apk libpanelw 6.4_p20230506-r0 apk
libxdmcp 1.1.4-r0 apk libpciaccess 0.17-r2 apk
libxext 1.3.5-r0 apk libplacebo 5.264.1-r1 apk
libxfixes 6.0.0-r0 apk libpng 1.6.39-r3 apk
libxml2 2.10.3-r1 apk libproc2 4.0.3-r1 apk
libxslt 1.1.37-r0 apk libpulse 16.1-r10 apk
libzmq 4.3.4-r1 apk librist 0.2.7-r0 apk
linux-headers 5.19.5-r0 apk libsndfile 1.2.0-r2 apk
linux-pam 1.5.2-r1 apk libsodium 1.0.18-r3 apk
mbedtls 2.28.2-r0 apk libsrt 1.5.1-r0 apk
mesa 22.2.5-r1 apk libssh 0.10.5-r0 apk
mpdecimal 2.5.1-r1 apk libssl3 3.1.0-r4 apk
musl 1.2.3-r4 apk libstdc++ 12.2.1_git20220924-r10 apk
musl-utils 1.2.3-r4 apk libtasn1 4.19.0-r1 apk
ncurses-libs 6.3_p20221119-r0 apk libtheora 1.1.1-r17 apk
ncurses-terminfo-base 6.3_p20221119-r0 apk libunibreak 5.1-r0 apk
netcat-openbsd 1.130-r4 apk libunistring 1.1-r1 apk
nettle 3.8.1-r0 apk liburiparser 0.9.7-r0 apk
nghttp2-libs 1.51.0-r0 apk libva 2.18.0-r1 apk
numactl 2.0.16-r1 apk libva-intel-driver 2.4.1-r0 apk
oniguruma 6.9.8-r0 apk libvdpau 1.5-r1 apk
opus 1.3.1-r1 apk libvorbis 1.3.7-r1 apk
orc 0.4.33-r0 apk libvpx 1.13.0-r1 apk
p11-kit 0.24.1-r1 apk libwebp 1.3.0-r1 apk
pcre2 10.42-r0 apk libx11 1.8.4-r3 apk
perl 5.36.0-r0 apk libxau 1.0.11-r2 apk
perl-archive-zip 1.68-r2 apk libxcb 1.15-r1 apk
perl-b-hooks-endofscope 0.26-r0 apk libxdmcp 1.1.4-r2 apk
perl-boolean 0.46-r2 apk libxext 1.3.5-r2 apk
perl-capture-tiny 0.48-r2 apk libxfixes 6.0.1-r2 apk
perl-cgi 4.54-r0 apk libxml2 2.11.4-r0 apk
perl-class-data-inheritable 0.09-r0 apk libxslt 1.1.38-r0 apk
perl-class-inspector 1.36-r2 apk libzmq 4.3.4-r4 apk
perl-class-methodmaker 2.24-r9 apk linux-headers 6.3-r0 apk
perl-class-singleton 1.6-r0 apk linux-pam 1.5.2-r10 apk
perl-clone 0.46-r0 apk mbedtls 2.28.3-r1 apk
perl-common-sense 3.75-r2 apk mesa 23.0.3-r3 apk
perl-compress-raw-zlib 2.202-r0 apk mpdecimal 2.5.1-r2 apk
perl-cpan-meta-check 0.014-r2 apk mpg123-libs 1.31.3-r1 apk
perl-date-manip 6.89-r0 apk musl 1.2.4-r0 apk
perl-datetime 1.59-r0 apk musl-utils 1.2.4-r0 apk
perl-datetime-format-strptime 1.79-r0 apk ncurses-terminfo-base 6.4_p20230506-r0 apk
perl-datetime-locale 1.37-r0 apk netcat-openbsd 1.219-r1 apk
perl-datetime-timezone 2.56-r0 apk nettle 3.8.1-r2 apk
perl-dbd-sqlite 1.72-r0 apk nghttp2-libs 1.53.0-r0 apk
perl-dbi 1.643-r4 apk numactl 2.0.16-r4 apk
perl-devel-stacktrace 2.04-r3 apk onevpl-libs 2023.2.1-r0 apk
perl-devel-symdump 2.18-r2 apk oniguruma 6.9.8-r1 apk
perl-digest-sha1 2.13-r15 apk opus 1.4-r0 apk
perl-dist-checkconflicts 0.11-r2 apk orc 0.4.33-r1 apk
perl-doc 5.36.0-r0 apk p11-kit 0.24.1-r2 apk
perl-encode-locale 1.05-r3 apk pcre2 10.42-r1 apk
perl-eval-closure 0.14-r2 apk perl 5.36.1-r1 apk
perl-exception-class 1.45-r0 apk perl-b-hooks-endofscope 0.26-r1 apk
perl-exporter-tiny 1.006000-r0 apk perl-capture-tiny 0.48-r3 apk
perl-file-listing 6.15-r0 apk perl-class-data-inheritable 0.09-r0 apk
perl-file-sharedir 1.118-r0 apk perl-class-inspector 1.36-r2 apk
perl-file-sharedir-install 0.14-r0 apk perl-class-methodmaker 2.24-r9 apk
perl-file-slurp 9999.32-r1 apk perl-class-singleton 1.6-r0 apk
perl-file-temp 0.2311-r0 apk perl-clone 0.46-r1 apk
perl-file-which 1.27-r0 apk perl-compress-raw-zlib 2.204-r1 apk
perl-getopt-long 2.54-r0 apk perl-date-manip 6.91-r0 apk
perl-html-parser 3.80-r0 apk perl-datetime 1.59-r1 apk
perl-html-tagset 3.20-r3 apk perl-datetime-format-strptime 1.79-r0 apk
perl-html-tree 5.07-r3 apk perl-datetime-locale 1.38-r1 apk
perl-http-cookies 6.10-r0 apk perl-datetime-timezone 2.60-r0 apk
perl-http-daemon 6.14-r0 apk perl-devel-stacktrace 2.04-r4 apk
perl-http-date 6.05-r1 apk perl-digest-sha1 2.13-r16 apk
perl-http-message 6.44-r0 apk perl-dist-checkconflicts 0.11-r3 apk
perl-http-negotiate 6.01-r3 apk perl-encode-locale 1.05-r4 apk
perl-importer 0.026-r1 apk perl-eval-closure 0.14-r3 apk
perl-io 1.50-r0 apk perl-exception-class 1.45-r0 apk
perl-io-html 1.004-r0 apk perl-file-listing 6.15-r0 apk
perl-io-socket-ssl 2.077-r0 apk perl-file-sharedir 1.118-r0 apk
perl-io-stringy 2.113-r1 apk perl-file-slurp 9999.32-r2 apk
perl-ipc-run3 0.048-r2 apk perl-html-parser 3.81-r1 apk
perl-json 4.10-r0 apk perl-html-tagset 3.20-r4 apk
perl-json-xs 4.03-r2 apk perl-http-cookies 6.10-r0 apk
perl-libwww 6.67-r0 apk perl-http-date 6.05-r1 apk
perl-lingua-en-numbers-ordinate 1.05-r0 apk perl-http-message 6.44-r0 apk
perl-lingua-preferred 0.2.4-r4 apk perl-http-negotiate 6.01-r3 apk
perl-list-moreutils 0.430-r0 apk perl-importer 0.026-r1 apk
perl-list-moreutils-xs 0.430-r2 apk perl-io-gzip 0.20-r8 apk
perl-lwp-mediatypes 6.04-r1 apk perl-io-html 1.004-r0 apk
perl-lwp-useragent-determined 1.07-r2 apk perl-io-socket-ssl 2.081-r0 apk
perl-module-build 0.4231-r2 apk perl-ipc-run3 0.048-r3 apk
perl-module-implementation 0.09-r3 apk perl-json 4.10-r0 apk
perl-module-metadata 1.000037-r1 apk perl-libwww 6.68-r1 apk
perl-module-pluggable 5.2-r2 apk perl-lingua-en-numbers-ordinate 1.05-r0 apk
perl-module-runtime 0.016-r4 apk perl-lingua-preferred 0.2.4-r4 apk
perl-mozilla-ca 20221114-r0 apk perl-lwp-mediatypes 6.04-r2 apk
perl-mro-compat 0.15-r0 apk perl-lwp-protocol-https 6.10-r4 apk
perl-namespace-autoclean 0.29-r2 apk perl-module-implementation 0.09-r4 apk
perl-namespace-clean 0.27-r2 apk perl-module-pluggable 5.2-r3 apk
perl-net-http 6.22-r0 apk perl-module-runtime 0.016-r5 apk
perl-net-ssleay 1.92-r2 apk perl-mozilla-ca 20221114-r1 apk
perl-package-deprecationmanager 0.17-r2 apk perl-mro-compat 0.15-r1 apk
perl-package-stash 0.40-r0 apk perl-namespace-autoclean 0.29-r2 apk
perl-params-util 1.102-r2 apk perl-namespace-clean 0.27-r3 apk
perl-params-validate 1.31-r0 apk perl-net-http 6.22-r0 apk
perl-params-validationcompiler 0.30-r1 apk perl-net-ssleay 1.92-r4 apk
perl-parse-recdescent 1.967015-r3 apk perl-package-deprecationmanager 0.18-r0 apk
perl-path-class 0.37-r2 apk perl-package-stash 0.40-r0 apk
perl-pod-coverage 0.23-r3 apk perl-params-util 1.102-r3 apk
perl-pod-parser 1.65-r0 apk perl-params-validate 1.31-r1 apk
perl-role-tiny 2.002004-r1 apk perl-params-validationcompiler 0.31-r0 apk
perl-scalar-list-utils 1.63-r0 apk perl-role-tiny 2.002004-r1 apk
perl-scope-guard 0.21-r2 apk perl-scope-guard 0.21-r3 apk
perl-specio 0.48-r0 apk perl-specio 0.48-r0 apk
perl-sub-exporter-progressive 0.001013-r2 apk perl-sub-exporter-progressive 0.001013-r3 apk
perl-sub-identify 0.14-r7 apk perl-sub-identify 0.14-r9 apk
perl-sub-info 0.002-r2 apk perl-sub-info 0.002-r3 apk
perl-sub-install 0.928-r2 apk perl-sub-install 0.929-r1 apk
perl-sub-name 0.26-r4 apk perl-sub-quote 2.006008-r0 apk
perl-sub-quote 2.006006-r1 apk perl-sub-uplevel 0.2800-r3 apk
perl-sub-uplevel 0.2800-r2 apk perl-term-progressbar 2.23-r0 apk
perl-term-progressbar 2.23-r0 apk perl-term-readkey 2.38-r8 apk
perl-term-readkey 2.38-r7 apk perl-term-table 0.016-r1 apk
perl-term-table 0.016-r0 apk perl-test-exception 0.43-r3 apk
perl-test-exception 0.43-r2 apk perl-test-fatal 0.017-r0 apk
perl-test-fatal 0.016-r3 apk perl-test-simple 1.302195-r0 apk
perl-test-pod 1.52-r2 apk perl-test-without-module 0.21-r0 apk
perl-test-requires 0.11-r1 apk perl-test2-plugin-nowarnings 0.09-r1 apk
perl-test-simple 1.302191-r0 apk perl-test2-suite 0.000155-r0 apk
perl-test-taint 1.08-r5 apk perl-timedate 2.33-r2 apk
perl-test-warnings 0.031-r0 apk perl-try-tiny 0.31-r1 apk
perl-test-without-module 0.20-r2 apk perl-unicode-string 2.10-r4 apk
perl-test2-plugin-nowarnings 0.09-r1 apk perl-uri 5.19-r0 apk
perl-test2-suite 0.000145-r0 apk perl-www-robotrules 6.02-r3 apk
perl-timedate 2.33-r1 apk perl-xml-libxml 2.0208-r1 apk
perl-try-tiny 0.31-r0 apk perl-xml-namespacesupport 1.12-r3 apk
perl-types-serialiser 1.01-r0 apk perl-xml-parser 2.46-r5 apk
perl-unicode-string 2.10-r4 apk perl-xml-sax 1.02-r1 apk
perl-uri 5.17-r0 apk perl-xml-sax-base 1.09-r3 apk
perl-variable-magic 0.63-r0 apk perl-xml-treepp 0.43-r3 apk
perl-www-robotrules 6.02-r3 apk perl-xml-twig 3.52-r4 apk
perl-xml-libxml 2.0208-r0 apk perl-xml-writer 0.900-r1 apk
perl-xml-libxslt 2.002000-r0 apk procps-ng 4.0.3-r1 apk
perl-xml-namespacesupport 1.12-r3 apk py3-certifi 2023.5.7-r0 apk
perl-xml-parser 2.46-r3 apk py3-certifi-pyc 2023.5.7-r0 apk
perl-xml-sax 1.02-r1 apk py3-charset-normalizer 3.1.0-r1 apk
perl-xml-sax-base 1.09-r3 apk py3-charset-normalizer-pyc 3.1.0-r1 apk
perl-xml-treepp 0.43-r3 apk py3-idna 3.4-r4 apk
perl-xml-twig 3.52-r4 apk py3-idna-pyc 3.4-r4 apk
perl-xml-writer 0.900-r0 apk py3-requests 2.30.0-r0 apk
procps 3.3.17-r2 apk py3-requests-pyc 2.30.0-r0 apk
py3-certifi 2022.12.7-r0 apk py3-urllib3 1.26.15-r1 apk
py3-charset-normalizer 3.0.1-r0 apk py3-urllib3-pyc 1.26.15-r1 apk
py3-idna 3.4-r2 apk pyc 0.1-r0 apk
py3-requests 2.28.1-r1 apk python 3.11.3 binary
py3-urllib3 1.26.12-r0 apk python3 3.11.3-r11 apk
python 3.10.10 binary python3-pyc 3.11.3-r11 apk
python3 3.10.10-r0 apk python3-pycache-pyc0 3.11.3-r11 apk
readline 8.2.0-r0 apk readline 8.2.1-r1 apk
requests 2.28.1 python requests 2.30.0 python
scanelf 1.3.5-r1 apk scanelf 1.3.7-r1 apk
sdl2 2.26.3-r0 apk sdl2 2.26.5-r0 apk
shadow 4.13-r0 apk shaderc 2023.3-r1 apk
skalibs 2.12.0.1-r0 apk shadow 4.13-r2 apk
soxr 0.1.3-r3 apk skalibs 2.13.1.1-r1 apk
speexdsp 1.2.1-r0 apk soxr 0.1.3-r5 apk
sqlite-libs 3.40.1-r0 apk speexdsp 1.2.1-r1 apk
ssl_client 1.35.0-r29 apk spirv-tools 1.3.243.0-r1 apk
svt-av1-libs 1.3.0-r0 apk sqlite-libs 3.41.2-r2 apk
tdb-libs 1.4.7-r0 apk ssl_client 1.36.0-r9 apk
tzdata 2022f-r1 apk svt-av1-libs 1.5.0-r0 apk
uriparser 0.9.7-r0 apk tdb-libs 1.4.8-r1 apk
urllib3 1.26.12 python tzdata 2023c-r1 apk
utmps-libs 0.1.2.0-r1 apk uriparser 0.9.7-r0 apk
v4l-utils-libs 1.22.1-r2 apk urllib3 1.26.15 python
vidstab 1.1.0-r2 apk utmps-libs 0.1.2.1-r1 apk
vulkan-loader 1.3.231.2-r0 apk v4l-utils-libs 1.24.1-r0 apk
wayland-libs-client 1.21.0-r1 apk vidstab 1.1.1-r0 apk
x264 0.164_git20220602-r0 apk vulkan-loader 1.3.243.0-r1 apk
x264-libs 0.164_git20220602-r0 apk wayland-libs-client 1.22.0-r2 apk
x265 3.5-r3 apk x264 0.164_git20220602-r1 apk
x265-libs 3.5-r3 apk x264-libs 0.164_git20220602-r1 apk
xvidcore 1.3.7-r1 apk x265 3.5-r4 apk
xz 5.2.9-r0 apk x265-libs 3.5-r4 apk
xz-libs 5.2.9-r0 apk xmltv 1.2.1-r2 apk
zlib 1.2.13-r0 apk xvidcore 1.3.7-r1 apk
xz-libs 5.4.3-r0 apk
zimg 3.0.4-r2 apk
zlib 1.2.13-r1 apk

View File

@@ -1,23 +0,0 @@
requires 'perl' => '5.24.0';
# perl packages for tvheadend x86
requires 'Data::Dump' ;
requires 'DateTime::Format::ISO8601' ;
requires 'DateTime::Format::SQLite' ;
requires 'Encode' ;
requires 'File::HomeDir' ;
requires 'File::Path' ;
requires 'HTML::Entities' ;
requires 'HTML::TableExtract' ;
requires 'HTTP::Cache::Transparent' => ">= 1.3, != 1.4" ;
requires 'inc' ;
requires 'JSON::PP' ;
requires 'LWP::Simple' ;
requires 'LWP::UserAgent' ;
requires 'PerlIO::gzip' ;
requires 'SOAP::Lite' ;
requires 'Storable' ;
requires 'Unicode::UTF8simple' ;
requires 'version' ;
requires 'WWW::Mechanize' ;
requires 'XML::DOM' ;

View File

@@ -123,6 +123,9 @@ app_setup_block: |
# changelog # changelog
changelogs: changelogs:
- { date: "18.05.23:", desc: "Install XMLTV from Alpine repos." }
- { date: "18.05.23:", desc: "Rebase to Alpine 3.18." }
- { date: "17.03.23:", desc: "Extract picons during build instead of init." }
- { date: "23.02.23:", desc: "Rebase to Alpine 3.17, migrate to s6v3, drop armhf support." } - { date: "23.02.23:", desc: "Rebase to Alpine 3.17, migrate to s6v3, drop armhf support." }
- { date: "31.08.22:", desc: "Update sample env vars and how RUN_OPTS are handled." } - { date: "31.08.22:", desc: "Update sample env vars and how RUN_OPTS are handled." }
- { date: "19.08.22:", desc: "Switch to new picons builder." } - { date: "19.08.22:", desc: "Switch to new picons builder." }

View File

@@ -3,50 +3,19 @@
# make folders # make folders
mkdir -p \ mkdir -p \
/config/comskip /config/comskip
# copy config # copy config
if [[ ! -e /config/dvr/config ]]; then if [[ ! -e /config/dvr/config ]]; then
(mkdir -p /config/dvr/config && cp /defaults/7a5edfbe189851e5b1d1df19c93962f0 /config/dvr/config/7a5edfbe189851e5b1d1df19c93962f0) (mkdir -p /config/dvr/config && cp /defaults/7a5edfbe189851e5b1d1df19c93962f0 /config/dvr/config/7a5edfbe189851e5b1d1df19c93962f0)
fi fi
if [[ ! -e /config/comskip/comskip.ini ]]; then if [[ ! -e /config/comskip/comskip.ini ]]; then
cp /defaults/comskip.ini.org /config/comskip/comskip.ini cp /defaults/comskip.ini.org /config/comskip/comskip.ini
fi fi
if [[ ! -e /config/config ]]; then if [[ ! -e /config/config ]]; then
(cp /defaults/config /config/config) (cp /defaults/config /config/config)
fi fi
# extract picons on first run
if [[ -f /picons.tar.bz2 ]]; then
mkdir -p /picons
tar xf \
/picons.tar.bz2 -C \
/picons &&
rm -f /picons.tar.bz2
fi
# function to randomly sample 5 files for their owner and only chown if not abc
chowner () {
files=(${1}/*)
for i in {1..5}; do
user=$(stat -c '%U' $(printf "%s\n" "${files[RANDOM % ${#files[@]}]}"))
if [ "${user}" != "abc" ]; then
chown -R abc:abc ${1}
break
fi
done
}
# permissions # permissions
echo "Setting permissions" echo "Setting permissions"
abc_dirs=( \ lsiown -R abc:abc /config
/config \
/picons \
)
for i in "${abc_dirs[@]}"; do
if [ "$(ls -A ${i})" ]; then
chowner ${i}
else
chown -R abc:abc ${i}
fi
done

View File

@@ -5,23 +5,23 @@ FILES=$(find /dev/dri /dev/dvb -type c -print 2>/dev/null)
for i in $FILES for i in $FILES
do do
VIDEO_GID=$(stat -c '%g' "$i") VIDEO_GID=$(stat -c '%g' "$i")
if id -G abc | grep -qw "$VIDEO_GID"; then if id -G abc | grep -qw "$VIDEO_GID"; then
touch /groupadd touch /groupadd
else else
if [ ! "${VIDEO_GID}" == '0' ]; then if [ ! "${VIDEO_GID}" == '0' ]; then
VIDEO_NAME=$(getent group "${VIDEO_GID}" | awk -F: '{print $1}') VIDEO_NAME=$(getent group "${VIDEO_GID}" | awk -F: '{print $1}')
if [ -z "${VIDEO_NAME}" ]; then if [ -z "${VIDEO_NAME}" ]; then
VIDEO_NAME="video$(head /dev/urandom | tr -dc 'a-z0-9' | head -c8)" VIDEO_NAME="video$(head /dev/urandom | tr -dc 'a-z0-9' | head -c8)"
groupadd "$VIDEO_NAME" groupadd "$VIDEO_NAME"
groupmod -g "$VIDEO_GID" "$VIDEO_NAME" groupmod -g "$VIDEO_GID" "$VIDEO_NAME"
fi fi
usermod -a -G "$VIDEO_NAME" abc usermod -a -G "$VIDEO_NAME" abc
touch /groupadd touch /groupadd
fi fi
fi fi
done done
if [ -n "${FILES}" ] && [ ! -f "/groupadd" ]; then if [ -n "${FILES}" ] && [ ! -f "/groupadd" ]; then
usermod -a -G root abc usermod -a -G root abc
fi fi