Compare commits

..

33 Commits

Author SHA1 Message Date
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
LinuxServer-CI
251f0dc45c Bot Updating Package Versions 2023-03-05 16:12:20 +01:00
LinuxServer-CI
36fbd65464 Bot Updating Templated Files 2023-03-05 08:58:43 -06:00
LinuxServer-CI
45faa93578 Bot Updating Package Versions 2023-02-26 18:53:47 +01:00
Adam
ba51d908b7 Merge pull request #219 from linuxserver/fix-ffmpeg 2023-02-26 17:42:18 +00:00
TheSpad
d18a3b17da Spelling is hard 2023-02-26 17:08:49 +00:00
TheSpad
5730bb139e Keep ffmpeg4 libs 2023-02-26 17:05:51 +00:00
TheSpad
18a01d7723 Add missing ffmpeg binaries to runtime packages 2023-02-26 16:47:57 +00:00
18 changed files with 479 additions and 704 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
@@ -232,8 +164,15 @@ RUN \
echo "**** install runtime packages ****" && \ echo "**** install runtime packages ****" && \
apk add --no-cache \ apk add --no-cache \
bsd-compat-headers \ bsd-compat-headers \
ffmpeg4 \ 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,19 @@ 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-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-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
@@ -232,8 +165,15 @@ RUN \
echo "**** install runtime packages ****" && \ echo "**** install runtime packages ****" && \
apk add --no-cache \ apk add --no-cache \
bsd-compat-headers \ bsd-compat-headers \
ffmpeg4 \ 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,19 @@ 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-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-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

158
Jenkinsfile vendored
View File

@@ -42,10 +42,11 @@ 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 '''docker pull quay.io/skopeo/stable:v1 || : '''
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 +60,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(
@@ -238,19 +239,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 +285,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 +302,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
@@ -389,6 +387,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
####################### */ ####################### */
@@ -452,7 +470,8 @@ pipeline {
} }
steps { steps {
echo "Running on node: ${NODE_NAME}" echo "Running on node: ${NODE_NAME}"
sh "docker build \ sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile"
sh "docker buildx build \
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \ --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
--label \"org.opencontainers.image.authors=linuxserver.io\" \ --label \"org.opencontainers.image.authors=linuxserver.io\" \
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-tvheadend/packages\" \ --label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-tvheadend/packages\" \
@@ -465,7 +484,7 @@ pipeline {
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Tvheadend\" \ --label \"org.opencontainers.image.title=Tvheadend\" \
--label \"org.opencontainers.image.description=[Tvheadend](https://www.tvheadend.org/) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML). \" \ --label \"org.opencontainers.image.description=[Tvheadend](https://www.tvheadend.org/) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML). \" \
--no-cache --pull -t ${IMAGE}:${META_TAG} \ --no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
} }
} }
@@ -482,7 +501,8 @@ pipeline {
stage('Build X86') { stage('Build X86') {
steps { steps {
echo "Running on node: ${NODE_NAME}" echo "Running on node: ${NODE_NAME}"
sh "docker build \ sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile"
sh "docker buildx build \
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \ --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
--label \"org.opencontainers.image.authors=linuxserver.io\" \ --label \"org.opencontainers.image.authors=linuxserver.io\" \
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-tvheadend/packages\" \ --label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-tvheadend/packages\" \
@@ -495,7 +515,7 @@ pipeline {
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Tvheadend\" \ --label \"org.opencontainers.image.title=Tvheadend\" \
--label \"org.opencontainers.image.description=[Tvheadend](https://www.tvheadend.org/) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML). \" \ --label \"org.opencontainers.image.description=[Tvheadend](https://www.tvheadend.org/) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML). \" \
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} \ --no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
} }
} }
@@ -509,7 +529,8 @@ pipeline {
sh '''#! /bin/bash sh '''#! /bin/bash
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
''' '''
sh "docker build \ sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
sh "docker buildx build \
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \ --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
--label \"org.opencontainers.image.authors=linuxserver.io\" \ --label \"org.opencontainers.image.authors=linuxserver.io\" \
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-tvheadend/packages\" \ --label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-tvheadend/packages\" \
@@ -522,7 +543,7 @@ pipeline {
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Tvheadend\" \ --label \"org.opencontainers.image.title=Tvheadend\" \
--label \"org.opencontainers.image.description=[Tvheadend](https://www.tvheadend.org/) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML). \" \ --label \"org.opencontainers.image.description=[Tvheadend](https://www.tvheadend.org/) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML). \" \
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \ --no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) { retry(5) {
@@ -551,26 +572,12 @@ pipeline {
else else
LOCAL_CONTAINER=${IMAGE}:${META_TAG} LOCAL_CONTAINER=${IMAGE}:${META_TAG}
fi fi
if [ "${DIST_IMAGE}" == "alpine" ]; then touch ${TEMPDIR}/package_versions.txt
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\ docker run --rm \
apk info -v > /tmp/package_versions.txt && \ -v /var/run/docker.sock:/var/run/docker.sock:ro \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \ -v ${TEMPDIR}:/tmp \
chmod 777 /tmp/package_versions.txt' ghcr.io/anchore/syft:latest \
elif [ "${DIST_IMAGE}" == "ubuntu" ]; then ${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
elif [ "${DIST_IMAGE}" == "fedora" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
rpm -qa > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
elif [ "${DIST_IMAGE}" == "arch" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
pacman -Q > /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
fi
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
@@ -657,6 +664,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
@@ -681,8 +689,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'''
} }
@@ -816,6 +822,9 @@ 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
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest || :
docker manifest create ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:amd64-latest
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest
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}
@@ -917,8 +926,67 @@ pipeline {
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"
}
# 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}\\"}"'''
} }
} }
} }

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

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