mirror of
https://github.com/linuxserver/docker-bazarr.git
synced 2025-04-22 05:37:08 -04:00
Compare commits
60 commits
v1.4.3-ls2
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
de1465f981 | ||
|
499d9461d4 | ||
|
0659a474da | ||
|
d696e42e52 | ||
|
15e0f79dff | ||
|
cfcacd58ee | ||
|
3caad64e72 | ||
|
66d37b4a31 | ||
|
656e0796dc | ||
|
9fa68baf9d | ||
|
640c5d0f58 | ||
|
0e55aa723c | ||
|
a5e47e7795 | ||
|
2d96a825e8 | ||
|
2e437148ab | ||
|
818c4b37c6 | ||
|
d696d60999 | ||
|
dcb5ad0454 | ||
|
9d18700dd3 | ||
|
f575256c19 | ||
|
d1fecce254 | ||
|
2590705772 | ||
|
3ba1ff9577 | ||
|
b3206c2861 | ||
|
9ee3fc7fbd | ||
|
f72825335e | ||
|
116dacdedd | ||
|
cf886e3730 | ||
|
09472eafab | ||
|
7274e84ee2 | ||
|
2787b232bf | ||
|
c3abd5b4c6 | ||
|
e364f88b30 | ||
|
c3603b5e0e | ||
|
22ea3188d5 | ||
|
04c3825797 | ||
|
d5f9d967d6 | ||
|
29a5e7a9d0 | ||
|
dfc2c16ab1 | ||
|
3a9fec6cd4 | ||
|
33379f33cc | ||
|
885321a229 | ||
|
e76f75ef7e | ||
|
1a9b791fee | ||
|
6dbee94ef0 | ||
|
6378de0afb | ||
|
5c70e4dc80 | ||
|
07156341eb | ||
|
55482ecb25 | ||
|
6ffa978e4e | ||
|
2e684f8ebf | ||
|
10c9e6a7df | ||
|
8285ef94ac | ||
|
f092d8d4cc | ||
|
9fe4513f9c | ||
|
bda6a47e84 | ||
|
93030d026a | ||
|
f966bdeea2 | ||
|
9c2e49dace | ||
|
2bb78bab23 |
14 changed files with 871 additions and 574 deletions
6
.github/CONTRIBUTING.md
vendored
6
.github/CONTRIBUTING.md
vendored
|
@ -6,7 +6,7 @@
|
|||
* Read, and fill the Pull Request template
|
||||
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
|
||||
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
|
||||
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn)
|
||||
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord)
|
||||
|
||||
## Common files
|
||||
|
||||
|
@ -105,10 +105,10 @@ docker build \
|
|||
-t linuxserver/bazarr:latest .
|
||||
```
|
||||
|
||||
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
|
||||
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
|
||||
|
||||
```bash
|
||||
docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
||||
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
|
||||
```
|
||||
|
||||
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
|
||||
|
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -1,7 +1,7 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Discord chat support
|
||||
url: https://discord.gg/YWrKVTn
|
||||
url: https://linuxserver.io/discord
|
||||
about: Realtime support / chat with the community and the team.
|
||||
|
||||
- name: Discourse discussion forum
|
||||
|
|
136
.github/workflows/external_trigger.yml
vendored
136
.github/workflows/external_trigger.yml
vendored
|
@ -11,18 +11,31 @@ jobs:
|
|||
|
||||
- name: External Trigger
|
||||
if: github.ref == 'refs/heads/master'
|
||||
env:
|
||||
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
|
||||
run: |
|
||||
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_BAZARR_MASTER }}" ]; then
|
||||
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_BAZARR_MASTER is set; skipping trigger. ****"
|
||||
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_BAZARR_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
printf "# External trigger for docker-bazarr\n\n" >> $GITHUB_STEP_SUMMARY
|
||||
if grep -q "^bazarr_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
|
||||
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`bazarr_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
|
||||
elif grep -q "^bazarr_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`bazarr_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
fi
|
||||
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_BAZARR_MASTER\". ****"
|
||||
echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_BAZARR_MASTER\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**** Retrieving external version ****"
|
||||
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> External trigger running off of master branch. To disable this trigger, add \`bazarr_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
|
||||
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
|
||||
EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/morpheus65535/bazarr/releases/latest" | jq -r '. | .tag_name')
|
||||
echo "Type is \`github_stable\`" >> $GITHUB_STEP_SUMMARY
|
||||
if grep -q "^bazarr_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
fi
|
||||
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
|
||||
echo "**** Can't retrieve external version, exiting ****"
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
|
||||
FAILURE_REASON="Can't retrieve external version for bazarr branch master"
|
||||
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-bazarr/actions/runs/${{ github.run_id }}"
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
|
||||
|
@ -31,24 +44,42 @@ jobs:
|
|||
exit 1
|
||||
fi
|
||||
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
|
||||
echo "**** External version: ${EXT_RELEASE} ****"
|
||||
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**** Retrieving last pushed version ****"
|
||||
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
|
||||
image="linuxserver/bazarr"
|
||||
tag="latest"
|
||||
token=$(curl -sX GET \
|
||||
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fbazarr%3Apull" \
|
||||
| jq -r '.token')
|
||||
multidigest=$(curl -s \
|
||||
multidigest=$(curl -s \
|
||||
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
|
||||
--header "Accept: application/vnd.oci.image.index.v1+json" \
|
||||
--header "Authorization: Bearer ${token}" \
|
||||
"https://ghcr.io/v2/${image}/manifests/${tag}")
|
||||
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
|
||||
# If there's a layer element it's a single-arch manifest so just get that digest
|
||||
digest=$(jq -r '.config.digest' <<< "${multidigest}")
|
||||
else
|
||||
# Otherwise it's multi-arch or has manifest annotations
|
||||
if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
|
||||
# Check for manifest annotations and delete if found
|
||||
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
|
||||
fi
|
||||
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
|
||||
# If there's still more than one digest, it's multi-arch
|
||||
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
|
||||
else
|
||||
# Otherwise it's single arch
|
||||
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
|
||||
fi
|
||||
if digest=$(curl -s \
|
||||
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
|
||||
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
|
||||
--header "Authorization: Bearer ${token}" \
|
||||
"https://ghcr.io/v2/${image}/manifests/${tag}" \
|
||||
| jq -r 'first(.manifests[].digest)')
|
||||
digest=$(curl -s \
|
||||
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
|
||||
--header "Authorization: Bearer ${token}" \
|
||||
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
|
||||
| jq -r '.config.digest')
|
||||
"https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
|
||||
digest=$(jq -r '.config.digest' <<< "${digest}");
|
||||
fi
|
||||
fi
|
||||
image_info=$(curl -sL \
|
||||
--header "Authorization: Bearer ${token}" \
|
||||
"https://ghcr.io/v2/${image}/blobs/${digest}")
|
||||
|
@ -60,45 +91,54 @@ jobs:
|
|||
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
|
||||
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
|
||||
if [ -z "${IMAGE_VERSION}" ]; then
|
||||
echo "**** Can't retrieve last pushed version, exiting ****"
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
|
||||
FAILURE_REASON="Can't retrieve last pushed version for bazarr tag latest"
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
|
||||
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
|
||||
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
|
||||
exit 1
|
||||
fi
|
||||
echo "**** Last pushed version: ${IMAGE_VERSION} ****"
|
||||
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
|
||||
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
|
||||
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
|
||||
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bazarr/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" >> $GITHUB_STEP_SUMMARY
|
||||
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
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" >> $GITHUB_STEP_SUMMARY
|
||||
response=$(curl -iX POST \
|
||||
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bazarr/job/master/buildWithParameters?PACKAGE_CHECK=false \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
|
||||
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
|
||||
echo "**** Sleeping 10 seconds until job starts ****"
|
||||
sleep 10
|
||||
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
|
||||
buildurl="${buildurl%$'\r'}"
|
||||
echo "**** Jenkins job build url: ${buildurl} ****"
|
||||
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**** Attempting to change the Jenkins job description ****"
|
||||
curl -iX POST \
|
||||
"${buildurl}submitDescription" \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
|
||||
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
|
||||
--data-urlencode "Submit=Submit"
|
||||
echo "**** Notifying Discord ****"
|
||||
TRIGGER_REASON="A version change was detected for bazarr tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
|
||||
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
|
||||
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
|
||||
if [[ "${artifacts_found}" == "false" ]]; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
|
||||
FAILURE_REASON="New version ${EXT_RELEASE} for bazarr tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
|
||||
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
|
||||
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
|
||||
else
|
||||
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
|
||||
echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
|
||||
if [[ "${artifacts_found}" == "true" ]]; then
|
||||
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
response=$(curl -iX POST \
|
||||
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bazarr/job/master/buildWithParameters?PACKAGE_CHECK=false \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
|
||||
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
|
||||
sleep 10
|
||||
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
|
||||
buildurl="${buildurl%$'\r'}"
|
||||
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
|
||||
curl -iX POST \
|
||||
"${buildurl}submitDescription" \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
|
||||
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
|
||||
--data-urlencode "Submit=Submit"
|
||||
echo "**** Notifying Discord ****"
|
||||
TRIGGER_REASON="A version change was detected for bazarr tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
|
||||
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
|
||||
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
|
||||
fi
|
||||
fi
|
||||
|
|
24
.github/workflows/external_trigger_scheduler.yml
vendored
24
.github/workflows/external_trigger_scheduler.yml
vendored
|
@ -15,31 +15,31 @@ jobs:
|
|||
|
||||
- name: External Trigger Scheduler
|
||||
run: |
|
||||
echo "**** Branches found: ****"
|
||||
git for-each-ref --format='%(refname:short)' refs/remotes
|
||||
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
|
||||
printf "# External trigger scheduler for docker-bazarr\n\n" >> $GITHUB_STEP_SUMMARY
|
||||
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
|
||||
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
|
||||
do
|
||||
br=$(echo "$br" | sed 's|origin/||g')
|
||||
echo "**** Evaluating branch ${br} ****"
|
||||
if [[ "${br}" == "HEAD" ]]; then
|
||||
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
|
||||
continue
|
||||
fi
|
||||
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
|
||||
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-bazarr/${br}/jenkins-vars.yml)
|
||||
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
|
||||
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
|
||||
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
|
||||
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****"
|
||||
echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
|
||||
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-bazarr/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
|
||||
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****."
|
||||
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
|
||||
curl -iX POST \
|
||||
-H "Authorization: token ${{ secrets.CR_PAT }}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
-d "{\"ref\":\"refs/heads/${br}\"}" \
|
||||
https://api.github.com/repos/linuxserver/docker-bazarr/actions/workflows/external_trigger.yml/dispatches
|
||||
else
|
||||
echo "**** Workflow doesn't exist; skipping trigger. ****"
|
||||
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
|
||||
echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
else
|
||||
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
|
||||
echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
done
|
||||
|
|
42
.github/workflows/package_trigger.yml
vendored
42
.github/workflows/package_trigger.yml
vendored
|
@ -1,42 +0,0 @@
|
|||
name: Package Trigger Main
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
package-trigger-master:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
|
||||
- name: Package Trigger
|
||||
if: github.ref == 'refs/heads/master'
|
||||
run: |
|
||||
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_BAZARR_MASTER }}" ]; then
|
||||
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_BAZARR_MASTER is set; skipping trigger. ****"
|
||||
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_BAZARR_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
fi
|
||||
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bazarr/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" >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
fi
|
||||
echo "**** Package trigger running off of master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_BAZARR_MASTER\". ****"
|
||||
echo "Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_BAZARR_MASTER\`" >> $GITHUB_STEP_SUMMARY
|
||||
response=$(curl -iX POST \
|
||||
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bazarr/job/master/buildWithParameters?PACKAGE_CHECK=true \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
|
||||
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
|
||||
echo "**** Sleeping 10 seconds until job starts ****"
|
||||
sleep 10
|
||||
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
|
||||
buildurl="${buildurl%$'\r'}"
|
||||
echo "**** Jenkins job build url: ${buildurl} ****"
|
||||
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**** Attempting to change the Jenkins job description ****"
|
||||
curl -iX POST \
|
||||
"${buildurl}submitDescription" \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
|
||||
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
|
||||
--data-urlencode "Submit=Submit"
|
102
.github/workflows/package_trigger_scheduler.yml
vendored
102
.github/workflows/package_trigger_scheduler.yml
vendored
|
@ -14,37 +14,87 @@ jobs:
|
|||
fetch-depth: '0'
|
||||
|
||||
- name: Package Trigger Scheduler
|
||||
env:
|
||||
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
|
||||
run: |
|
||||
echo "**** Branches found: ****"
|
||||
git for-each-ref --format='%(refname:short)' refs/remotes
|
||||
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
|
||||
printf "# Package trigger scheduler for docker-bazarr\n\n" >> $GITHUB_STEP_SUMMARY
|
||||
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
|
||||
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
|
||||
do
|
||||
br=$(echo "$br" | sed 's|origin/||g')
|
||||
echo "**** Evaluating branch ${br} ****"
|
||||
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-bazarr/${br}/jenkins-vars.yml | yq -r '.ls_branch')
|
||||
if [ "${br}" == "${ls_branch}" ]; then
|
||||
echo "**** Branch ${br} appears to be live; checking workflow. ****"
|
||||
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-bazarr/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
|
||||
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} "
|
||||
curl -iX POST \
|
||||
-H "Authorization: token ${{ secrets.CR_PAT }}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
-d "{\"ref\":\"refs/heads/${br}\"}" \
|
||||
https://api.github.com/repos/linuxserver/docker-bazarr/actions/workflows/package_trigger.yml/dispatches
|
||||
sleep 30
|
||||
if [[ "${br}" == "HEAD" ]]; then
|
||||
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
|
||||
continue
|
||||
fi
|
||||
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
|
||||
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-bazarr/${br}/jenkins-vars.yml)
|
||||
if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-bazarr/${br}/Jenkinsfile >/dev/null 2>&1; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
|
||||
skipped_branches="${skipped_branches}${br} "
|
||||
elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
|
||||
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
|
||||
README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-bazarr/${br}/readme-vars.yml)
|
||||
if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
skipped_branches="${skipped_branches}${br} "
|
||||
elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
|
||||
skipped_branches="${skipped_branches}${br} "
|
||||
elif grep -q "^bazarr_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`bazarr_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
skipped_branches="${skipped_branches}${br} "
|
||||
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bazarr/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
|
||||
skipped_branches="${skipped_branches}${br} "
|
||||
else
|
||||
echo "**** Workflow doesn't exist; skipping trigger. ****"
|
||||
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
|
||||
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
|
||||
printf "> To disable, add \`bazarr_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY
|
||||
triggered_branches="${triggered_branches}${br} "
|
||||
response=$(curl -iX POST \
|
||||
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bazarr/job/${br}/buildWithParameters?PACKAGE_CHECK=true \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
|
||||
if [[ -z "${response}" ]]; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Jenkins build could not be triggered. Skipping branch."
|
||||
continue
|
||||
fi
|
||||
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
|
||||
sleep 10
|
||||
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
|
||||
buildurl="${buildurl%$'\r'}"
|
||||
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
|
||||
if ! curl -ifX POST \
|
||||
"${buildurl}submitDescription" \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
|
||||
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
|
||||
--data-urlencode "Submit=Submit"; then
|
||||
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> Unable to change the Jenkins job description."
|
||||
fi
|
||||
sleep 20
|
||||
fi
|
||||
else
|
||||
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
|
||||
done
|
||||
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
|
||||
echo "**** Notifying Discord ****"
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
|
||||
"description": "**Package Check Build(s) Triggered for bazarr** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-bazarr/activity/"' \n"}],
|
||||
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
|
||||
if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
|
||||
if [[ -n "${triggered_branches}" ]]; then
|
||||
NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
|
||||
NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-bazarr/activity/ \n"
|
||||
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
|
||||
fi
|
||||
if [[ -n "${skipped_branches}" ]]; then
|
||||
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
|
||||
fi
|
||||
echo "**** Notifying Discord ****"
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
|
||||
"description": "**Package Check Build(s) for bazarr** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
|
||||
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
|
||||
fi
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
FROM ghcr.io/linuxserver/unrar:latest AS unrar
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:3.20
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:3.21
|
||||
|
||||
# set version label
|
||||
ARG BUILD_DATE
|
||||
|
@ -53,7 +53,7 @@ RUN \
|
|||
pip install -U --no-cache-dir \
|
||||
pip \
|
||||
wheel && \
|
||||
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.20/ \
|
||||
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.21/ \
|
||||
-r /app/bazarr/bin/requirements.txt \
|
||||
-r /app/bazarr/bin/postgres-requirements.txt && \
|
||||
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.20
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.21
|
||||
|
||||
# set version label
|
||||
ARG BUILD_DATE
|
||||
|
@ -53,7 +53,7 @@ RUN \
|
|||
pip install -U --no-cache-dir \
|
||||
pip \
|
||||
wheel && \
|
||||
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.20/ \
|
||||
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.21/ \
|
||||
-r /app/bazarr/bin/requirements.txt \
|
||||
-r /app/bazarr/bin/postgres-requirements.txt && \
|
||||
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
|
||||
|
|
427
Jenkinsfile
vendored
427
Jenkinsfile
vendored
|
@ -8,7 +8,7 @@ pipeline {
|
|||
}
|
||||
// Input to determine if this is a package check
|
||||
parameters {
|
||||
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
|
||||
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
|
||||
}
|
||||
// Configuration for the variables used for this specific repo
|
||||
environment {
|
||||
|
@ -17,6 +17,8 @@ pipeline {
|
|||
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
|
||||
GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
|
||||
DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat')
|
||||
QUAYIO_API_TOKEN=credentials('quayio-repo-api-token')
|
||||
GIT_SIGNING_KEY=credentials('484fbca6-9a4f-455e-b9e3-97ac98785f5f')
|
||||
EXT_GIT_BRANCH = 'master'
|
||||
EXT_USER = 'morpheus65535'
|
||||
EXT_REPO = 'bazarr'
|
||||
|
@ -39,15 +41,41 @@ pipeline {
|
|||
CI_WEBPATH='/system/status'
|
||||
}
|
||||
stages {
|
||||
stage("Set git config"){
|
||||
steps{
|
||||
sh '''#!/bin/bash
|
||||
cat ${GIT_SIGNING_KEY} > /config/.ssh/id_sign
|
||||
chmod 600 /config/.ssh/id_sign
|
||||
ssh-keygen -y -f /config/.ssh/id_sign > /config/.ssh/id_sign.pub
|
||||
echo "Using $(ssh-keygen -lf /config/.ssh/id_sign) to sign commits"
|
||||
git config --global gpg.format ssh
|
||||
git config --global user.signingkey /config/.ssh/id_sign
|
||||
git config --global commit.gpgsign true
|
||||
'''
|
||||
}
|
||||
}
|
||||
// Setup all the basic environment variables needed for the build
|
||||
stage("Set ENV Variables base"){
|
||||
steps{
|
||||
echo "Running on node: ${NODE_NAME}"
|
||||
sh '''#! /bin/bash
|
||||
containers=$(docker ps -aq)
|
||||
echo "Pruning builder"
|
||||
docker builder prune -f --builder container || :
|
||||
containers=$(docker ps -q)
|
||||
if [[ -n "${containers}" ]]; then
|
||||
docker stop ${containers}
|
||||
BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
|
||||
for container in ${containers}; do
|
||||
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
|
||||
echo "skipping buildx container in docker stop"
|
||||
else
|
||||
echo "Stopping container ${container}"
|
||||
docker stop ${container}
|
||||
fi
|
||||
done
|
||||
fi
|
||||
docker system prune -af --volumes || : '''
|
||||
docker system prune -f --volumes || :
|
||||
docker image prune -af || :
|
||||
'''
|
||||
script{
|
||||
env.EXIT_STATUS = ''
|
||||
env.LS_RELEASE = sh(
|
||||
|
@ -68,7 +96,7 @@ pipeline {
|
|||
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.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/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 ./root/donate.txt'
|
||||
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 ./root/donate.txt'
|
||||
}
|
||||
sh '''#! /bin/bash
|
||||
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
|
||||
|
@ -185,6 +213,7 @@ pipeline {
|
|||
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
|
||||
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
|
||||
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
|
||||
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -209,6 +238,7 @@ pipeline {
|
|||
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
|
||||
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
|
||||
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
|
||||
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -233,6 +263,7 @@ pipeline {
|
|||
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.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
|
||||
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -305,7 +336,7 @@ pipeline {
|
|||
echo "Jenkinsfile is up to date."
|
||||
fi
|
||||
echo "Starting Stage 2 - Delete old templates"
|
||||
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"
|
||||
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 .github/workflows/package_trigger.yml"
|
||||
for i in ${OLD_TEMPLATES}; do
|
||||
if [[ -f "${i}" ]]; then
|
||||
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
|
||||
|
@ -329,6 +360,35 @@ pipeline {
|
|||
else
|
||||
echo "No templates to delete"
|
||||
fi
|
||||
echo "Starting Stage 2.5 - Update init diagram"
|
||||
if ! grep -q 'init_diagram:' readme-vars.yml; then
|
||||
echo "Adding the key 'init_diagram' to readme-vars.yml"
|
||||
sed -i '\\|^#.*changelog.*$|d' readme-vars.yml
|
||||
sed -i 's|^changelogs:|# init diagram\\ninit_diagram:\\n\\n# changelog\\nchangelogs:|' readme-vars.yml
|
||||
fi
|
||||
mkdir -p ${TEMPDIR}/d2
|
||||
docker run --rm -v ${TEMPDIR}/d2:/output -e PUID=$(id -u) -e PGID=$(id -g) -e RAW="true" ghcr.io/linuxserver/d2-builder:latest ${CONTAINER_NAME}:latest
|
||||
ls -al ${TEMPDIR}/d2
|
||||
yq -ei ".init_diagram |= load_str(\\"${TEMPDIR}/d2/${CONTAINER_NAME}-latest.d2\\")" readme-vars.yml
|
||||
if [[ $(md5sum readme-vars.yml | cut -c1-8) != $(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/readme-vars.yml | cut -c1-8) ]]; then
|
||||
echo "'init_diagram' has been updated. Updating repo and exiting build, new one will trigger based on commit."
|
||||
mkdir -p ${TEMPDIR}/repo
|
||||
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
|
||||
cd ${TEMPDIR}/repo/${LS_REPO}
|
||||
git checkout -f master
|
||||
cp ${WORKSPACE}/readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/readme-vars.yml
|
||||
git add readme-vars.yml
|
||||
git commit -m 'Bot Updating Templated Files'
|
||||
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
|
||||
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
|
||||
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
echo "Updating templates and exiting build, new one will trigger based on commit"
|
||||
rm -Rf ${TEMPDIR}
|
||||
exit 0
|
||||
else
|
||||
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
echo "Init diagram is unchanged"
|
||||
fi
|
||||
echo "Starting Stage 3 - Update templates"
|
||||
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
|
||||
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
|
||||
|
@ -391,9 +451,9 @@ pipeline {
|
|||
echo "Updating Unraid template"
|
||||
cd ${TEMPDIR}/unraid/templates/
|
||||
GH_TEMPLATES_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
|
||||
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list && [[ -f ${TEMPDIR}/unraid/templates/unraid/deprecated/${CONTAINER_NAME}.xml ]]; then
|
||||
if grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list && [[ -f ${TEMPDIR}/unraid/templates/unraid/deprecated/${CONTAINER_NAME}.xml ]]; then
|
||||
echo "Image is on the ignore list, and already in the deprecation folder."
|
||||
elif grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
|
||||
elif grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
|
||||
echo "Image is on the ignore list, marking Unraid template as deprecated"
|
||||
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
|
||||
git add -u unraid/${CONTAINER_NAME}.xml
|
||||
|
@ -486,10 +546,10 @@ pipeline {
|
|||
}
|
||||
}
|
||||
/* #######################
|
||||
GitLab Mirroring
|
||||
GitLab Mirroring and Quay.io Repo Visibility
|
||||
####################### */
|
||||
// Ping into Gitlab to mirror this repo and have a registry endpoint
|
||||
stage("GitLab Mirror"){
|
||||
// Ping into Gitlab to mirror this repo and have a registry endpoint & mark this repo on Quay.io as public
|
||||
stage("GitLab Mirror and Quay.io Visibility"){
|
||||
when {
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
|
@ -505,6 +565,8 @@ pipeline {
|
|||
"visibility":"public"}' '''
|
||||
sh '''curl -H "Private-Token: ${GITLAB_TOKEN}" -X PUT "https://gitlab.com/api/v4/projects/Linuxserver.io%2F${LS_REPO}" \
|
||||
-d "mirror=true&import_url=https://github.com/linuxserver/${LS_REPO}.git" '''
|
||||
sh '''curl -H "Content-Type: application/json" -H "Authorization: Bearer ${QUAYIO_API_TOKEN}" -X POST "https://quay.io/api/v1/repository${QUAYIMAGE/quay.io/}/changevisibility" \
|
||||
-d '{"visibility":"public"}' ||: '''
|
||||
}
|
||||
}
|
||||
/* ###############
|
||||
|
@ -535,8 +597,42 @@ pipeline {
|
|||
--label \"org.opencontainers.image.title=Bazarr\" \
|
||||
--label \"org.opencontainers.image.description=[Bazarr](https://www.bazarr.media/) is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.\" \
|
||||
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
|
||||
--provenance=false --sbom=false \
|
||||
--provenance=true --sbom=true --builder=container --load \
|
||||
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
done
|
||||
'''
|
||||
withCredentials([
|
||||
[
|
||||
$class: 'UsernamePasswordMultiBinding',
|
||||
credentialsId: 'Quay.io-Robot',
|
||||
usernameVariable: 'QUAYUSER',
|
||||
passwordVariable: 'QUAYPASS'
|
||||
]
|
||||
]) {
|
||||
retry_backoff(5,5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
|
||||
done
|
||||
for p in $(jobs -p); do
|
||||
wait "$p" || { echo "job $p failed" >&2; exit 1; }
|
||||
done
|
||||
fi
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Build MultiArch Docker containers for push to LS Repo
|
||||
|
@ -567,8 +663,42 @@ pipeline {
|
|||
--label \"org.opencontainers.image.title=Bazarr\" \
|
||||
--label \"org.opencontainers.image.description=[Bazarr](https://www.bazarr.media/) is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.\" \
|
||||
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
|
||||
--provenance=false --sbom=false \
|
||||
--provenance=true --sbom=true --builder=container --load \
|
||||
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
done
|
||||
'''
|
||||
withCredentials([
|
||||
[
|
||||
$class: 'UsernamePasswordMultiBinding',
|
||||
credentialsId: 'Quay.io-Robot',
|
||||
usernameVariable: 'QUAYUSER',
|
||||
passwordVariable: 'QUAYPASS'
|
||||
]
|
||||
]) {
|
||||
retry_backoff(5,5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
|
||||
done
|
||||
for p in $(jobs -p); do
|
||||
wait "$p" || { echo "job $p failed" >&2; exit 1; }
|
||||
done
|
||||
fi
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Build ARM64') {
|
||||
|
@ -577,10 +707,6 @@ pipeline {
|
|||
}
|
||||
steps {
|
||||
echo "Running on node: ${NODE_NAME}"
|
||||
echo 'Logging into Github'
|
||||
sh '''#! /bin/bash
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
'''
|
||||
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}\" \
|
||||
|
@ -596,18 +722,50 @@ pipeline {
|
|||
--label \"org.opencontainers.image.title=Bazarr\" \
|
||||
--label \"org.opencontainers.image.description=[Bazarr](https://www.bazarr.media/) is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.\" \
|
||||
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
|
||||
--provenance=false --sbom=false \
|
||||
--provenance=true --sbom=true --builder=container --load \
|
||||
--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}"
|
||||
retry(5) {
|
||||
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
done
|
||||
'''
|
||||
withCredentials([
|
||||
[
|
||||
$class: 'UsernamePasswordMultiBinding',
|
||||
credentialsId: 'Quay.io-Robot',
|
||||
usernameVariable: 'QUAYUSER',
|
||||
passwordVariable: 'QUAYPASS'
|
||||
]
|
||||
]) {
|
||||
retry_backoff(5,5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
|
||||
done
|
||||
for p in $(jobs -p); do
|
||||
wait "$p" || { echo "job $p failed" >&2; exit 1; }
|
||||
done
|
||||
fi
|
||||
'''
|
||||
}
|
||||
}
|
||||
sh '''#! /bin/bash
|
||||
containers=$(docker ps -aq)
|
||||
if [[ -n "${containers}" ]]; then
|
||||
docker stop ${containers}
|
||||
fi
|
||||
docker system prune -af --volumes || : '''
|
||||
docker system prune -f --volumes || :
|
||||
docker image prune -af || :
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -711,6 +869,14 @@ pipeline {
|
|||
}
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
if grep -q 'docker-baseimage' <<< "${LS_REPO}"; then
|
||||
echo "Detected baseimage, setting LSIO_FIRST_PARTY=true"
|
||||
if [ -n "${CI_DOCKERENV}" ]; then
|
||||
CI_DOCKERENV="LSIO_FIRST_PARTY=true|${CI_DOCKERENV}"
|
||||
else
|
||||
CI_DOCKERENV="LSIO_FIRST_PARTY=true"
|
||||
fi
|
||||
fi
|
||||
docker pull ghcr.io/linuxserver/ci:latest
|
||||
if [ "${MULTIARCH}" == "true" ]; then
|
||||
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
|
||||
|
@ -723,6 +889,7 @@ pipeline {
|
|||
-e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \
|
||||
-e TAGS=\"${CI_TAGS}\" \
|
||||
-e META_TAG=\"${META_TAG}\" \
|
||||
-e RELEASE_TAG=\"latest\" \
|
||||
-e PORT=\"${CI_PORT}\" \
|
||||
-e SSL=\"${CI_SSL}\" \
|
||||
-e BASE=\"${DIST_IMAGE}\" \
|
||||
|
@ -732,6 +899,7 @@ pipeline {
|
|||
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
|
||||
-e WEB_AUTH=\"${CI_AUTH}\" \
|
||||
-e WEB_PATH=\"${CI_WEBPATH}\" \
|
||||
-e NODE_NAME=\"${NODE_NAME}\" \
|
||||
-t ghcr.io/linuxserver/ci:latest \
|
||||
python3 test_build.py'''
|
||||
}
|
||||
|
@ -747,37 +915,23 @@ pipeline {
|
|||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
withCredentials([
|
||||
[
|
||||
$class: 'UsernamePasswordMultiBinding',
|
||||
credentialsId: 'Quay.io-Robot',
|
||||
usernameVariable: 'QUAYUSER',
|
||||
passwordVariable: 'QUAYPASS'
|
||||
]
|
||||
]) {
|
||||
retry(5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
|
||||
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
|
||||
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
|
||||
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
|
||||
fi
|
||||
docker push ${PUSHIMAGE}:latest
|
||||
docker push ${PUSHIMAGE}:${META_TAG}
|
||||
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker push ${PUSHIMAGE}:${SEMVER}
|
||||
fi
|
||||
retry_backoff(5,5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
[[ ${PUSHIMAGE%%/*} =~ \\. ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
|
||||
CACHEIMAGE=${i}
|
||||
fi
|
||||
done
|
||||
'''
|
||||
}
|
||||
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
fi
|
||||
done
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -788,57 +942,34 @@ pipeline {
|
|||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
withCredentials([
|
||||
[
|
||||
$class: 'UsernamePasswordMultiBinding',
|
||||
credentialsId: 'Quay.io-Robot',
|
||||
usernameVariable: 'QUAYUSER',
|
||||
passwordVariable: 'QUAYPASS'
|
||||
]
|
||||
]) {
|
||||
retry(5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
if [ "${CI}" == "false" ]; then
|
||||
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
|
||||
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
|
||||
retry_backoff(5,5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
[[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
|
||||
CACHEIMAGE=${i}
|
||||
fi
|
||||
done
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
fi
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
|
||||
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
|
||||
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
|
||||
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
fi
|
||||
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
|
||||
docker push ${MANIFESTIMAGE}:amd64-latest
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
fi
|
||||
done
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
fi
|
||||
done
|
||||
'''
|
||||
}
|
||||
done
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
fi
|
||||
done
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -859,14 +990,14 @@ pipeline {
|
|||
"object": "'${COMMIT_SHA}'",\
|
||||
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
|
||||
"type": "commit",\
|
||||
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
|
||||
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
|
||||
echo "Pushing New release for Tag"
|
||||
sh '''#! /bin/bash
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json
|
||||
echo '{"tag_name":"'${META_TAG}'",\
|
||||
"target_commitish": "master",\
|
||||
"name": "'${META_TAG}'",\
|
||||
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**'${EXT_REPO}' Changes:**\\n\\n' > start
|
||||
"body": "**CI Report:**\\n\\n'${CI_URL:-N/A}'\\n\\n**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
|
||||
printf '","draft": false,"prerelease": false}' >> releasebody.json
|
||||
paste -d'\\0' start releasebody.json > releasebody.json.done
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
|
||||
|
@ -991,32 +1122,94 @@ EOF
|
|||
###################### */
|
||||
post {
|
||||
always {
|
||||
sh '''#!/bin/bash
|
||||
rm -rf /config/.ssh/id_sign
|
||||
rm -rf /config/.ssh/id_sign.pub
|
||||
git config --global --unset gpg.format
|
||||
git config --global --unset user.signingkey
|
||||
git config --global --unset commit.gpgsign
|
||||
'''
|
||||
script{
|
||||
env.JOB_DATE = sh(
|
||||
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
|
||||
returnStdout: true).trim()
|
||||
if (env.EXIT_STATUS == "ABORTED"){
|
||||
sh 'echo "build aborted"'
|
||||
}
|
||||
else if (currentBuild.currentResult == "SUCCESS"){
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 1681177,\
|
||||
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
|
||||
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
|
||||
}
|
||||
else {
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\
|
||||
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
|
||||
}else{
|
||||
if (currentBuild.currentResult == "SUCCESS"){
|
||||
if (env.GITHUBIMAGE =~ /lspipepr/){
|
||||
env.JOB_WEBHOOK_STATUS='Success'
|
||||
env.JOB_WEBHOOK_COLOUR=3957028
|
||||
env.JOB_WEBHOOK_FOOTER='PR Build'
|
||||
}else if (env.GITHUBIMAGE =~ /lsiodev/){
|
||||
env.JOB_WEBHOOK_STATUS='Success'
|
||||
env.JOB_WEBHOOK_COLOUR=3957028
|
||||
env.JOB_WEBHOOK_FOOTER='Dev Build'
|
||||
}else{
|
||||
env.JOB_WEBHOOK_STATUS='Success'
|
||||
env.JOB_WEBHOOK_COLOUR=1681177
|
||||
env.JOB_WEBHOOK_FOOTER='Live Build'
|
||||
}
|
||||
}else{
|
||||
if (env.GITHUBIMAGE =~ /lspipepr/){
|
||||
env.JOB_WEBHOOK_STATUS='Failure'
|
||||
env.JOB_WEBHOOK_COLOUR=12669523
|
||||
env.JOB_WEBHOOK_FOOTER='PR Build'
|
||||
}else if (env.GITHUBIMAGE =~ /lsiodev/){
|
||||
env.JOB_WEBHOOK_STATUS='Failure'
|
||||
env.JOB_WEBHOOK_COLOUR=12669523
|
||||
env.JOB_WEBHOOK_FOOTER='Dev Build'
|
||||
}else{
|
||||
env.JOB_WEBHOOK_STATUS='Failure'
|
||||
env.JOB_WEBHOOK_COLOUR=16711680
|
||||
env.JOB_WEBHOOK_FOOTER='Live Build'
|
||||
}
|
||||
}
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"'color'": '${JOB_WEBHOOK_COLOUR}',\
|
||||
"footer": {"text" : "'"${JOB_WEBHOOK_FOOTER}"'"},\
|
||||
"timestamp": "'${JOB_DATE}'",\
|
||||
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** '${JOB_WEBHOOK_STATUS}'\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
|
||||
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
|
||||
}
|
||||
}
|
||||
}
|
||||
cleanup {
|
||||
sh '''#! /bin/bash
|
||||
echo "Performing docker system prune!!"
|
||||
containers=$(docker ps -aq)
|
||||
echo "Pruning builder!!"
|
||||
docker builder prune -f --builder container || :
|
||||
containers=$(docker ps -q)
|
||||
if [[ -n "${containers}" ]]; then
|
||||
docker stop ${containers}
|
||||
BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
|
||||
for container in ${containers}; do
|
||||
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
|
||||
echo "skipping buildx container in docker stop"
|
||||
else
|
||||
echo "Stopping container ${container}"
|
||||
docker stop ${container}
|
||||
fi
|
||||
done
|
||||
fi
|
||||
docker system prune -af --volumes || :
|
||||
docker system prune -f --volumes || :
|
||||
docker image prune -af || :
|
||||
'''
|
||||
cleanWs()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def retry_backoff(int max_attempts, int power_base, Closure c) {
|
||||
int n = 0
|
||||
while (n < max_attempts) {
|
||||
try {
|
||||
c()
|
||||
return
|
||||
} catch (err) {
|
||||
if ((n + 1) >= max_attempts) {
|
||||
throw err
|
||||
}
|
||||
sleep(power_base ** n)
|
||||
n++
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
21
README.md
21
README.md
|
@ -3,7 +3,7 @@
|
|||
[](https://linuxserver.io)
|
||||
|
||||
[](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
|
||||
[](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
|
||||
[](https://linuxserver.io/discord "realtime support / chat with the community and the team.")
|
||||
[](https://discourse.linuxserver.io "post on our community forum.")
|
||||
[](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
|
||||
[](https://github.com/linuxserver "view the source for all of our repositories.")
|
||||
|
@ -20,7 +20,7 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
|
|||
Find us at:
|
||||
|
||||
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
|
||||
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
|
||||
* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
|
||||
* [Discourse](https://discourse.linuxserver.io) - post on our community forum.
|
||||
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
|
||||
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
|
||||
|
@ -75,11 +75,17 @@ This image provides various versions that are available via tags. Please read th
|
|||
|
||||
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
|
||||
|
||||
## Non-Root Operation
|
||||
|
||||
This image can be run with a non-root user. For details please [read the docs](https://docs.linuxserver.io/misc/non-root/).
|
||||
|
||||
## Usage
|
||||
|
||||
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
|
||||
|
||||
>[!NOTE]
|
||||
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
|
||||
|
||||
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
|
||||
|
||||
```yaml
|
||||
|
@ -123,7 +129,7 @@ Containers are configured using parameters passed at runtime (such as those abov
|
|||
|
||||
| Parameter | Function |
|
||||
| :----: | --- |
|
||||
| `-p 6767` | Allows HTTP access to the internal webserver. |
|
||||
| `-p 6767:6767` | Allows HTTP access to the internal webserver. |
|
||||
| `-e PUID=1000` | for UserID - see below for explanation |
|
||||
| `-e PGID=1000` | for GroupID - see below for explanation |
|
||||
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
|
||||
|
@ -131,6 +137,7 @@ Containers are configured using parameters passed at runtime (such as those abov
|
|||
| `-v /movies` | Location of your movies |
|
||||
| `-v /tv` | Location of your TV Shows |
|
||||
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
|
||||
| `--user=1000:1000` | Run container with a non-root user. Please [read the docs](https://docs.linuxserver.io/misc/non-root/). |
|
||||
|
||||
## Environment variables from files (Docker secrets)
|
||||
|
||||
|
@ -268,7 +275,8 @@ Below are the instructions for updating containers:
|
|||
|
||||
### Image Update Notifications - Diun (Docker Image Update Notifier)
|
||||
|
||||
**tip**: We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
|
||||
>[!TIP]
|
||||
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
|
||||
|
||||
## Building locally
|
||||
|
||||
|
@ -283,16 +291,17 @@ docker build \
|
|||
-t lscr.io/linuxserver/bazarr:latest .
|
||||
```
|
||||
|
||||
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
|
||||
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
|
||||
|
||||
```bash
|
||||
docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
||||
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
|
||||
```
|
||||
|
||||
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
|
||||
|
||||
## Versions
|
||||
|
||||
* **24.12.24:** - Rebase to Alpine 3.21.
|
||||
* **24.06.24:** - Rebase to Alpine 3.20.
|
||||
* **23.12.23:** - Rebase to Alpine 3.19.
|
||||
* **19.09.23:** - Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar).
|
||||
|
|
|
@ -1,306 +1,306 @@
|
|||
NAME VERSION TYPE
|
||||
Simple Launcher 1.1.0.14 dotnet (+5 duplicates)
|
||||
alembic 1.13.1 python
|
||||
alpine-baselayout 3.6.5-r0 apk
|
||||
alpine-baselayout-data 3.6.5-r0 apk
|
||||
alpine-keys 2.4-r1 apk
|
||||
alpine-release 3.20.2-r0 apk
|
||||
alsa-lib 1.2.11-r0 apk
|
||||
aniso8601 9.0.1 python
|
||||
aom-libs 3.9.0-r0 apk
|
||||
apk-tools 2.14.4-r0 apk
|
||||
appdirs 1.4.4 python
|
||||
apprise 1.7.6 python
|
||||
apscheduler 3.10.4 python
|
||||
argparse 1.4.0 python
|
||||
attrs 23.2.0 python
|
||||
auditok 0.1.5 python
|
||||
autocommand 2.2.2 python
|
||||
babelfish 0.6.0 python
|
||||
backports-functools-lru-cache 2.0.0 python
|
||||
backports-tarfile 1.2.0 python
|
||||
backports-zoneinfo 0.2.1 python
|
||||
bash 5.2.26-r0 apk
|
||||
beautifulsoup4 4.12.3 python
|
||||
bidict 0.23.1 python
|
||||
blinker 1.7.0 python
|
||||
brotli-libs 1.1.0-r2 apk
|
||||
busybox 1.36.1-r29 apk
|
||||
busybox-binsh 1.36.1-r29 apk
|
||||
c-ares 1.28.1-r0 apk
|
||||
ca-certificates 20240705-r0 apk
|
||||
ca-certificates-bundle 20240705-r0 apk
|
||||
catatonit 0.2.0-r0 apk
|
||||
certifi 2024.2.2 python
|
||||
chardet 5.2.0 python
|
||||
charset-normalizer 3.3.2 python
|
||||
cjson 1.7.18-r0 apk
|
||||
click 8.1.7 python
|
||||
cloudscraper 1.2.58 python
|
||||
colorama 0.4.6 python
|
||||
commonmark 0.9.1 python
|
||||
coreutils 9.5-r1 apk
|
||||
coreutils-env 9.5-r1 apk
|
||||
coreutils-fmt 9.5-r1 apk
|
||||
coreutils-sha512sum 9.5-r1 apk
|
||||
curl 8.9.0-r0 apk
|
||||
dbus-libs 1.14.10-r1 apk
|
||||
decorator 5.1.1 python
|
||||
deep-translator 1.11.4 python
|
||||
dnspython 2.6.1 python
|
||||
dogpile-cache 1.3.2 python
|
||||
dynaconf 3.2.4 python
|
||||
enzyme 0.4.1 python
|
||||
fcache 0.5.2 python
|
||||
fese 0.2.9 python
|
||||
ffmpeg 6.1.1-r8 apk
|
||||
ffmpeg-libavcodec 6.1.1-r8 apk
|
||||
ffmpeg-libavdevice 6.1.1-r8 apk
|
||||
ffmpeg-libavfilter 6.1.1-r8 apk
|
||||
ffmpeg-libavformat 6.1.1-r8 apk
|
||||
ffmpeg-libavutil 6.1.1-r8 apk
|
||||
ffmpeg-libpostproc 6.1.1-r8 apk
|
||||
ffmpeg-libswresample 6.1.1-r8 apk
|
||||
ffmpeg-libswscale 6.1.1-r8 apk
|
||||
ffmpeg-python 0.2.0 python
|
||||
ffsubsync 0.4.25 python
|
||||
findutils 4.9.0-r5 apk
|
||||
flask 3.0.2 python
|
||||
flask-cors 4.0.0 python
|
||||
flask-migrate 4.0.5 python
|
||||
flask-restx 1.3.0 python
|
||||
flask-socketio 5.3.6 python
|
||||
flask-sqlalchemy 3.1.1 python
|
||||
fontconfig 2.15.0-r1 apk
|
||||
freetype 2.13.2-r0 apk
|
||||
fribidi 1.0.15-r0 apk
|
||||
ftfy 6.1.3 python
|
||||
future 1.0.0 python
|
||||
ga4mp 2.0.4 python
|
||||
gdbm 1.23-r1 apk
|
||||
giflib 5.2.2-r0 apk
|
||||
glib 2.80.2-r0 apk
|
||||
glslang-libs 1.3.261.1-r0 apk
|
||||
graphite2 1.3.14-r6 apk
|
||||
guess-language-spirit 0.5.3 python
|
||||
guessit 3.8.0 python
|
||||
h11 0.14.0 python
|
||||
harfbuzz 8.5.0-r0 apk
|
||||
html5lib 1.1 python
|
||||
hwdata-pci 0.382-r0 apk
|
||||
idna 3.6 python
|
||||
imath 3.1.11-r2 apk
|
||||
importlib-metadata 7.0.1 python
|
||||
importlib-metadata 8.0.0 python
|
||||
importlib-resources 6.1.2 python
|
||||
importlib-resources 6.4.0 python
|
||||
inflect 7.0.0 python
|
||||
inflect 7.3.1 python
|
||||
itsdangerous 2.1.2 python
|
||||
jaraco-context 5.3.0 python
|
||||
jaraco-functools 4.0.1 python
|
||||
jaraco-text 3.12.1 python
|
||||
jinja2 3.1.3 python
|
||||
jq 1.7.1-r0 apk
|
||||
js2py 0.74 python
|
||||
json-tricks 3.17.3 python
|
||||
jsonschema 4.17.3 python
|
||||
knowit 0.5.2 python
|
||||
lame-libs 3.100-r5 apk
|
||||
lcms2 2.16-r0 apk
|
||||
libSvtAv1Enc 2.0.0-r1 apk
|
||||
libacl 2.3.2-r0 apk
|
||||
libass 0.17.2-r0 apk
|
||||
libasyncns 0.8-r3 apk
|
||||
libattr 2.5.2-r0 apk
|
||||
libblkid 2.40.1-r1 apk
|
||||
libbluray 1.3.4-r1 apk
|
||||
libbsd 0.12.2-r0 apk
|
||||
libbz2 1.0.8-r6 apk
|
||||
libcrypto3 3.3.1-r3 apk
|
||||
libcurl 8.9.0-r0 apk
|
||||
libdav1d 1.4.2-r0 apk
|
||||
libdovi 3.3.0-r0 apk
|
||||
libdrm 2.4.120-r0 apk
|
||||
libeconf 0.6.3-r0 apk
|
||||
libexpat 2.6.2-r0 apk
|
||||
libffi 3.4.6-r0 apk
|
||||
libflac 1.4.3-r1 apk
|
||||
libgcc 13.2.1_git20240309-r0 apk
|
||||
libgcrypt 1.10.3-r0 apk
|
||||
libgomp 13.2.1_git20240309-r0 apk
|
||||
libgpg-error 1.49-r0 apk
|
||||
libhwy 1.0.7-r0 apk
|
||||
libidn2 2.3.7-r0 apk
|
||||
libintl 0.22.5-r0 apk
|
||||
libjpeg-turbo 3.0.3-r0 apk
|
||||
libjxl 0.10.2-r0 apk
|
||||
libltdl 2.4.7-r3 apk
|
||||
libmd 1.1.0-r0 apk
|
||||
libmediainfo 24.04-r0 apk
|
||||
libmount 2.40.1-r1 apk
|
||||
libncursesw 6.4_p20240420-r0 apk
|
||||
libogg 1.3.5-r5 apk
|
||||
libopenmpt 0.7.7-r0 apk
|
||||
libpanelw 6.4_p20240420-r0 apk
|
||||
libpciaccess 0.18.1-r0 apk
|
||||
libplacebo 6.338.2-r1 apk
|
||||
libpng 1.6.43-r0 apk
|
||||
libproc2 4.0.4-r0 apk
|
||||
libpsl 0.21.5-r1 apk
|
||||
libpulse 17.0-r0 apk
|
||||
librist 0.2.10-r1 apk
|
||||
libsharpyuv 1.3.2-r0 apk
|
||||
libsndfile 1.2.2-r0 apk
|
||||
libsodium 1.0.19-r0 apk
|
||||
libsrt 1.5.3-r0 apk
|
||||
libssh 0.10.6-r0 apk
|
||||
libssl3 3.3.1-r3 apk
|
||||
libstdc++ 13.2.1_git20240309-r0 apk
|
||||
libtheora 1.1.1-r18 apk
|
||||
libunibreak 6.1-r0 apk
|
||||
libunistring 1.2-r0 apk
|
||||
libva 2.21.0-r0 apk
|
||||
libvdpau 1.5-r3 apk
|
||||
libvorbis 1.3.7-r2 apk
|
||||
libvpx 1.14.1-r0 apk
|
||||
libwebp 1.3.2-r0 apk
|
||||
libwebpmux 1.3.2-r0 apk
|
||||
libx11 1.8.9-r1 apk
|
||||
libxau 1.0.11-r4 apk
|
||||
libxcb 1.16.1-r0 apk
|
||||
libxdmcp 1.1.5-r1 apk
|
||||
libxext 1.3.6-r2 apk
|
||||
libxfixes 6.0.1-r4 apk
|
||||
libxml2 2.12.7-r0 apk
|
||||
libxslt 1.1.39-r1 apk
|
||||
libzen 0.4.41-r0 apk
|
||||
libzmq 4.3.5-r2 apk
|
||||
lilv-libs 0.24.24-r1 apk
|
||||
linux-pam 1.6.0-r0 apk
|
||||
lxml 4.9.4 python
|
||||
mako 1.3.2 python
|
||||
markdown 3.5.2 python
|
||||
markupsafe 2.1.5 python
|
||||
mbedtls 3.6.0-r0 apk
|
||||
mediainfo 24.04-r0 apk
|
||||
more-itertools 10.3.0 python
|
||||
mpdecimal 4.0.0-r0 apk
|
||||
mpg123-libs 1.32.6-r0 apk
|
||||
msgpack 1.0.7 python
|
||||
musl 1.2.5-r0 apk
|
||||
musl-utils 1.2.5-r0 apk
|
||||
my-test-package 1.0 python
|
||||
ncurses-terminfo-base 6.4_p20240420-r0 apk
|
||||
netcat-openbsd 1.226-r0 apk
|
||||
nghttp2-libs 1.62.1-r0 apk
|
||||
numactl 2.0.18-r0 apk
|
||||
numpy 2.0.1 python
|
||||
oauthlib 3.2.2 python
|
||||
onevpl-libs 2023.3.1-r2 apk
|
||||
oniguruma 6.9.9-r0 apk
|
||||
openexr-libiex 3.1.13-r1 apk
|
||||
openexr-libilmthread 3.1.13-r1 apk
|
||||
openexr-libopenexr 3.1.13-r1 apk
|
||||
opus 1.5.2-r0 apk
|
||||
orc 0.4.37-r0 apk
|
||||
ordered-set 4.1.0 python
|
||||
packaging 24.1 python
|
||||
pcre2 10.43-r0 apk
|
||||
pillow 10.4.0 python
|
||||
pip 24.2 python
|
||||
platformdirs 4.2.0 python
|
||||
platformdirs 4.2.2 python
|
||||
procps-ng 4.0.4-r0 apk
|
||||
psycopg2-binary 2.9.9 python
|
||||
pyc 3.12.3-r1 apk
|
||||
pycountry 23.12.11 python
|
||||
pydantic 1.10.14 python
|
||||
pygments 2.17.2 python
|
||||
pyjsparser 2.7.1 python
|
||||
pymediainfo 6.1.0 python
|
||||
pyparsing 3.1.1 python
|
||||
pyrsistent 0.20.0 python
|
||||
pysocks 1.7.1 python
|
||||
pysrt 1.1.2 python
|
||||
pysubs2 1.6.1 python
|
||||
python-anticaptcha 1.0.0 python
|
||||
python-dateutil 2.8.2 python
|
||||
python-engineio 4.9.0 python
|
||||
python-socketio 5.11.1 python
|
||||
python3 3.12.3-r1 apk
|
||||
python3-pyc 3.12.3-r1 apk
|
||||
python3-pycache-pyc0 3.12.3-r1 apk
|
||||
pytz 2024.1 python
|
||||
pytz-deprecation-shim 0.1.0.post0 python
|
||||
pyyaml 6.0.1 python
|
||||
rarfile 4.1 python
|
||||
rav1e-libs 0.7.1-r0 apk
|
||||
readline 8.2.10-r0 apk
|
||||
rebulk 3.2.0 python
|
||||
referencing 0.23.0 python
|
||||
requests 2.31.0 python
|
||||
requests-oauthlib 1.3.1 python
|
||||
requests-toolbelt 1.0.0 python
|
||||
retry 0.9.2 python
|
||||
rich 13.7.0 python
|
||||
scanelf 1.3.7-r2 apk
|
||||
sdl2 2.28.5-r1 apk
|
||||
semver 3.0.2 python
|
||||
serd-libs 0.32.2-r0 apk
|
||||
setuptools 72.1.0 python
|
||||
shaderc 2024.0-r0 apk
|
||||
shadow 4.15.1-r0 apk
|
||||
signalrcore 0.9.5 python
|
||||
simple-websocket 1.0.0 python
|
||||
six 1.16.0 python
|
||||
skalibs 2.14.1.1-r0 apk
|
||||
sord-libs 0.16.16-r0 apk
|
||||
soupsieve 2.3.2.post1 python
|
||||
soxr 0.1.3-r7 apk
|
||||
speexdsp 1.2.1-r2 apk
|
||||
spirv-tools 1.3.261.1-r0 apk
|
||||
sqlalchemy 2.0.27 python
|
||||
sqlite-libs 3.45.3-r1 apk
|
||||
sratom 0.6.16-r0 apk
|
||||
srt 3.5.3 python
|
||||
ssl_client 1.36.1-r29 apk
|
||||
stevedore 5.2.0 python
|
||||
tdb-libs 1.4.9-r1 apk
|
||||
tinyxml2 10.0.0-r0 apk
|
||||
tld 0.13 python
|
||||
tomli 2.0.1 python
|
||||
tqdm 4.66.2 python
|
||||
trakit 0.2.1 python
|
||||
typeguard 4.3.0 python
|
||||
typing-extensions 4.10.0 python
|
||||
typing-extensions 4.12.2 python
|
||||
tzdata 2024.1 python
|
||||
tzdata 2024a-r1 apk
|
||||
tzlocal 5.2 python
|
||||
unidecode 1.3.8 python
|
||||
urllib3 2.2.1 python
|
||||
utmps-libs 0.1.2.2-r1 apk
|
||||
v4l-utils-libs 1.24.1-r1 apk
|
||||
vidstab 1.1.1-r0 apk
|
||||
vulkan-loader 1.3.261.1-r0 apk
|
||||
waitress 3.0.0 python
|
||||
wayland-libs-client 1.22.0-r4 apk
|
||||
wcwidth 0.2.13 python
|
||||
webencodings 0.5.1 python
|
||||
webrtcvad-wheels 2.0.11.post1 python
|
||||
websocket-client 1.7.0 python
|
||||
werkzeug 3.0.1 python
|
||||
wheel 0.43.0 python (+1 duplicate)
|
||||
whichcraft 0.6.1 python
|
||||
wsproto 1.2.0 python
|
||||
x264-libs 0.164_git20231001-r0 apk
|
||||
x265-libs 3.6-r0 apk
|
||||
xvidcore 1.3.7-r2 apk
|
||||
xz-libs 5.6.1-r3 apk
|
||||
zimg 3.0.5-r2 apk
|
||||
zipp 3.17.0 python
|
||||
zipp 3.19.2 python
|
||||
zix-libs 0.4.2-r0 apk
|
||||
zlib 1.3.1-r1 apk
|
||||
zstd-libs 1.5.6-r0 apk
|
||||
NAME VERSION TYPE
|
||||
acl-libs 2.3.2-r1 apk
|
||||
alembic 1.13.1 python
|
||||
alpine-baselayout 3.6.8-r1 apk
|
||||
alpine-baselayout-data 3.6.8-r1 apk
|
||||
alpine-keys 2.5-r0 apk
|
||||
alpine-release 3.21.3-r0 apk
|
||||
alsa-lib 1.2.12-r0 apk
|
||||
aniso8601 9.0.1 python
|
||||
aom-libs 3.11.0-r0 apk
|
||||
apk-tools 2.14.6-r3 apk
|
||||
appdirs 1.4.4 python
|
||||
apprise 1.7.6 python
|
||||
apscheduler 3.10.4 python
|
||||
attrs 23.2.0 python
|
||||
auditok 0.1.5 python
|
||||
autocommand 2.2.2 python
|
||||
babelfish 0.6.0 python
|
||||
backports-functools-lru-cache 2.0.0 python
|
||||
backports-tarfile 1.2.0 python
|
||||
backports-zoneinfo 0.2.1 python
|
||||
bash 5.2.37-r0 apk
|
||||
beautifulsoup4 4.12.3 python
|
||||
bidict 0.23.1 python
|
||||
blinker 1.7.0 python
|
||||
brotli-libs 1.1.0-r2 apk
|
||||
busybox 1.37.0-r12 apk
|
||||
busybox-binsh 1.37.0-r12 apk
|
||||
c-ares 1.34.5-r0 apk
|
||||
ca-certificates 20241121-r1 apk
|
||||
ca-certificates-bundle 20241121-r1 apk
|
||||
catatonit 0.2.0-r0 apk
|
||||
certifi 2024.2.2 python
|
||||
chardet 5.2.0 python
|
||||
charset-normalizer 3.3.2 python
|
||||
cjson 1.7.18-r0 apk
|
||||
click 8.1.7 python
|
||||
cloudscraper 1.2.58 python
|
||||
colorama 0.4.6 python
|
||||
commonmark 0.9.1 python
|
||||
coreutils 9.5-r2 apk
|
||||
coreutils-env 9.5-r2 apk
|
||||
coreutils-fmt 9.5-r2 apk
|
||||
coreutils-sha512sum 9.5-r2 apk
|
||||
curl 8.12.1-r1 apk
|
||||
dbus-libs 1.14.10-r4 apk
|
||||
decorator 5.1.1 python
|
||||
deep-translator 1.11.4 python
|
||||
dnspython 2.6.1 python
|
||||
dogpile-cache 1.3.2 python
|
||||
dynaconf 3.2.4 python
|
||||
enzyme 0.4.1 python
|
||||
fcache 0.5.2 python
|
||||
fese 0.3.0 python
|
||||
ffmpeg 6.1.2-r1 apk
|
||||
ffmpeg-libavcodec 6.1.2-r1 apk
|
||||
ffmpeg-libavdevice 6.1.2-r1 apk
|
||||
ffmpeg-libavfilter 6.1.2-r1 apk
|
||||
ffmpeg-libavformat 6.1.2-r1 apk
|
||||
ffmpeg-libavutil 6.1.2-r1 apk
|
||||
ffmpeg-libpostproc 6.1.2-r1 apk
|
||||
ffmpeg-libswresample 6.1.2-r1 apk
|
||||
ffmpeg-libswscale 6.1.2-r1 apk
|
||||
ffmpeg-python 0.2.0 python
|
||||
ffsubsync 0.4.25 python
|
||||
findutils 4.10.0-r0 apk
|
||||
flask 3.0.2 python
|
||||
flask-cors 4.0.0 python
|
||||
flask-migrate 4.0.5 python
|
||||
flask-restx 1.3.0 python
|
||||
flask-socketio 5.3.6 python
|
||||
flask-sqlalchemy 3.1.1 python
|
||||
fontconfig 2.15.0-r1 apk
|
||||
freetype 2.13.3-r0 apk
|
||||
fribidi 1.0.16-r0 apk
|
||||
ftfy 6.1.3 python
|
||||
future 1.0.0 python
|
||||
ga4mp 2.0.4 python
|
||||
gdbm 1.24-r0 apk
|
||||
giflib 5.2.2-r1 apk
|
||||
glib 2.82.5-r0 apk
|
||||
glslang-libs 1.3.296.0-r0 apk
|
||||
graphite2 1.3.14-r6 apk
|
||||
guess-language-spirit 0.5.3 python
|
||||
guessit 3.8.0 python
|
||||
h11 0.14.0 python
|
||||
harfbuzz 9.0.0-r1 apk
|
||||
html5lib 1.1 python
|
||||
hwdata-pci 0.393-r0 apk
|
||||
idna 3.6 python
|
||||
imath 3.1.12-r0 apk
|
||||
importlib-metadata 7.0.1 python
|
||||
importlib-metadata 8.0.0 python
|
||||
importlib-resources 6.1.2 python
|
||||
inflect 7.0.0 python
|
||||
inflect 7.3.1 python
|
||||
itsdangerous 2.1.2 python
|
||||
jaraco-collections 5.1.0 python
|
||||
jaraco-context 5.3.0 python
|
||||
jaraco-functools 4.0.1 python
|
||||
jaraco-text 3.12.1 python
|
||||
jinja2 3.1.3 python
|
||||
jq 1.7.1-r0 apk
|
||||
js2py 0.74 python
|
||||
json-tricks 3.17.3 python
|
||||
jsonschema 4.17.3 python
|
||||
knowit 0.5.3 python
|
||||
lame-libs 3.100-r5 apk
|
||||
lcms2 2.16-r0 apk
|
||||
libSvtAv1Enc 2.2.1-r0 apk
|
||||
libass 0.17.3-r0 apk
|
||||
libasyncns 0.8-r4 apk
|
||||
libattr 2.5.2-r2 apk
|
||||
libblkid 2.40.4-r0 apk
|
||||
libbluray 1.3.4-r1 apk
|
||||
libbsd 0.12.2-r0 apk
|
||||
libbz2 1.0.8-r6 apk
|
||||
libcrypto3 3.3.3-r0 apk
|
||||
libcurl 8.12.1-r1 apk
|
||||
libdav1d 1.5.0-r0 apk
|
||||
libdeflate 1.22-r0 apk
|
||||
libdovi 3.3.1-r0 apk
|
||||
libdrm 2.4.123-r1 apk
|
||||
libeconf 0.6.3-r0 apk
|
||||
libexpat 2.7.0-r0 apk
|
||||
libffi 3.4.7-r0 apk
|
||||
libflac 1.4.3-r1 apk
|
||||
libgcc 14.2.0-r4 apk
|
||||
libgcrypt 1.10.3-r1 apk
|
||||
libgomp 14.2.0-r4 apk
|
||||
libgpg-error 1.51-r0 apk
|
||||
libhwy 1.0.7-r0 apk
|
||||
libidn2 2.3.7-r0 apk
|
||||
libintl 0.22.5-r0 apk
|
||||
libjpeg-turbo 3.0.4-r0 apk
|
||||
libjxl 0.10.4-r0 apk
|
||||
libltdl 2.4.7-r3 apk
|
||||
libmd 1.1.0-r0 apk
|
||||
libmediainfo 24.11-r0 apk
|
||||
libmount 2.40.4-r0 apk
|
||||
libncursesw 6.5_p20241006-r3 apk
|
||||
libogg 1.3.5-r5 apk
|
||||
libopenmpt 0.7.12-r0 apk
|
||||
libpanelw 6.5_p20241006-r3 apk
|
||||
libpciaccess 0.18.1-r0 apk
|
||||
libplacebo 6.338.2-r3 apk
|
||||
libpng 1.6.47-r0 apk
|
||||
libproc2 4.0.4-r2 apk
|
||||
libpsl 0.21.5-r3 apk
|
||||
libpulse 17.0-r4 apk
|
||||
librist 0.2.10-r1 apk
|
||||
libsharpyuv 1.4.0-r0 apk
|
||||
libsndfile 1.2.2-r2 apk
|
||||
libsodium 1.0.20-r0 apk
|
||||
libsrt 1.5.3-r0 apk
|
||||
libssh 0.11.1-r0 apk
|
||||
libssl3 3.3.3-r0 apk
|
||||
libstdc++ 14.2.0-r4 apk
|
||||
libtheora 1.1.1-r18 apk
|
||||
libunibreak 6.1-r0 apk
|
||||
libunistring 1.2-r0 apk
|
||||
libva 2.22.0-r1 apk
|
||||
libvdpau 1.5-r4 apk
|
||||
libvorbis 1.3.7-r2 apk
|
||||
libvpx 1.15.0-r0 apk
|
||||
libwebp 1.4.0-r0 apk
|
||||
libwebpmux 1.4.0-r0 apk
|
||||
libx11 1.8.10-r0 apk
|
||||
libxau 1.0.11-r4 apk
|
||||
libxcb 1.16.1-r0 apk
|
||||
libxdmcp 1.1.5-r1 apk
|
||||
libxext 1.3.6-r2 apk
|
||||
libxfixes 6.0.1-r4 apk
|
||||
libxml2 2.13.4-r5 apk
|
||||
libxslt 1.1.42-r2 apk
|
||||
libzen 0.4.41-r0 apk
|
||||
libzmq 4.3.5-r2 apk
|
||||
lilv-libs 0.24.24-r1 apk
|
||||
linux-pam 1.6.1-r1 apk
|
||||
lxml 4.9.4 python
|
||||
mako 1.3.2 python
|
||||
markdown 3.5.2 python
|
||||
markupsafe 2.1.5 python
|
||||
mbedtls 3.6.3-r0 apk
|
||||
mediainfo 24.11-r0 apk
|
||||
more-itertools 10.3.0 python
|
||||
mpdecimal 4.0.0-r0 apk
|
||||
mpg123-libs 1.32.9-r0 apk
|
||||
msgpack 1.0.7 python
|
||||
musl 1.2.5-r9 apk
|
||||
musl-utils 1.2.5-r9 apk
|
||||
my-test-package 1.0 python
|
||||
ncurses-terminfo-base 6.5_p20241006-r3 apk
|
||||
netcat-openbsd 1.226.1.1-r0 apk
|
||||
nghttp2-libs 1.64.0-r0 apk
|
||||
numactl 2.0.18-r0 apk
|
||||
numpy 2.2.4 python
|
||||
oauthlib 3.2.2 python
|
||||
onevpl-libs 2023.3.1-r2 apk
|
||||
oniguruma 6.9.9-r0 apk
|
||||
openexr-libiex 3.3.2-r0 apk
|
||||
openexr-libilmthread 3.3.2-r0 apk
|
||||
openexr-libopenexr 3.3.2-r0 apk
|
||||
openexr-libopenexrcore 3.3.2-r0 apk
|
||||
opus 1.5.2-r1 apk
|
||||
orc 0.4.40-r1 apk
|
||||
packaging 24.2 python
|
||||
pcre2 10.43-r0 apk
|
||||
pillow 11.2.1 python
|
||||
pip 25.0.1 python
|
||||
platformdirs 4.2.0 python
|
||||
platformdirs 4.2.2 python
|
||||
procps-ng 4.0.4-r2 apk
|
||||
psycopg2-binary 2.9.10 python
|
||||
pyc 3.12.10-r0 apk
|
||||
pycountry 23.12.11 python
|
||||
pydantic 1.10.14 python
|
||||
pygments 2.17.2 python
|
||||
pyjsparser 2.7.1 python
|
||||
pymediainfo 6.1.0 python
|
||||
pyparsing 3.1.1 python
|
||||
pyrsistent 0.20.0 python
|
||||
pysocks 1.7.1 python
|
||||
pysrt 1.1.2 python
|
||||
pysubs2 1.7.2 python
|
||||
python-anticaptcha 1.0.0 python
|
||||
python-dateutil 2.8.2 python
|
||||
python-engineio 4.9.0 python
|
||||
python-socketio 5.11.1 python
|
||||
python3 3.12.10-r0 apk
|
||||
python3-pyc 3.12.10-r0 apk
|
||||
python3-pycache-pyc0 3.12.10-r0 apk
|
||||
pytz 2024.1 python
|
||||
pytz-deprecation-shim 0.1.0.post0 python
|
||||
pyyaml 6.0.1 python
|
||||
rarfile 4.1 python
|
||||
rav1e-libs 0.7.1-r0 apk
|
||||
readline 8.2.13-r0 apk
|
||||
rebulk 3.2.0 python
|
||||
referencing 0.23.0 python
|
||||
requests 2.31.0 python
|
||||
requests-oauthlib 1.3.1 python
|
||||
requests-toolbelt 1.0.0 python
|
||||
retry 0.9.2 python
|
||||
rich 13.7.0 python
|
||||
scanelf 1.3.8-r1 apk
|
||||
sdl2 2.30.9-r0 apk
|
||||
semver 3.0.2 python
|
||||
serd-libs 0.32.2-r0 apk
|
||||
setuptools 78.1.0 python
|
||||
shaderc 2024.0-r2 apk
|
||||
shadow 4.16.0-r1 apk
|
||||
signalrcore 0.9.5 python
|
||||
simple-websocket 1.0.0 python
|
||||
six 1.16.0 python
|
||||
skalibs-libs 2.14.3.0-r0 apk
|
||||
sord-libs 0.16.16-r0 apk
|
||||
soupsieve 2.3.2.post1 python
|
||||
soxr 0.1.3-r7 apk
|
||||
speexdsp 1.2.1-r2 apk
|
||||
spirv-tools 1.3.296.0-r0 apk
|
||||
sqlalchemy 2.0.27 python
|
||||
sqlite-libs 3.48.0-r1 apk
|
||||
sratom 0.6.16-r0 apk
|
||||
srt 3.5.3 python
|
||||
ssl_client 1.37.0-r12 apk
|
||||
stevedore 5.2.0 python
|
||||
tdb-libs 1.4.12-r0 apk
|
||||
textdistance 4.6.2 python
|
||||
tinyxml2 10.0.0-r0 apk
|
||||
tld 0.13 python
|
||||
tomli 2.0.1 python
|
||||
tqdm 4.66.2 python
|
||||
trakit 0.2.1 python
|
||||
typeguard 4.3.0 python
|
||||
typing-extensions 4.10.0 python
|
||||
typing-extensions 4.12.2 python
|
||||
tzdata 2024.1 python
|
||||
tzdata 2025b-r0 apk
|
||||
tzlocal 5.2 python
|
||||
unidecode 1.3.8 python
|
||||
urllib3 2.2.1 python
|
||||
utmps-libs 0.1.2.3-r2 apk
|
||||
v4l-utils-libs 1.28.1-r1 apk
|
||||
vidstab 1.1.1-r0 apk
|
||||
vulkan-loader 1.3.296.0-r0 apk
|
||||
waitress 3.0.0 python
|
||||
wayland-libs-client 1.23.1-r0 apk
|
||||
wcwidth 0.2.13 python
|
||||
webencodings 0.5.1 python
|
||||
webrtcvad-wheels 2.0.14 python
|
||||
websocket-client 1.7.0 python
|
||||
werkzeug 3.0.1 python
|
||||
wheel 0.45.1 python (+1 duplicate)
|
||||
whichcraft 0.6.1 python
|
||||
wsproto 1.2.0 python
|
||||
x264-libs 0.164.3108-r0 apk
|
||||
x265-libs 3.6-r0 apk
|
||||
xvidcore 1.3.7-r2 apk
|
||||
xz-libs 5.6.3-r1 apk
|
||||
zimg 3.0.5-r2 apk
|
||||
zipp 3.17.0 python
|
||||
zipp 3.19.2 python
|
||||
zix-libs 0.4.2-r0 apk
|
||||
zlib 1.3.1-r2 apk
|
||||
zstd-libs 1.5.6-r2 apk
|
||||
|
|
|
@ -6,6 +6,7 @@ project_url: "https://www.bazarr.media/"
|
|||
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/bazarr.png"
|
||||
project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you."
|
||||
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
|
||||
project_categories: "Media Management"
|
||||
# supported architectures
|
||||
available_architectures:
|
||||
- {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
|
||||
|
@ -18,7 +19,7 @@ development_versions_items:
|
|||
param_container_name: "{{ project_name }}"
|
||||
param_usage_include_vols: true
|
||||
param_volumes:
|
||||
- { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files" }
|
||||
- {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files"}
|
||||
param_usage_include_ports: true
|
||||
param_ports:
|
||||
- {external_port: "6767", internal_port: "6767", port_desc: "Allows HTTP access to the internal webserver."}
|
||||
|
@ -26,16 +27,55 @@ opt_param_usage_include_vols: true
|
|||
opt_param_volumes:
|
||||
- {vol_path: "/movies", vol_host_path: "/path/to/movies", desc: "Location of your movies"}
|
||||
- {vol_path: "/tv", vol_host_path: "/path/to/tv", desc: "Location of your TV Shows"}
|
||||
|
||||
readonly_supported: true
|
||||
|
||||
nonroot_supported: true
|
||||
# application setup block
|
||||
app_setup_block_enabled: true
|
||||
app_setup_block: |
|
||||
- Once running the URL will be `http://<host-ip>:6767`.
|
||||
- You must complete all the setup parameters in the webui before you can save the config.
|
||||
# init diagram
|
||||
init_diagram: |
|
||||
"bazarr:latest": {
|
||||
docker-mods
|
||||
base {
|
||||
fix-attr +\nlegacy cont-init
|
||||
}
|
||||
docker-mods -> base
|
||||
legacy-services
|
||||
custom services
|
||||
init-services -> legacy-services
|
||||
init-services -> custom services
|
||||
custom services -> legacy-services
|
||||
legacy-services -> ci-service-check
|
||||
init-migrations -> init-adduser
|
||||
init-config -> init-bazarr-config
|
||||
init-os-end -> init-config
|
||||
init-bazarr-config -> init-config-end
|
||||
init-config -> init-config-end
|
||||
init-crontab-config -> init-config-end
|
||||
init-config -> init-crontab-config
|
||||
init-mods-end -> init-custom-files
|
||||
base -> init-envfile
|
||||
base -> init-migrations
|
||||
init-config-end -> init-mods
|
||||
init-mods-package-install -> init-mods-end
|
||||
init-mods -> init-mods-package-install
|
||||
init-adduser -> init-os-end
|
||||
init-envfile -> init-os-end
|
||||
init-custom-files -> init-services
|
||||
init-services -> svc-bazarr
|
||||
svc-bazarr -> legacy-services
|
||||
init-services -> svc-cron
|
||||
svc-cron -> legacy-services
|
||||
}
|
||||
Base Images: {
|
||||
"baseimage-alpine:3.21"
|
||||
}
|
||||
"bazarr:latest" <- Base Images
|
||||
# changelog
|
||||
changelogs:
|
||||
- {date: "24.12.24:", desc: "Rebase to Alpine 3.21."}
|
||||
- {date: "24.06.24:", desc: "Rebase to Alpine 3.20."}
|
||||
- {date: "23.12.23:", desc: "Rebase to Alpine 3.19."}
|
||||
- {date: "19.09.23:", desc: "Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar)."}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/with-contenv bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
# permissions
|
||||
lsiown -R abc:abc \
|
||||
/config
|
||||
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
|
||||
lsiown -R abc:abc \
|
||||
/config
|
||||
fi
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
#!/usr/bin/with-contenv bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
exec \
|
||||
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 6767" \
|
||||
cd /app/bazarr/bin s6-setuidgid abc python3 /app/bazarr/bin/bazarr.py --no-update --config /config
|
||||
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
|
||||
exec \
|
||||
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 6767" \
|
||||
cd /app/bazarr/bin s6-setuidgid abc python3 /app/bazarr/bin/bazarr.py --no-update --config /config
|
||||
else
|
||||
exec \
|
||||
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 6767" \
|
||||
cd /app/bazarr/bin python3 /app/bazarr/bin/bazarr.py --no-update --config /config
|
||||
fi
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue