Compare commits

..

69 Commits

Author SHA1 Message Date
LinuxServer-CI
0278dd45e5 Bot Updating Package Versions 2023-04-28 19:23:35 +00:00
LinuxServer-CI
344d7be01e Bot Updating Templated Files 2023-04-28 19:16:04 +00:00
LinuxServer-CI
cbe03771ab Bot Updating Templated Files 2023-04-28 19:15:03 +00:00
LinuxServer-CI
5478aec8ed Bot Updating Templated Files 2023-04-28 19:14:04 +00:00
aptalca
2f8e00fadb Merge pull request #129 from linuxserver/js-deprecate
deprecate js builds
2023-04-28 15:13:02 -04:00
aptalca
f2e0483944 deprecate js builds 2023-04-28 14:40:54 -04:00
LinuxServer-CI
bf8f621a48 Bot Updating Templated Files 2023-04-28 13:30:45 -05:00
LinuxServer-CI
0955a2d617 Bot Updating Templated Files 2023-04-28 13:28:59 -05:00
LinuxServer-CI
67e1afa136 Bot Updating Package Versions 2023-04-21 20:35:02 +02:00
LinuxServer-CI
c3f32495f0 Bot Updating Templated Files 2023-04-02 10:00:54 +02:00
LinuxServer-CI
01e3907bf4 Bot Updating Templated Files 2023-04-02 09:59:12 +02:00
LinuxServer-CI
078e14b364 Bot Updating Templated Files 2023-04-02 09:57:36 +02:00
LinuxServer-CI
5be9ac628e Bot Updating Package Versions 2023-03-05 02:05:50 -06:00
LinuxServer-CI
4affd0d62c Bot Updating Templated Files 2023-03-05 01:57:21 -06:00
LinuxServer-CI
335bcf8341 Bot Updating Templated Files 2023-02-12 08:58:31 +01:00
LinuxServer-CI
9d6a33a016 Bot Updating Templated Files 2023-02-12 08:57:13 +01:00
LinuxServer-CI
ec7a36b9f3 Bot Updating Templated Files 2022-12-04 02:00:12 -06:00
LinuxServer-CI
74bd847b3d Bot Updating Templated Files 2022-12-04 01:58:46 -06:00
LinuxServer-CI
41aa6f10b3 Bot Updating Templated Files 2022-12-04 08:57:22 +01:00
LinuxServer-CI
d457f2be3f Bot Updating Package Versions 2022-11-13 02:05:38 -06:00
LinuxServer-CI
3e30842078 Bot Updating Templated Files 2022-11-13 01:57:15 -06:00
LinuxServer-CI
069e3aa6d1 Bot Updating Package Versions 2022-10-09 03:02:03 -05:00
LinuxServer-CI
ccbb8d8dc0 Bot Updating Templated Files 2022-09-18 02:57:19 -05:00
LinuxServer-CI
2ab82cba59 Bot Updating Package Versions 2022-09-04 03:01:42 -05:00
LinuxServer-CI
91583d6728 Bot Updating Package Versions 2022-08-28 03:01:06 -05:00
LinuxServer-CI
6e19a94f0f Bot Updating Package Versions 2022-08-21 10:02:32 +02:00
LinuxServer-CI
1b68b9036b Bot Updating Package Versions 2022-08-14 03:01:36 -05:00
LinuxServer-CI
2111014149 Bot Updating Package Versions 2022-08-07 10:01:48 +02:00
LinuxServer-CI
2ddc260e34 Bot Updating Package Versions 2022-07-24 03:02:42 -05:00
LinuxServer-CI
02dcbde116 Bot Updating Package Versions 2022-07-17 10:02:06 +02:00
LinuxServer-CI
f32bc7b0b3 Bot Updating Package Versions 2022-07-03 03:01:22 -05:00
LinuxServer-CI
3c321e2dc0 Bot Updating Package Versions 2022-05-22 03:01:24 -05:00
LinuxServer-CI
d78a0a9cbd Bot Updating Templated Files 2022-05-08 02:57:12 -05:00
LinuxServer-CI
5ef18187f9 Bot Updating Templated Files 2022-05-01 02:58:43 -05:00
LinuxServer-CI
48fe16b9fe Bot Updating Templated Files 2022-05-01 02:57:23 -05:00
LinuxServer-CI
3ca9e7e601 Bot Updating Package Versions 2022-04-17 10:02:04 +02:00
LinuxServer-CI
f6439f3f18 Bot Updating Package Versions 2022-04-10 10:02:12 +02:00
LinuxServer-CI
b2acea71de Bot Updating Package Versions 2022-04-03 10:02:35 +02:00
LinuxServer-CI
7e152e0aa3 Bot Updating Package Versions 2022-03-27 10:02:35 +02:00
LinuxServer-CI
67c8e3b1ab Bot Updating Package Versions 2022-02-13 09:00:54 +01:00
LinuxServer-CI
367a8fce2e Bot Updating Package Versions 2022-01-30 09:02:15 +01:00
LinuxServer-CI
198df0f24c Bot Updating Templated Files 2021-12-19 08:58:15 +01:00
LinuxServer-CI
e6fc9f23f5 Bot Updating Templated Files 2021-12-19 08:57:05 +01:00
LinuxServer-CI
81194dfc68 Bot Updating Package Versions 2021-11-21 09:01:07 +01:00
LinuxServer-CI
6a0c2c80eb Bot Updating Package Versions 2021-10-31 09:02:50 +01:00
LinuxServer-CI
c2143f0bba Bot Updating Package Versions 2021-10-24 10:02:15 +02:00
LinuxServer-CI
288a503f60 Bot Updating Package Versions 2021-10-17 10:01:40 +02:00
LinuxServer-CI
ee2af604e8 Bot Updating Package Versions 2021-10-10 10:01:53 +02:00
LinuxServer-CI
1c25f645f9 Bot Updating Package Versions 2021-10-03 10:15:27 +02:00
LinuxServer-CI
aabb572def Bot Updating Templated Files 2021-10-03 09:58:23 +02:00
LinuxServer-CI
3849c6174d Bot Updating Templated Files 2021-10-03 09:57:23 +02:00
LinuxServer-CI
120996c9e9 Bot Updating Package Versions 2021-09-05 10:01:12 +02:00
LinuxServer-CI
497627bf1f Bot Updating Package Versions 2021-08-29 10:05:56 +02:00
LinuxServer-CI
c5600a4a45 Bot Updating Templated Files 2021-08-29 09:57:02 +02:00
LinuxServer-CI
e972541171 Bot Updating Package Versions 2021-08-15 10:12:49 +02:00
LinuxServer-CI
7ffefd21e1 Bot Updating Package Versions 2021-08-08 10:03:57 +02:00
LinuxServer-CI
f6504b0eeb Bot Updating Package Versions 2021-08-01 10:03:44 +02:00
LinuxServer-CI
88d1c5e306 Bot Updating Templated Files 2021-07-04 03:57:58 -04:00
LinuxServer-CI
22f2e1e4e6 Bot Updating Templated Files 2021-07-04 03:56:58 -04:00
LinuxServer-CI
f2087a0f85 Bot Updating Package Versions 2021-06-13 04:40:39 -04:00
LinuxServer-CI
1a85f2a67a Bot Updating Package Versions 2021-04-21 04:19:02 -04:00
LinuxServer-CI
5d1520a133 Bot Updating Templated Files 2021-04-18 03:59:14 -04:00
LinuxServer-CI
675633a635 Bot Updating Templated Files 2021-04-18 07:57:53 +00:00
LinuxServer-CI
047515ff2d Bot Updating Package Versions 2021-04-13 11:12:24 -04:00
aptalca
3f01055d3b Merge pull request #77 from linuxserver/js-dev
Publish js tag
2021-04-13 10:35:35 -04:00
aptalca
da45adac0b run migrate on restart 2021-04-13 09:37:48 -04:00
aptalca
c9751a38e9 fix ci test port 2021-04-12 15:17:00 -04:00
aptalca
71af7141d3 add python2 from node-gyp 2021-04-12 14:19:24 -04:00
aptalca
2425513f79 initial release for v3 on js tag 2021-04-12 12:18:46 -04:00
35 changed files with 1271 additions and 1192 deletions

View File

@@ -24,7 +24,7 @@
## Readme ## Readme
If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit. If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit.
Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-heimdall/edit/development/readme-vars.yml). Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-heimdall/edit/js/readme-vars.yml).
These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play. These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play.
Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-heimdall) Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-heimdall)
@@ -115,7 +115,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Update the changelog ## Update the changelog
If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-heimdall/tree/development/root), add an entry to the changelog If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-heimdall/tree/js/root), add an entry to the changelog
```yml ```yml
changelogs: changelogs:

View File

@@ -4,73 +4,11 @@ description: Create a report to help us improve
title: "[BUG] <title>" title: "[BUG] <title>"
labels: [Bug] labels: [Bug]
body: body:
- type: checkboxes - type: markdown
attributes: attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: Tell us what happens instead of the expected behavior.
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: Tell us what should happen.
validations:
required: false
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. In this environment...
2. With this config...
3. Run '...'
4. See error...
validations:
required: true
- type: textarea
attributes:
label: Environment
description: |
examples:
- **OS**: Ubuntu 20.04
- **How docker service was installed**: distro's packagemanager
value: | value: |
- OS: # DEPRECATION NOTICE
- How docker service was installed:
render: markdown This image is deprecated. We will not offer support for this image and it will not be updated.
validations:
required: false We recommend switching to the latest tag
- type: dropdown
attributes:
label: CPU architecture
options:
- x86-64
- arm64
validations:
required: true
- type: textarea
attributes:
label: Docker creation
description: |
Command used to create docker container
Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container
render: bash
validations:
required: true
- type: textarea
attributes:
description: |
Provide a full docker log, output of "docker logs heimdall"
label: Container logs
placeholder: |
Output of `docker logs heimdall`
render: bash
validations:
required: true

View File

@@ -4,28 +4,11 @@ description: Suggest an idea for this project
title: "[FEAT] <title>" title: "[FEAT] <title>"
labels: [enhancement] labels: [enhancement]
body: body:
- type: checkboxes - type: markdown
attributes: attributes:
label: Is this a new feature request? value: |
description: Please search to see if a feature request already exists. # DEPRECATION NOTICE
options:
- label: I have searched the existing issues This image is deprecated. We will not offer support for this image and it will not be updated.
required: true
- type: textarea We recommend switching to the latest tag
attributes:
label: Wanted change
description: Tell us what you want to happen.
validations:
required: true
- type: textarea
attributes:
label: Reason for change
description: Justify your request, why do you want it, what is the benefit.
validations:
required: true
- type: textarea
attributes:
label: Proposed code change
description: Do you have a potential code change in mind?
validations:
required: false

View File

@@ -1,3 +1,8 @@
# DEPRECATION NOTICE
This image is deprecated. We will not offer support for this image and it will not be updated.
We recommend switching to the latest tag
<!--- Provide a general summary of your changes in the Title above --> <!--- Provide a general summary of your changes in the Title above -->
[linuxserverurl]: https://linuxserver.io [linuxserverurl]: https://linuxserver.io
@@ -21,7 +26,7 @@
------------------------------ ------------------------------
- [ ] I have read the [contributing](https://github.com/linuxserver/docker-heimdall/blob/development/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications - [ ] I have read the [contributing](https://github.com/linuxserver/docker-heimdall/blob/js/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications
------------------------------ ------------------------------

View File

@@ -1,16 +0,0 @@
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

View File

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

View File

@@ -1,104 +0,0 @@
name: External Trigger Main
on:
workflow_dispatch:
jobs:
external-trigger-development:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: External Trigger
if: github.ref == 'refs/heads/development'
run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_HEIMDALL_DEVELOPMENT }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_HEIMDALL_DEVELOPMENT is set; skipping trigger. ****"
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_HEIMDALL_DEVELOPMENT\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** External trigger running off of development branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_HEIMDALL_DEVELOPMENT\". ****"
echo "External trigger running off of development branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_HEIMDALL_DEVELOPMENT\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****"
EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/linuxserver/Heimdall/commits/2.x" | jq -r '. | .sha' | cut -c1-8)
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "**** Can't retrieve external version, exiting ****"
FAILURE_REASON="Can't retrieve external version for heimdall branch development"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-heimdall/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,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
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 ****"
image="linuxserver/heimdall"
tag="development"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fheimdall%3Apull" \
| jq -r '.token')
multidigest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+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')
image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}")
if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then
image_info=$(echo $image_info | jq -r '.config')
else
image_info=$(echo $image_info | jq -r '.container_config')
fi
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 ****"
FAILURE_REASON="Can't retrieve last pushed version for heimdall tag development"
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
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
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-heimdall/job/development/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
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-heimdall/job/development/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 heimdall tag development. 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

View File

@@ -1,45 +0,0 @@
name: External Trigger Scheduler
on:
schedule:
- cron: '39 * * * *'
workflow_dispatch:
jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
with:
fetch-depth: '0'
- 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)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-heimdall/${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. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-heimdall/${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
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-heimdall/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
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
fi
done

View File

@@ -9,5 +9,5 @@ jobs:
- uses: actions/first-interaction@v1 - uses: actions/first-interaction@v1
with: with:
issue-message: 'Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.' issue-message: 'Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-heimdall/blob/development/.github/PULL_REQUEST_TEMPLATE.md)!' pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-heimdall/blob/js/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,42 +0,0 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-development:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Package Trigger
if: github.ref == 'refs/heads/development'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_HEIMDALL_DEVELOPMENT }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_HEIMDALL_DEVELOPMENT is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_HEIMDALL_DEVELOPMENT\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-heimdall/job/development/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 development branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_HEIMDALL_DEVELOPMENT\". ****"
echo "Package trigger running off of development branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_HEIMDALL_DEVELOPMENT\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-heimdall/job/development/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"

View File

@@ -1,50 +0,0 @@
name: Package Trigger Scheduler
on:
schedule:
- cron: '14 18 * * 5'
workflow_dispatch:
jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
with:
fetch-depth: '0'
- name: Package 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)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-heimdall/${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-heimdall/${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-heimdall/actions/workflows/package_trigger.yml/dispatches
sleep 30
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
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 heimdall** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-heimdall/activity/"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}

View File

@@ -1,6 +1,4 @@
# syntax=docker/dockerfile:1 FROM ghcr.io/linuxserver/baseimage-alpine:3.13
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.19
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -10,48 +8,45 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
LABEL maintainer="aptalca" LABEL maintainer="aptalca"
# environment settings # environment settings
ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 ENV \
HOME="/app/heimdall" \
NODE_ENV="production"
RUN \ RUN \
echo "**** install build packages ****" && \
apk add --no-cache --virtual=build-dependencies \
curl \
g++ \
make \
python2 && \
echo "**** install runtime packages ****" && \ echo "**** install runtime packages ****" && \
apk add --no-cache \ apk add --no-cache \
php83-dom \ nodejs \
php83-intl \ npm && \
php83-opcache \
php83-pdo_mysql \
php83-pdo_pgsql \
php83-pdo_sqlite \
php83-tokenizer && \
echo "**** configure nginx ****" && \
echo 'fastcgi_param PHP_AUTH_USER $remote_user; # Heimdall user authorization' >> \
/etc/nginx/fastcgi_params && \
echo 'fastcgi_param PHP_AUTH_PW $http_authorization; # Heimdall user authorization' >> \
/etc/nginx/fastcgi_params && \
echo "**** configure php opcache ****" && \
echo 'opcache.validate_timestamps=0' >> \
/etc/php83/conf.d/00_opcache.ini && \
echo "**** install heimdall ****" && \ echo "**** install heimdall ****" && \
mkdir -p \ mkdir -p \
/heimdall && \ /app/heimdall && \
if [ -z ${HEIMDALL_RELEASE+x} ]; then \ if [ -z ${HEIMDALL_RELEASE+x} ]; then \
HEIMDALL_RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/commits/2.x" \ HEIMDALL_RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/heimdalljs/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \ | awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \ fi && \
curl -o \ curl -o \
/tmp/heimdall.tar.gz -L \ /tmp/heimdalljs.tar.gz -L \
"https://github.com/linuxserver/Heimdall/archive/${HEIMDALL_RELEASE}.tar.gz" && \ "https://github.com/linuxserver/heimdalljs/archive/${HEIMDALL_RELEASE}.tar.gz" && \
mkdir -p \
/app/www-tmp && \
tar xf \ tar xf \
/tmp/heimdall.tar.gz -C \ /tmp/heimdalljs.tar.gz -C \
/app/www-tmp --strip-components=1 && \ /app/heimdall/ --strip-components=1 && \
cd /app/heimdall && \
NODE_ENV="development" npm install && \
cp .env.example .env && \
npm run build && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
npm prune --production && \
apk del --purge \
build-dependencies && \
rm -rf \ rm -rf \
/root/.cache \
/tmp/* /tmp/*
# add local files # add local files
COPY root/ / COPY root/ /
# ports and volumes
EXPOSE 80 443
VOLUME /config

View File

@@ -1,6 +1,4 @@
# syntax=docker/dockerfile:1 FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.13
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.19
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -10,48 +8,45 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
LABEL maintainer="aptalca" LABEL maintainer="aptalca"
# environment settings # environment settings
ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 ENV \
HOME="/app/heimdall" \
NODE_ENV="production"
RUN \ RUN \
echo "**** install build packages ****" && \
apk add --no-cache --virtual=build-dependencies \
curl \
g++ \
make \
python2 && \
echo "**** install runtime packages ****" && \ echo "**** install runtime packages ****" && \
apk add --no-cache \ apk add --no-cache \
php83-dom \ nodejs \
php83-intl \ npm && \
php83-opcache \
php83-pdo_mysql \
php83-pdo_pgsql \
php83-pdo_sqlite \
php83-tokenizer && \
echo "**** configure nginx ****" && \
echo 'fastcgi_param PHP_AUTH_USER $remote_user; # Heimdall user authorization' >> \
/etc/nginx/fastcgi_params && \
echo 'fastcgi_param PHP_AUTH_PW $http_authorization; # Heimdall user authorization' >> \
/etc/nginx/fastcgi_params && \
echo "**** configure php opcache ****" && \
echo 'opcache.validate_timestamps=0' >> \
/etc/php83/conf.d/00_opcache.ini && \
echo "**** install heimdall ****" && \ echo "**** install heimdall ****" && \
mkdir -p \ mkdir -p \
/heimdall && \ /app/heimdall && \
if [ -z ${HEIMDALL_RELEASE+x} ]; then \ if [ -z ${HEIMDALL_RELEASE+x} ]; then \
HEIMDALL_RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/commits/2.x" \ HEIMDALL_RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/heimdalljs/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \ | awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \ fi && \
curl -o \ curl -o \
/tmp/heimdall.tar.gz -L \ /tmp/heimdalljs.tar.gz -L \
"https://github.com/linuxserver/Heimdall/archive/${HEIMDALL_RELEASE}.tar.gz" && \ "https://github.com/linuxserver/heimdalljs/archive/${HEIMDALL_RELEASE}.tar.gz" && \
mkdir -p \
/app/www-tmp && \
tar xf \ tar xf \
/tmp/heimdall.tar.gz -C \ /tmp/heimdalljs.tar.gz -C \
/app/www-tmp --strip-components=1 && \ /app/heimdall/ --strip-components=1 && \
cd /app/heimdall && \
NODE_ENV="development" npm install && \
cp .env.example .env && \
npm run build && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
npm prune --production && \
apk del --purge \
build-dependencies && \
rm -rf \ rm -rf \
/root/.cache \
/tmp/* /tmp/*
# add local files # add local files
COPY root/ / COPY root/ /
# ports and volumes
EXPOSE 80 443
VOLUME /config

52
Dockerfile.armhf Normal file
View File

@@ -0,0 +1,52 @@
FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-3.13
# set version label
ARG BUILD_DATE
ARG VERSION
ARG HEIMDALL_RELEASE
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="aptalca"
# environment settings
ENV \
HOME="/app/heimdall" \
NODE_ENV="production"
RUN \
echo "**** install build packages ****" && \
apk add --no-cache --virtual=build-dependencies \
curl \
g++ \
make \
python2 && \
echo "**** install runtime packages ****" && \
apk add --no-cache \
nodejs \
npm && \
echo "**** install heimdall ****" && \
mkdir -p \
/app/heimdall && \
if [ -z ${HEIMDALL_RELEASE+x} ]; then \
HEIMDALL_RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/heimdalljs/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \
curl -o \
/tmp/heimdalljs.tar.gz -L \
"https://github.com/linuxserver/heimdalljs/archive/${HEIMDALL_RELEASE}.tar.gz" && \
tar xf \
/tmp/heimdalljs.tar.gz -C \
/app/heimdall/ --strip-components=1 && \
cd /app/heimdall && \
NODE_ENV="development" npm install && \
cp .env.example .env && \
npm run build && \
echo "**** cleanup ****" && \
npm prune --production && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/*
# add local files
COPY root/ /

485
Jenkinsfile vendored
View File

@@ -16,10 +16,10 @@ pipeline {
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab') GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0') GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id') GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat') SCARF_TOKEN=credentials('scarf_api_key')
EXT_GIT_BRANCH = '2.x' EXT_GIT_BRANCH = 'master'
EXT_USER = 'linuxserver' EXT_USER = 'linuxserver'
EXT_REPO = 'Heimdall' EXT_REPO = 'heimdalljs'
CONTAINER_NAME = 'heimdall' CONTAINER_NAME = 'heimdall'
BUILD_VERSION_ARG = 'HEIMDALL_RELEASE' BUILD_VERSION_ARG = 'HEIMDALL_RELEASE'
LS_USER = 'linuxserver' LS_USER = 'linuxserver'
@@ -31,7 +31,7 @@ pipeline {
MULTIARCH='true' MULTIARCH='true'
CI='true' CI='true'
CI_WEB='true' CI_WEB='true'
CI_PORT='80' CI_PORT='3000'
CI_SSL='false' CI_SSL='false'
CI_DELAY='120' CI_DELAY='120'
CI_DOCKERENV='TZ=US/Pacific' CI_DOCKERENV='TZ=US/Pacific'
@@ -42,16 +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 '''#! /bin/bash sh '''docker pull quay.io/skopeo/stable:v1 || : '''
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
script{ script{
env.EXIT_STATUS = '' env.EXIT_STATUS = ''
env.LS_RELEASE = sh( env.LS_RELEASE = sh(
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:development 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}:js 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' ''',
@@ -62,16 +57,11 @@ pipeline {
env.COMMIT_SHA = sh( env.COMMIT_SHA = sh(
script: '''git rev-parse HEAD''', script: '''git rev-parse HEAD''',
returnStdout: true).trim() returnStdout: true).trim()
env.GH_DEFAULT_BRANCH = sh(
script: '''git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||' ''',
returnStdout: true).trim()
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/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' 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 ./root/etc/cont-init.d/99-deprecation'
} }
sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
script{ script{
env.LS_RELEASE_NUMBER = sh( env.LS_RELEASE_NUMBER = sh(
script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''', script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''',
@@ -80,7 +70,7 @@ pipeline {
script{ script{
env.LS_TAG_NUMBER = sh( env.LS_TAG_NUMBER = sh(
script: '''#! /bin/bash script: '''#! /bin/bash
tagsha=$(git rev-list -n 1 development-${LS_RELEASE} 2>/dev/null) tagsha=$(git rev-list -n 1 js-${LS_RELEASE} 2>/dev/null)
if [ "${tagsha}" == "${COMMIT_SHA}" ]; then if [ "${tagsha}" == "${COMMIT_SHA}" ]; then
echo ${LS_RELEASE_NUMBER} echo ${LS_RELEASE_NUMBER}
elif [ -z "${GIT_COMMIT}" ]; then elif [ -z "${GIT_COMMIT}" ]; then
@@ -136,7 +126,7 @@ pipeline {
steps{ steps{
script{ script{
env.EXT_RELEASE_CLEAN = sh( env.EXT_RELEASE_CLEAN = sh(
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/ ]//g' ''', script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''',
returnStdout: true).trim() returnStdout: true).trim()
def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)/ def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)/
@@ -154,7 +144,7 @@ pipeline {
} }
if (env.SEMVER != null) { if (env.SEMVER != null) {
if (BRANCH_NAME != "${env.GH_DEFAULT_BRANCH}") { if (BRANCH_NAME != "master" && BRANCH_NAME != "main") {
env.SEMVER = "${env.SEMVER}-${BRANCH_NAME}" env.SEMVER = "${env.SEMVER}-${BRANCH_NAME}"
} }
println("SEMVER: ${env.SEMVER}") println("SEMVER: ${env.SEMVER}")
@@ -165,10 +155,10 @@ pipeline {
} }
} }
} }
// If this is a development build use live docker endpoints // If this is a js build use live docker endpoints
stage("Set ENV live build"){ stage("Set ENV live build"){
when { when {
branch "development" branch "js"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
} }
steps { steps {
@@ -178,20 +168,20 @@ pipeline {
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-development-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-development-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.CI_TAGS = 'amd64-js-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-js-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-js-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} else { } else {
env.CI_TAGS = 'development-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.CI_TAGS = 'js-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} }
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.META_TAG = 'development-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.META_TAG = 'js-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'development-version-' + env.EXT_RELEASE_CLEAN env.EXT_RELEASE_TAG = 'js-version-' + env.EXT_RELEASE_CLEAN
} }
} }
} }
// If this is a dev build use dev docker endpoints // If this is a dev build use dev docker endpoints
stage("Set ENV dev build"){ stage("Set ENV dev build"){
when { when {
not {branch "development"} not {branch "js"}
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
} }
steps { steps {
@@ -201,13 +191,13 @@ pipeline {
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.CI_TAGS = 'amd64-js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} else { } else {
env.CI_TAGS = 'development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.CI_TAGS = 'js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} }
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.META_TAG = 'development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.META_TAG = 'js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'development-version-' + env.EXT_RELEASE_CLEAN env.EXT_RELEASE_TAG = 'js-version-' + env.EXT_RELEASE_CLEAN
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
} }
} }
@@ -224,13 +214,13 @@ pipeline {
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST env.CI_TAGS = 'amd64-js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
} else { } else {
env.CI_TAGS = 'development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST env.CI_TAGS = 'js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
} }
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
env.META_TAG = 'development-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST env.META_TAG = 'js-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
env.EXT_RELEASE_TAG = 'development-version-' + env.EXT_RELEASE_CLEAN env.EXT_RELEASE_TAG = 'js-version-' + env.EXT_RELEASE_CLEAN
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
} }
@@ -255,11 +245,9 @@ pipeline {
-v ${WORKSPACE}:/mnt \ -v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
ghcr.io/linuxserver/baseimage-alpine:3.19 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ ghcr.io/linuxserver/baseimage-alpine:3.17 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache python3 && \ apk add --no-cache py3-pip && \
python3 -m venv /lsiopy && \ pip install s3cmd && \
pip install --no-cache-dir -U pip && \
pip install --no-cache-dir s3cmd && \
s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :''' s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :'''
} }
} }
@@ -267,7 +255,7 @@ pipeline {
// Use helper containers to render templated files // Use helper containers to render templated files
stage('Update-Templates') { stage('Update-Templates') {
when { when {
branch "development" branch "js"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
expression { expression {
env.CONTAINER_NAME != null env.CONTAINER_NAME != null
@@ -278,18 +266,17 @@ pipeline {
set -e set -e
TEMPDIR=$(mktemp -d) TEMPDIR=$(mktemp -d)
docker pull ghcr.io/linuxserver/jenkins-builder:latest docker pull ghcr.io/linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=development -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=js -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest
# Stage 1 - Jenkinsfile update # Stage 1 - Jenkinsfile update
if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then
mkdir -p ${TEMPDIR}/repo mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f development git checkout -f js
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
git add Jenkinsfile git add Jenkinsfile
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git development 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 development
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating Jenkinsfile" echo "Updating Jenkinsfile"
rm -Rf ${TEMPDIR} rm -Rf ${TEMPDIR}
@@ -298,7 +285,8 @@ 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 .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml Dockerfile.armhf" 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="${OLD_TEMPLATES} $(echo .github/workflows/{external_trigger,external_trigger_scheduler,package_trigger,package_trigger_scheduler,call_issue_pr_tracker,call_issues_cron}.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}"
@@ -308,13 +296,12 @@ pipeline {
mkdir -p ${TEMPDIR}/repo mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f development git checkout -f js
for i in ${TEMPLATES_TO_DELETE}; do for i in ${TEMPLATES_TO_DELETE}; do
git rm "${i}" git rm "${i}"
done done
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git development 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 development
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Deleting old and deprecated templates" echo "Deleting old and deprecated templates"
rm -Rf ${TEMPDIR} rm -Rf ${TEMPDIR}
@@ -330,51 +317,52 @@ pipeline {
mkdir -p ${TEMPDIR}/repo mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f development git checkout -f js
cd ${TEMPDIR}/docker-${CONTAINER_NAME} cd ${TEMPDIR}/docker-${CONTAINER_NAME}
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE
if [[ -d "${TEMPDIR}/repo/${LS_REPO}/root/etc/s6-overlay/s6-rc.d" ]]; then
mkdir -p \
${TEMPDIR}/repo/${LS_REPO}/root/etc/s6-overlay/s6-rc.d/init-deprecate/dependencies.d \
${TEMPDIR}/repo/${LS_REPO}/root/etc/s6-overlay/s6-rc.d/init-services/dependencies.d \
${TEMPDIR}/repo/${LS_REPO}/root/etc/s6-overlay/s6-rc.d/user/contents.d
else
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/root/etc/cont-init.d
fi
cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/ || : cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/ || :
cp --parents readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/ || :
cd ${TEMPDIR}/repo/${LS_REPO}/ cd ${TEMPDIR}/repo/${LS_REPO}/
if ! grep -q '.jenkins-external' .gitignore 2>/dev/null; then if ! grep -q '.jenkins-external' .gitignore 2>/dev/null; then
echo ".jenkins-external" >> .gitignore echo ".jenkins-external" >> .gitignore
git add .gitignore git add .gitignore
fi fi
git add readme-vars.yml ${TEMPLATED_FILES} git add ${TEMPLATED_FILES}
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git development 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 development
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
else else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
fi fi
mkdir -p ${TEMPDIR}/docs mkdir -p ${TEMPDIR}/gitbook
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/
cd ${TEMPDIR}/docs/docker-documentation cd ${TEMPDIR}/gitbook/docker-documentation/
GH_DOCS_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||') git add images/docker-${CONTAINER_NAME}.md
git add docs/images/docker-${CONTAINER_NAME}.md
git commit -m 'Bot Updating Documentation' git commit -m 'Bot Updating Documentation'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} --rebase git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} || \
(MAXWAIT="10" && echo "Push to docs failed, trying again in ${MAXWAIT} seconds" && \
sleep $((RANDOM % MAXWAIT)) && \
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} --rebase && \
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH})
fi fi
mkdir -p ${TEMPDIR}/unraid mkdir -p ${TEMPDIR}/unraid
git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates
if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-icon.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
fi fi
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then
cd ${TEMPDIR}/unraid/templates/ cd ${TEMPDIR}/unraid/templates/
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; then
echo "${CONTAINER_NAME}" >> ${TEMPDIR}/unraid/templates/unraid/ignore.list
git add unraid/ignore.list
fi
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated" 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/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
@@ -386,31 +374,7 @@ pipeline {
git add unraid/${CONTAINER_NAME}.xml git add unraid/${CONTAINER_NAME}.xml
git commit -m 'Bot Updating Unraid Template' git commit -m 'Bot Updating Unraid Template'
fi fi
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} --rebase git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git --all
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} || \
(MAXWAIT="10" && echo "Push to unraid templates failed, trying again in ${MAXWAIT} seconds" && \
sleep $((RANDOM % MAXWAIT)) && \
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} --rebase && \
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH})
fi
# Stage 4 - Sync Readme to Docker Hub
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]]; then
if [[ $(cat ${TEMPDIR}/docker-${CONTAINER_NAME}/README.md | wc -m) > 25000 ]]; then
echo "Readme is longer than 25,000 characters. Syncing the lite version to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/README.lite"
else
echo "Syncing readme to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/README.md"
fi
DH_TOKEN=$(curl -d '{"username":"linuxserverci", "password":"'${DOCKERHUB_TOKEN}'"}' -H "Content-Type: application/json" -X POST https://hub.docker.com/v2/users/login | jq -r '.token')
curl -s \
-H "Authorization: JWT ${DH_TOKEN}" \
-H "Content-Type: application/json" \
-X PATCH \
-d "{\\"full_description\\":$(jq -Rsa . ${DH_README_SYNC_PATH})}" \
https://hub.docker.com/v2/repositories/${DOCKERHUB_IMAGE} || :
else
echo "Not the default Github branch. Skipping readme sync to Docker Hub."
fi fi
rm -Rf ${TEMPDIR}''' rm -Rf ${TEMPDIR}'''
script{ script{
@@ -423,7 +387,7 @@ pipeline {
// Exit the build if the Templated files were just updated // Exit the build if the Templated files were just updated
stage('Template-exit') { stage('Template-exit') {
when { when {
branch "development" branch "js"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'FILES_UPDATED', value: 'true' environment name: 'FILES_UPDATED', value: 'true'
expression { expression {
@@ -436,10 +400,10 @@ pipeline {
} }
} }
} }
// If this is a development build check the S6 service file perms // If this is a js build check the S6 service file perms
stage("Check S6 Service file Permissions"){ stage("Check S6 Service file Permissions"){
when { when {
branch "development" branch "js"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
@@ -476,6 +440,36 @@ pipeline {
"visibility":"public"}' ''' "visibility":"public"}' '''
} }
} }
/* #######################
Scarf.sh package registry
####################### */
// Add package to Scarf.sh and set permissions
stage("Scarf.sh package registry"){
when {
branch "js"
environment name: 'EXIT_STATUS', value: ''
}
steps{
sh '''#! /bin/bash
set -e
PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/organizations/linuxserver-ci/packages | jq -r '.[] | select(.name=="linuxserver/heimdall") | .uuid')
if [ -z "${PACKAGE_UUID}" ]; then
echo "Adding package to Scarf.sh"
curl -sX POST https://scarf.sh/api/v1/organizations/linuxserver-ci/packages \
-H "Authorization: Bearer ${SCARF_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name":"linuxserver/heimdall",\
"shortDescription":"example description",\
"libraryType":"docker",\
"website":"https://github.com/linuxserver/docker-heimdall",\
"backendUrl":"https://ghcr.io/linuxserver/heimdall",\
"publicUrl":"https://lscr.io/linuxserver/heimdall"}' || :
else
echo "Package already exists on Scarf.sh"
fi
'''
}
}
/* ############### /* ###############
Build Container Build Container
############### */ ############### */
@@ -502,7 +496,7 @@ pipeline {
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Heimdall\" \ --label \"org.opencontainers.image.title=Heimdall\" \
--label \"org.opencontainers.image.description=[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo. \" \ --label \"org.opencontainers.image.description=[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.\" \
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \ --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} ."
} }
@@ -533,11 +527,46 @@ pipeline {
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Heimdall\" \ --label \"org.opencontainers.image.title=Heimdall\" \
--label \"org.opencontainers.image.description=[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo. \" \ --label \"org.opencontainers.image.description=[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.\" \
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \ --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} ."
} }
} }
stage('Build ARMHF') {
agent {
label 'ARMHF'
}
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.armhf"
sh "docker buildx build \
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
--label \"org.opencontainers.image.authors=linuxserver.io\" \
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-heimdall/packages\" \
--label \"org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-heimdall\" \
--label \"org.opencontainers.image.source=https://github.com/linuxserver/docker-heimdall\" \
--label \"org.opencontainers.image.version=${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}\" \
--label \"org.opencontainers.image.revision=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.vendor=linuxserver.io\" \
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Heimdall\" \
--label \"org.opencontainers.image.description=[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.\" \
--no-cache --pull -f Dockerfile.armhf -t ${IMAGE}:arm32v7-${META_TAG} --platform=linux/arm/v7 \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm32v7-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
}
sh '''docker rmi \
${IMAGE}:arm32v7-${META_TAG} \
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
}
}
stage('Build ARM64') { stage('Build ARM64') {
agent { agent {
label 'ARM64' label 'ARM64'
@@ -561,19 +590,16 @@ pipeline {
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Heimdall\" \ --label \"org.opencontainers.image.title=Heimdall\" \
--label \"org.opencontainers.image.description=[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo. \" \ --label \"org.opencontainers.image.description=[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.\" \
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \ --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) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
} }
sh '''#! /bin/bash sh '''docker rmi \
containers=$(docker ps -aq) ${IMAGE}:arm64v8-${META_TAG} \
if [[ -n "${containers}" ]]; then ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
} }
} }
} }
@@ -581,7 +607,7 @@ pipeline {
// Take the image we just built and dump package versions for comparison // Take the image we just built and dump package versions for comparison
stage('Update-packages') { stage('Update-packages') {
when { when {
branch "development" branch "js"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
@@ -604,14 +630,13 @@ pipeline {
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
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f development git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f js
cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/ cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/
cd ${TEMPDIR}/${LS_REPO}/ cd ${TEMPDIR}/${LS_REPO}/
wait wait
git add package_versions.txt git add package_versions.txt
git commit -m 'Bot Updating Package Versions' git commit -m 'Bot Updating Package Versions'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git development 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 development
echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag updated, stopping build process" echo "Package tag updated, stopping build process"
else else
@@ -629,12 +654,19 @@ pipeline {
// Exit the build if the package file was just updated // Exit the build if the package file was just updated
stage('PACKAGE-exit') { stage('PACKAGE-exit') {
when { when {
branch "development" branch "js"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'true' environment name: 'PACKAGE_UPDATED', value: 'true'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
sh '''#! /bin/bash
echo "Packages were updated. Cleaning up the image and exiting."
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
docker rmi ${IMAGE}:amd64-${META_TAG}
else
docker rmi ${IMAGE}:${META_TAG}
fi'''
script{ script{
env.EXIT_STATUS = 'ABORTED' env.EXIT_STATUS = 'ABORTED'
} }
@@ -643,7 +675,7 @@ pipeline {
// Exit the build if this is just a package check and there are no changes to push // Exit the build if this is just a package check and there are no changes to push
stage('PACKAGECHECK-exit') { stage('PACKAGECHECK-exit') {
when { when {
branch "development" branch "js"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'false' environment name: 'PACKAGE_UPDATED', value: 'false'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
@@ -652,6 +684,13 @@ pipeline {
} }
} }
steps { steps {
sh '''#! /bin/bash
echo "There are no package updates. Cleaning up the image and exiting."
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
docker rmi ${IMAGE}:amd64-${META_TAG}
else
docker rmi ${IMAGE}:${META_TAG}
fi'''
script{ script{
env.EXIT_STATUS = 'ABORTED' env.EXIT_STATUS = 'ABORTED'
} }
@@ -679,7 +718,9 @@ pipeline {
set -e set -e
docker pull ghcr.io/linuxserver/ci:latest docker pull ghcr.io/linuxserver/ci:latest
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi fi
docker run --rm \ docker run --rm \
@@ -714,6 +755,12 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[ [
$class: 'UsernamePasswordMultiBinding', $class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot', credentialsId: 'Quay.io-Robot',
@@ -724,18 +771,18 @@ pipeline {
retry(5) { retry(5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --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 $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG} docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:development docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:js
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG} docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER} docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
fi fi
docker push ${PUSHIMAGE}:development docker push ${PUSHIMAGE}:js
docker push ${PUSHIMAGE}:${META_TAG} docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG} docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
@@ -744,6 +791,17 @@ pipeline {
done done
''' '''
} }
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:${META_TAG} \
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
${DELETEIMAGE}:js || :
if [ -n "${SEMVER}" ]; then
docker rmi ${DELETEIMAGE}:${SEMVER} || :
fi
done
'''
} }
} }
} }
@@ -755,6 +813,12 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[ [
$class: 'UsernamePasswordMultiBinding', $class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot', credentialsId: 'Quay.io-Robot',
@@ -765,60 +829,64 @@ pipeline {
retry(5) { retry(5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --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 $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [ "${CI}" == "false" ]; then if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-development docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-js
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-js
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-development docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-js
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER} docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER} docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi fi
docker push ${MANIFESTIMAGE}:amd64-${META_TAG} docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:amd64-development docker push ${MANIFESTIMAGE}:amd64-js
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
docker push ${MANIFESTIMAGE}:arm32v7-js
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-development docker push ${MANIFESTIMAGE}:arm64v8-js
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker push ${MANIFESTIMAGE}:amd64-${SEMVER} docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER} docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi fi
docker manifest push --purge ${MANIFESTIMAGE}:development || : docker manifest push --purge ${MANIFESTIMAGE}:js || :
docker manifest create ${MANIFESTIMAGE}:development ${MANIFESTIMAGE}:amd64-development ${MANIFESTIMAGE}:arm64v8-development docker manifest create ${MANIFESTIMAGE}:js ${MANIFESTIMAGE}:amd64-js ${MANIFESTIMAGE}:arm32v7-js ${MANIFESTIMAGE}:arm64v8-js
docker manifest annotate ${MANIFESTIMAGE}:development ${MANIFESTIMAGE}:arm64v8-development --os linux --arch arm64 --variant v8 docker manifest annotate ${MANIFESTIMAGE}:js ${MANIFESTIMAGE}:arm32v7-js --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:js ${MANIFESTIMAGE}:arm64v8-js --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || : docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8 docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} || : docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || : docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8 docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
fi fi
token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Alinuxserver%2F${CONTAINER_NAME}%3Apull" | jq -r '.token') docker manifest push --purge ${MANIFESTIMAGE}:js
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/linuxserver/${CONTAINER_NAME}/manifests/arm32v7-development")
if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-development || :
docker manifest create ${MANIFESTIMAGE}:arm32v7-development ${MANIFESTIMAGE}:amd64-development
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-development
fi
docker manifest push --purge ${MANIFESTIMAGE}:development
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}
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
@@ -827,13 +895,36 @@ pipeline {
done done
''' '''
} }
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:amd64-${META_TAG} \
${DELETEIMAGE}:amd64-js \
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
${DELETEIMAGE}:arm32v7-${META_TAG} \
${DELETEIMAGE}:arm32v7-js \
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
${DELETEIMAGE}:arm64v8-${META_TAG} \
${DELETEIMAGE}:arm64v8-js \
${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
if [ -n "${SEMVER}" ]; then
docker rmi \
${DELETEIMAGE}:amd64-${SEMVER} \
${DELETEIMAGE}:arm32v7-${SEMVER} \
${DELETEIMAGE}:arm64v8-${SEMVER} || :
fi
done
docker rmi \
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :
'''
} }
} }
} }
// If this is a public release tag it in the LS Github // If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') { stage('Github-Tag-Push-Release') {
when { when {
branch "development" branch "js"
expression { expression {
env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} }
@@ -845,14 +936,14 @@ pipeline {
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\ -d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\ "object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to development",\ "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to js",\
"type": "commit",\ "type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag" echo "Pushing New release for Tag"
sh '''#! /bin/bash sh '''#! /bin/bash
curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/commits/${EXT_RELEASE_CLEAN} | jq '.commit.message' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/commits/${EXT_RELEASE_CLEAN} | jq '.commit.message' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json
echo '{"tag_name":"'${META_TAG}'",\ echo '{"tag_name":"'${META_TAG}'",\
"target_commitish": "development",\ "target_commitish": "js",\
"name": "'${META_TAG}'",\ "name": "'${META_TAG}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**'${EXT_REPO}' Changes:**\\n\\n' > start "body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**'${EXT_REPO}' Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": true}' >> releasebody.json printf '","draft": false,"prerelease": true}' >> releasebody.json
@@ -860,45 +951,44 @@ pipeline {
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @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'''
} }
} }
// Add protection to the release branch // Use helper container to sync the current README on master to the dockerhub endpoint
stage('Github-Release-Branch-Protection') { stage('Sync-README') {
when { when {
branch "development"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
echo "Setting up protection for release branch development" withCredentials([
sh '''#! /bin/bash [
curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/development/protection \ $class: 'UsernamePasswordMultiBinding',
-d $(jq -c . << EOF credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
{ usernameVariable: 'DOCKERUSER',
"required_status_checks": null, passwordVariable: 'DOCKERPASS'
"enforce_admins": false, ]
"required_pull_request_reviews": { ]) {
"dismiss_stale_reviews": false, sh '''#! /bin/bash
"require_code_owner_reviews": false, set -e
"require_last_push_approval": false, TEMPDIR=$(mktemp -d)
"required_approving_review_count": 1 docker pull ghcr.io/linuxserver/jenkins-builder:latest
}, docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH="${BRANCH_NAME}" -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest
"restrictions": null, docker pull ghcr.io/linuxserver/readme-sync
"required_linear_history": false, docker run --rm=true \
"allow_force_pushes": false, -e DOCKERHUB_USERNAME=$DOCKERUSER \
"allow_deletions": false, -e DOCKERHUB_PASSWORD=$DOCKERPASS \
"block_creations": false, -e GIT_REPOSITORY=${LS_USER}/${LS_REPO} \
"required_conversation_resolution": true, -e DOCKER_REPOSITORY=${IMAGE} \
"lock_branch": false, -e GIT_BRANCH=master \
"allow_fork_syncing": false, -v ${TEMPDIR}/docker-${CONTAINER_NAME}:/mnt \
"required_signatures": false ghcr.io/linuxserver/readme-sync bash -c 'node sync'
} rm -Rf ${TEMPDIR} '''
EOF }
) '''
} }
} }
// If this is a Pull request send the CI link as a comment on it // If this is a Pull request send the CI link as a comment on it
stage('Pull Request Comment') { stage('Pull Request Comment') {
when { when {
not {environment name: 'CHANGE_ID', value: ''} not {environment name: 'CHANGE_ID', value: ''}
environment name: 'CI', value: 'true'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
@@ -952,27 +1042,38 @@ EOF
echo "$escaped_table" echo "$escaped_table"
} }
if [[ "${CI}" = "true" ]]; then # Retrieve JSON data from URL
# Retrieve JSON data from URL data=$(get_json "$CI_JSON_URL")
data=$(get_json "$CI_JSON_URL") # Create table from JSON data
# Create table from JSON data table=$(build_table "$data")
table=$(build_table "$data") echo -e "$table"
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \ -H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ "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}\\"}" -d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"'''
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
} }
} }
stage('Deprecate/Disable Future Builds') {
when {
branch "js"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''#! /bin/bash
TEMPDIR=$(mktemp -d)
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 js
git rm Jenkinsfile
git commit -m 'Disabling future builds'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
rm -Rf ${TEMPDIR}'''
}
}
} }
/* ###################### /* ######################
Send status to Discord Send status to Discord
@@ -996,14 +1097,6 @@ EOF
} }
} }
cleanup { cleanup {
sh '''#! /bin/bash
echo "Performing docker system prune!!"
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || :
'''
cleanWs() cleanWs()
} }
} }

200
README.md
View File

@@ -1,5 +1,6 @@
<!-- DO NOT EDIT THIS FILE MANUALLY --> <!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read https://github.com/linuxserver/docker-heimdall/blob/development/.github/CONTRIBUTING.md --> <!-- Please read the https://github.com/linuxserver/docker-heimdall/blob/js/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!") [![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
@@ -26,6 +27,11 @@ Find us at:
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories. * [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
# DEPRECATION NOTICE
This image is deprecated. We will not offer support for this image and it will not be updated.
We recommend switching to the latest tag
# [linuxserver/heimdall](https://github.com/linuxserver/docker-heimdall) # [linuxserver/heimdall](https://github.com/linuxserver/docker-heimdall)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fheimdall?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fheimdall) [![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fheimdall?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fheimdall)
@@ -36,22 +42,20 @@ Find us at:
[![Quay.io](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Quay.io)](https://quay.io/repository/linuxserver.io/heimdall) [![Quay.io](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Quay.io)](https://quay.io/repository/linuxserver.io/heimdall)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/heimdall.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/heimdall) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/heimdall.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/heimdall)
[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/heimdall.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/heimdall) [![Docker Stars](https://img.shields.io/docker/stars/linuxserver/heimdall.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/heimdall)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-heimdall%2Fjob%2Fdevelopment%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-heimdall/job/development/) [![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-heimdall%2Fjob%2Fjs%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-heimdall/job/js/)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fheimdall%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/heimdall/latest/index.html) [![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fheimdall%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/heimdall/latest/index.html)
[Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way. [Heimdall](https://heimdall.site) is a way to organise all those links to your most used web sites and web applications in a simple way.
Simplicity is the key to Heimdall. Simplicity is the key to Heimdall.
Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.
[![heimdall](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/heimdall-banner.png)](https://heimdall.site) [![heimdall](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/heimdall-banner.png)](https://heimdall.site)
## Supported Architectures ## Supported Architectures
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/). We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/heimdall:development` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. Simply pulling `lscr.io/linuxserver/heimdall:js` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are: The architectures supported by this image are:
@@ -59,7 +63,7 @@ The architectures supported by this image are:
| :----: | :----: | ---- | | :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | | | | armhf | | arm32v7-\<version tag\> |
## Version Tags ## Version Tags
@@ -68,8 +72,7 @@ This image provides various versions that are available via tags. Please read th
| Tag | Available | Description | | Tag | Available | Description |
| :----: | :----: |--- | | :----: | :----: |--- |
| latest | ✅ | Stable Heimdall releases. | | latest | ✅ | Stable Heimdall releases. |
| development | ✅ | Latest commit from the github 2.x branch. | | development | ✅ | Latest commit from the github master branch. |
## Application Setup ## Application Setup
Access the web gui at http://SERVERIP:PORT Access the web gui at http://SERVERIP:PORT
@@ -77,29 +80,29 @@ Access the web gui at http://SERVERIP:PORT
### Adding password protection ### Adding password protection
This image now supports password protection through htpasswd. Run the following command on your host to generate the htpasswd file `docker exec -it heimdall htpasswd -c /config/nginx/.htpasswd <username>`. Replace <username> with a username of your choice and you will be asked to enter a password. Uncomment the `basic auth` lines in `/config/nginx/site-confs/default.conf` and restart the container. This image now supports password protection through htpasswd. Run the following command on your host to generate the htpasswd file `docker exec -it heimdall htpasswd -c /config/nginx/.htpasswd <username>`. Replace <username> with a username of your choice and you will be asked to enter a password. New installs will automatically pick it up and implement password protected access. Existing users updating their image can delete their site config at `/config/nginx/site-confs/default` and restart the container after updating the image. A new site config with htpasswd support will be created in its place.
## Usage ## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli. Here are some example snippets to help you get started creating a container.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose)) ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml ```yaml
--- ---
version: "2.1"
services: services:
heimdall: heimdall:
image: lscr.io/linuxserver/heimdall:development image: lscr.io/linuxserver/heimdall:js
container_name: heimdall container_name: heimdall
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=Etc/UTC - TZ=Etc/UTC
volumes: volumes:
- /path/to/heimdall/config:/config - /path/to/appdata/config:/config
ports: ports:
- 80:80 - 3000:3000
- 443:443
restart: unless-stopped restart: unless-stopped
``` ```
@@ -111,25 +114,24 @@ docker run -d \
-e PUID=1000 \ -e PUID=1000 \
-e PGID=1000 \ -e PGID=1000 \
-e TZ=Etc/UTC \ -e TZ=Etc/UTC \
-p 80:80 \ -p 3000:3000 \
-p 443:443 \ -v /path/to/appdata/config:/config \
-v /path/to/heimdall/config:/config \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/heimdall:development lscr.io/linuxserver/heimdall:js
``` ```
## Parameters ## Parameters
Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container. Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function | | Parameter | Function |
| :----: | --- | | :----: | --- |
| `-p 80` | http gui | | `-p 3000` | http gui |
| `-p 443` | https gui |
| `-e PUID=1000` | for UserID - see below for explanation | | `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - 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). | | `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
| `-v /config` | Persistent config files | | `-v /config` | Contains all relevant configuration files. |
## Environment variables from files (Docker secrets) ## Environment variables from files (Docker secrets)
@@ -138,10 +140,10 @@ You can set any environment variable from a file by using a special prepend `FIL
As an example: As an example:
```bash ```bash
-e FILE__MYVAR=/run/secrets/mysecretvariable -e FILE__PASSWORD=/run/secrets/mysecretpassword
``` ```
Will set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file. Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file.
## Umask for running applications ## Umask for running applications
@@ -150,20 +152,15 @@ Keep in mind umask is not chmod it subtracts from permissions based on it's valu
## User / Group Identifiers ## User / Group Identifiers
When using volumes (`-v` flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`. When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic. Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below: In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
```bash ```bash
id your_user $ id username
``` uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
Example output:
```text
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
``` ```
## Docker Mods ## Docker Mods
@@ -174,100 +171,53 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
## Support Info ## Support Info
* Shell access whilst the container is running: * Shell access whilst the container is running: `docker exec -it heimdall /bin/bash`
* To monitor the logs of the container in realtime: `docker logs -f heimdall`
```bash * container version number
docker exec -it heimdall /bin/bash * `docker inspect -f '{{ index .Config.Labels "build_version" }}' heimdall`
``` * image version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/heimdall:js`
* To monitor the logs of the container in realtime:
```bash
docker logs -f heimdall
```
* Container version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' heimdall
```
* Image version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/heimdall:development
```
## Updating Info ## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image. Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers: Below are the instructions for updating containers:
### Via Docker Compose ### Via Docker Compose
* Update images: * Update all images: `docker-compose pull`
* All images: * or update a single image: `docker-compose pull heimdall`
* Let compose update all containers as necessary: `docker-compose up -d`
```bash * or update a single container: `docker-compose up -d heimdall`
docker-compose pull * You can also remove the old dangling images: `docker image prune`
```
* Single image:
```bash
docker-compose pull heimdall
```
* Update containers:
* All containers:
```bash
docker-compose up -d
```
* Single container:
```bash
docker-compose up -d heimdall
```
* You can also remove the old dangling images:
```bash
docker image prune
```
### Via Docker Run ### Via Docker Run
* Update the image: * Update the image: `docker pull lscr.io/linuxserver/heimdall:js`
* Stop the running container: `docker stop heimdall`
```bash * Delete the container: `docker rm heimdall`
docker pull lscr.io/linuxserver/heimdall:development
```
* Stop the running container:
```bash
docker stop heimdall
```
* Delete the container:
```bash
docker rm heimdall
```
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved) * Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* You can also remove the old dangling images: * You can also remove the old dangling images: `docker image prune`
```bash ### Via Watchtower auto-updater (only use if you don't remember the original parameters)
docker image prune
``` * Pull the latest image at its tag and replace it with the same env variables in one run:
```bash
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once heimdall
```
* You can also remove the old dangling images: `docker image prune`
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
### Image Update Notifications - Diun (Docker Image Update Notifier) ### 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. * We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally ## Building locally
@@ -279,7 +229,7 @@ cd docker-heimdall
docker build \ docker build \
--no-cache \ --no-cache \
--pull \ --pull \
-t lscr.io/linuxserver/heimdall:development . -t lscr.io/linuxserver/heimdall:js .
``` ```
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 using `multiarch/qemu-user-static`
@@ -292,24 +242,22 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **07.03.24:** - Enable the opcache and disable file revalidation. * **12.04.21:** - Add experimental `js` tag for v3.
* **06.03.24:** - Existing users should update: site-confs/default.conf - Cleanup default site conf.
* **23.12.23:** - Rebase to Alpine 3.19 with php 8.3.
* **25.05.23:** - Rebase to Alpine 3.18, deprecate armhf.
* **13.04.23:** - Move ssl.conf include to default.conf.
* **20.01.23:** - Rebase to alpine 3.17 with php8.1.
* **14.11.22:** - Rebasing to alpine 3.15 with php8. Restructure nginx configs ([see changes announcement](https://info.linuxserver.io/issues/2022-08-20-nginx-base)).
* **04.11.22:** - Build commits to upstream branch 2.x.
* **13.03.21:** - Make searchproviders.yaml user configurable.
* **11.03.21:** - Rebase to alpine 3.14.
* **10.02.21:** - Revert to alpine 3.12 as php 7.4 broke laravel. * **10.02.21:** - Revert to alpine 3.12 as php 7.4 broke laravel.
* **10.02.21:** - Rebasing to alpine 3.13. * **10.02.21:** - Rebasing to alpine 3.13.
* **17.08.20:** - Add php7-curl.
* **01.06.20:** - Rebasing to alpine 3.12. * **01.06.20:** - Rebasing to alpine 3.12.
* **17.01.20:** - Use nginx from baseimage.
* **19.12.19:** - Rebasing to alpine 3.11. * **19.12.19:** - Rebasing to alpine 3.11.
* **15.07.19:** - Save laravel.log to /config, install heimdall during first start. * **16.07.19:** - Save laravel.log to /config/log/heimdall.
* **28.06.19:** - Rebasing to alpine 3.10. * **28.06.19:** - Rebasing to alpine 3.10.
* **01.04.19:** - Fix permission detect logic.
* **26.03.19:** - Install Heimdall during container start to prevent delayed start due to overlayfs bug with recursive chown.
* **23.03.19:** - Switching to new Base images, shift to arm32v7 tag. * **23.03.19:** - Switching to new Base images, shift to arm32v7 tag.
* **15.03.19:** - Clarify docker image tags in readme.
* **22.02.19:** - Rebasing to alpine 3.9. * **22.02.19:** - Rebasing to alpine 3.9.
* **16.01.18:** - Generate random app key in .env for new installs.
* **20.11.18:** - Upgrade baseimage packages during build.
* **04.11.18:** - Add php7-zip. * **04.11.18:** - Add php7-zip.
* **31.10.18:** - Add queue service. * **31.10.18:** - Add queue service.
* **17.10.18:** - Symlink avatars folder. * **17.10.18:** - Symlink avatars folder.
@@ -317,5 +265,5 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
* **07.10.18:** - Symlink `.env` rather than copy. It now resides under `/config/www` * **07.10.18:** - Symlink `.env` rather than copy. It now resides under `/config/www`
* **30.09.18:** - Multi-arch image. Move `.env` to `/config`. * **30.09.18:** - Multi-arch image. Move `.env` to `/config`.
* **05.09.18:** - Rebase to alpine linux 3.8. * **05.09.18:** - Rebase to alpine linux 3.8.
* **06.03.18:** - Use password protection if htpasswd is set. Existing users can delete their default site config at /config/nginx/site-confs/default.conf and restart the container, a new default site config with htpasswd support will be created in its place * **06.03.18:** - Use password protection if htpasswd is set. Existing users can delete their default site config at /config/nginx/site-confs/default and restart the container, a new default site config with htpasswd support will be created in its place
* **12.02.18:** - Initial Release. * **12.02.18:** - Initial Release.

View File

@@ -4,13 +4,12 @@
project_name: docker-heimdall project_name: docker-heimdall
external_type: github_commit external_type: github_commit
release_type: prerelease release_type: prerelease
release_tag: development release_tag: js
ls_branch: development ls_branch: js
build_armhf: false
repo_vars: repo_vars:
- EXT_GIT_BRANCH = '2.x' - EXT_GIT_BRANCH = 'master'
- EXT_USER = 'linuxserver' - EXT_USER = 'linuxserver'
- EXT_REPO = 'Heimdall' - EXT_REPO = 'heimdalljs'
- CONTAINER_NAME = 'heimdall' - CONTAINER_NAME = 'heimdall'
- BUILD_VERSION_ARG = 'HEIMDALL_RELEASE' - BUILD_VERSION_ARG = 'HEIMDALL_RELEASE'
- LS_USER = 'linuxserver' - LS_USER = 'linuxserver'
@@ -22,7 +21,7 @@ repo_vars:
- MULTIARCH='true' - MULTIARCH='true'
- CI='true' - CI='true'
- CI_WEB='true' - CI_WEB='true'
- CI_PORT='80' - CI_PORT='3000'
- CI_SSL='false' - CI_SSL='false'
- CI_DELAY='120' - CI_DELAY='120'
- CI_DOCKERENV='TZ=US/Pacific' - CI_DOCKERENV='TZ=US/Pacific'

View File

@@ -1,249 +1,699 @@
NAME VERSION TYPE NAME VERSION TYPE
Hidden Input 1, 0, 0, 0 dotnet @mapbox/node-pre-gyp 1.0.3 npm
alpine-baselayout 3.4.3-r2 apk @my-scope/package-a 0.0.0 npm
alpine-baselayout-data 3.4.3-r2 apk @my-scope/package-b 0.0.0 npm
alpine-keys 2.4-r1 apk @quasar/extras 1.10.2 npm
alpine-release 3.19.1-r0 apk @tokenizer/token 0.3.0 npm
apache2-utils 2.4.58-r1 apk @types/color-name 1.1.1 npm
apk-tools 2.14.0-r5 apk @types/node 13.13.4 npm
apr 1.7.4-r0 apk JSONStream 1.3.5 npm
apr-util 1.6.3-r1 apk abbrev 1.1.1 npm
argon2-libs 20190702-r5 apk accepts 1.3.7 npm
aws/aws-crt-php v1.2.4 php-composer agent-base 4.2.1 npm
aws/aws-sdk-php 3.299.1 php-composer agent-base 4.3.0 npm
barryvdh/laravel-ide-helper v2.15.1 php-composer agent-base 6.0.2 npm
barryvdh/reflection-docblock v2.1.1 php-composer agentkeepalive 3.5.2 npm
bash 5.2.21-r0 apk ajv 6.12.6 npm
brick/math 0.11.0 php-composer alpine-baselayout 3.2.0-r8 apk
brotli-libs 1.1.0-r1 apk alpine-keys 2.4-r0 apk
busybox 1.36.1-r15 apk ansi-align 2.0.0 npm
busybox-binsh 1.36.1-r15 apk ansi-escapes 4.3.1 npm
c-ares 1.24.0-r1 apk ansi-regex 2.1.1 npm
ca-certificates 20230506-r0 apk ansi-regex 3.0.0 npm
ca-certificates-bundle 20230506-r0 apk ansi-regex 4.1.0 npm
carbonphp/carbon-doctrine-types 2.1.0 php-composer ansi-regex 4.1.1 npm
clue/stream-filter v1.7.0 php-composer ansi-regex 5.0.0 npm
composer 2.7.1 binary ansi-styles 3.2.1 npm
composer/class-map-generator 1.1.0 php-composer ansi-styles 4.2.1 npm
composer/pcre 3.1.1 php-composer ansicolors 0.3.2 npm
coreutils 9.4-r2 apk ansistyles 0.1.3 npm
coreutils-env 9.4-r2 apk any-promise 1.3.0 npm
coreutils-fmt 9.4-r2 apk apk-tools 2.12.7-r0 apk
coreutils-sha512sum 9.4-r2 apk append-field 1.0.0 npm
curl 8.5.0-r0 apk aproba 1.2.0 npm
dflydev/dot-access-data v3.0.2 php-composer aproba 2.0.0 npm
doctrine/cache 2.2.0 php-composer archy 1.0.0 npm
doctrine/dbal 3.8.2 php-composer are-we-there-yet 1.1.4 npm
doctrine/deprecations 1.1.3 php-composer are-we-there-yet 1.1.5 npm
doctrine/event-manager 2.0.0 php-composer array-flatten 1.1.1 npm
doctrine/inflector 2.0.9 php-composer asap 2.0.6 npm
doctrine/instantiator 2.0.0 php-composer asn1 0.2.4 npm
doctrine/lexer 3.0.1 php-composer assert-plus 1.0.0 npm
dragonmantank/cron-expression v3.3.3 php-composer asynckit 0.4.0 npm
egulias/email-validator 4.0.2 php-composer aws-sign2 0.7.0 npm
fakerphp/faker v1.23.1 php-composer aws4 1.11.0 npm
filp/whoops 2.15.4 php-composer aws4 1.8.0 npm
fruitcake/php-cors v1.3.0 php-composer axios 0.21.1 npm
git 2.43.0-r0 apk balanced-match 1.0.0 npm
graham-campbell/bounded-cache v2.2.0 php-composer base32.js 0.0.1 npm
graham-campbell/github v12.4.0 php-composer base64-js 1.3.1 npm
graham-campbell/manager v5.1.0 php-composer bash 5.1.16-r0 apk
graham-campbell/result-type v1.1.2 php-composer basic-auth 2.0.1 npm
guzzlehttp/guzzle 7.8.1 php-composer bcrypt 5.0.1 npm
guzzlehttp/promises 2.0.2 php-composer bcrypt-pbkdf 1.0.2 npm
guzzlehttp/psr7 2.6.2 php-composer bin-links 1.1.8 npm
guzzlehttp/uri-template v1.0.3 php-composer bl 4.0.3 npm
hamcrest/hamcrest-php v2.0.1 php-composer block-stream 0.0.9 npm
hiredis 1.2.0-r0 apk bluebird 3.5.5 npm
icu-data-en 74.1-r0 apk bluebird 3.7.2 npm
icu-libs 74.1-r0 apk body-parser 1.19.0 npm
jq 1.7.1-r0 apk boxen 1.3.0 npm
knplabs/github-api v3.13.0 php-composer brace-expansion 1.1.11 npm
laravel/framework v10.44.0 php-composer brotli-libs 1.0.9-r3 apk
laravel/prompts v0.1.15 php-composer buffer 5.4.3 npm
laravel/serializable-closure v1.3.3 php-composer buffer 5.6.0 npm
laravel/tinker v2.9.0 php-composer buffer-alloc 1.2.0 npm
laravel/ui v4.4.0 php-composer buffer-alloc-unsafe 1.1.0 npm
laravelcollective/html v6.4.1 php-composer buffer-equal-constant-time 1.0.1 npm
lcobucci/jwt 5.2.0 php-composer buffer-fill 1.0.0 npm
league/commonmark 2.4.2 php-composer buffer-from 1.0.0 npm
league/config v1.2.0 php-composer buffer-from 1.1.1 npm
league/flysystem 3.24.0 php-composer builtins 1.0.3 npm
league/flysystem-aws-s3-v3 3.24.0 php-composer busboy 0.2.14 npm
league/flysystem-local 3.23.1 php-composer busybox 1.32.1 binary
league/mime-type-detection 1.15.0 php-composer busybox 1.32.1-r9 apk
libacl 2.3.1-r4 apk byline 5.0.0 npm
libattr 2.5.1-r5 apk byte-size 5.0.1 npm
libbsd 0.11.7-r3 apk bytes 3.1.0 npm
libbz2 1.0.8-r6 apk c-ares 1.17.2-r0 apk
libc-utils 0.7.2-r5 apk ca-certificates 20220614-r0 apk
libcrypto3 3.1.4-r5 apk ca-certificates-bundle 20220614-r0 apk
libcurl 8.5.0-r0 apk cacache 12.0.3 npm
libedit 20230828.3.1-r3 apk call-limit 1.1.1 npm
libexpat 2.6.0-r0 apk camelcase 4.1.0 npm
libgcc 13.2.1_git20231014-r0 apk camelcase 5.3.1 npm
libidn2 2.3.4-r4 apk capture-stack-trace 1.0.0 npm
libintl 0.22.3-r0 apk caseless 0.12.0 npm
libmd 1.1.0-r0 apk chalk 2.4.1 npm
libncursesw 6.4_p20231125-r0 apk chalk 4.1.0 npm
libpq 16.2-r0 apk chardet 0.7.0 npm
libproc2 4.0.4-r0 apk chownr 1.1.4 npm
libssl3 3.1.4-r5 apk chownr 2.0.0 npm
libstdc++ 13.2.1_git20231014-r0 apk ci-info 1.6.0 npm
libunistring 1.1-r2 apk ci-info 2.0.0 npm
libuuid 2.39.3-r0 apk cidr-regex 2.0.10 npm
libxml2 2.11.7-r0 apk cli-boxes 1.0.0 npm
libzip 1.10.1-r0 apk cli-color 1.4.0 npm
linux-pam 1.5.3-r7 apk cli-columns 3.1.2 npm
logrotate 3.21.0-r1 apk cli-cursor 3.1.0 npm
mockery/mockery 1.6.7 php-composer cli-table3 0.5.1 npm
monolog/monolog 3.5.0 php-composer cli-width 3.0.0 npm
mtdowling/jmespath.php 2.7.0 php-composer cliui 5.0.0 npm
musl 1.2.4_git20230717-r4 apk clone 1.0.4 npm
musl-utils 1.2.4_git20230717-r4 apk cmd-shim 3.0.3 npm
myclabs/deep-copy 1.11.1 php-composer code-point-at 1.1.0 npm
nano 7.2-r1 apk color-convert 1.9.1 npm
ncurses-terminfo-base 6.4_p20231125-r0 apk color-convert 1.9.3 npm
nesbot/carbon 2.72.3 php-composer color-convert 2.0.1 npm
netcat-openbsd 1.226-r0 apk color-name 1.1.3 npm
nette/schema v1.3.0 php-composer color-name 1.1.4 npm
nette/utils v4.0.4 php-composer colors 1.3.3 npm
nghttp2-libs 1.58.0-r0 apk columnify 1.5.4 npm
nginx 1.24.0-r15 apk combined-stream 1.0.6 npm
nikic/php-parser v5.0.0 php-composer combined-stream 1.0.8 npm
nunomaduro/collision v6.4.0 php-composer commander 2.20.3 npm
nunomaduro/termwind v1.15.1 php-composer concat-map 0.0.1 npm
oniguruma 6.9.9-r0 apk concat-stream 1.6.2 npm
openssl 3.1.4-r5 apk config-chain 1.1.12 npm
pcre 8.45-r3 apk configstore 3.1.5 npm
pcre2 10.42-r2 apk console-control-strings 1.1.0 npm
phar-io/manifest 2.0.3 php-composer content-disposition 0.5.3 npm
phar-io/version 3.2.1 php-composer content-type 1.0.4 npm
php-http/cache-plugin 1.8.1 php-composer cookie 0.4.0 npm
php-http/client-common 2.7.1 php-composer cookie-parser 1.4.5 npm
php-http/discovery 1.19.2 php-composer cookie-signature 1.0.6 npm
php-http/httplug 2.4.0 php-composer copy-concurrently 1.0.5 npm
php-http/message 1.16.0 php-composer core-js 3.10.1 npm
php-http/message-factory 1.1.0 php-composer core-util-is 1.0.2 npm
php-http/multipart-stream-builder 1.3.0 php-composer coreutils 8.32-r2 apk
php-http/promise 1.3.0 php-composer cors 2.8.5 npm
php83 8.3.3-r0 apk create-error-class 3.0.2 npm
php83-common 8.3.3-r0 apk cross-spawn 5.1.0 npm
php83-ctype 8.3.3-r0 apk crypto-random-string 1.0.0 npm
php83-curl 8.3.3-r0 apk curl 7.79.1-r3 apk
php83-dom 8.3.3-r0 apk cyclist 0.2.2 npm
php83-fileinfo 8.3.3-r0 apk d 1.0.1 npm
php83-fpm 8.3.3-r0 apk dashdash 1.14.1 npm
php83-iconv 8.3.3-r0 apk debug 2.6.9 npm
php83-intl 8.3.3-r0 apk debug 3.1.0 npm
php83-mbstring 8.3.3-r0 apk debug 3.2.7 npm
php83-mysqlnd 8.3.3-r0 apk debug 4.3.1 npm
php83-opcache 8.3.3-r0 apk debuglog 1.0.1 npm
php83-openssl 8.3.3-r0 apk decamelize 1.2.0 npm
php83-pdo 8.3.3-r0 apk decode-uri-component 0.2.0 npm
php83-pdo_mysql 8.3.3-r0 apk deep-extend 0.6.0 npm
php83-pdo_pgsql 8.3.3-r0 apk defaults 1.0.3 npm
php83-pdo_sqlite 8.3.3-r0 apk define-properties 1.1.3 npm
php83-phar 8.3.3-r0 apk delayed-stream 1.0.0 npm
php83-session 8.3.3-r0 apk delegates 1.0.0 npm
php83-simplexml 8.3.3-r0 apk denque 1.5.1 npm
php83-tokenizer 8.3.3-r0 apk depd 1.1.2 npm
php83-xml 8.3.3-r0 apk depd 2.0.0 npm
php83-xmlwriter 8.3.3-r0 apk destroy 1.0.4 npm
php83-zip 8.3.3-r0 apk detect-indent 5.0.0 npm
phpdocumentor/reflection-common 2.2.0 php-composer detect-libc 1.0.3 npm
phpdocumentor/type-resolver 1.8.0 php-composer detect-newline 2.1.0 npm
phpoption/phpoption 1.9.2 php-composer dezalgo 1.0.3 npm
phpstan/phpdoc-parser 1.25.0 php-composer dicer 0.2.5 npm
phpunit/php-code-coverage 9.2.30 php-composer dijkstrajs 1.0.1 npm
phpunit/php-file-iterator 3.0.6 php-composer docker-modem 2.1.4 npm
phpunit/php-invoker 3.1.1 php-composer dockerode 3.2.1 npm
phpunit/php-text-template 2.0.4 php-composer dot-prop 4.2.1 npm
phpunit/php-timer 5.0.3 php-composer dotenv 5.0.1 npm
phpunit/phpunit 9.6.16 php-composer dotenv 8.2.0 npm
popt 1.19-r3 apk dottie 2.0.2 npm
procps-ng 4.0.4-r0 apk duplexer3 0.1.4 npm
psr/cache 3.0.0 php-composer duplexify 3.6.0 npm
psr/clock 1.0.0 php-composer ecc-jsbn 0.1.2 npm
psr/container 2.0.2 php-composer ecdsa-sig-formatter 1.0.11 npm
psr/event-dispatcher 1.0.0 php-composer editor 1.0.0 npm
psr/http-client 1.0.3 php-composer editorconfig 0.15.3 npm
psr/http-factory 1.0.2 php-composer ee-first 1.1.1 npm
psr/http-message 2.0 php-composer emoji-regex 7.0.3 npm
psr/log 3.0.0 php-composer emoji-regex 8.0.0 npm
psr/simple-cache 3.0.0 php-composer encodeurl 1.0.2 npm
psy/psysh v0.12.0 php-composer encoding 0.1.12 npm
ralouphie/getallheaders 3.0.3 php-composer end-of-stream 1.4.1 npm
ramsey/collection 2.0.0 php-composer end-of-stream 1.4.4 npm
ramsey/uuid 4.7.5 php-composer env-paths 2.2.0 npm
readline 8.2.1-r2 apk err-code 1.1.2 npm
scanelf 1.3.7-r2 apk errno 0.1.7 npm
sebastian/cli-parser 1.0.1 php-composer es-abstract 1.12.0 npm
sebastian/code-unit 1.0.8 php-composer es-to-primitive 1.2.0 npm
sebastian/code-unit-reverse-lookup 2.0.3 php-composer es5-ext 0.10.53 npm
sebastian/comparator 4.0.8 php-composer es6-iterator 2.0.3 npm
sebastian/complexity 2.0.3 php-composer es6-promise 4.2.8 npm
sebastian/diff 4.0.5 php-composer es6-promisify 5.0.0 npm
sebastian/environment 5.1.5 php-composer es6-symbol 3.1.3 npm
sebastian/exporter 4.0.5 php-composer es6-weak-map 2.0.3 npm
sebastian/global-state 5.0.6 php-composer escape-html 1.0.3 npm
sebastian/lines-of-code 1.0.4 php-composer escape-string-regexp 1.0.5 npm
sebastian/object-enumerator 4.0.4 php-composer etag 1.8.1 npm
sebastian/object-reflector 2.0.4 php-composer event-emitter 0.3.5 npm
sebastian/recursion-context 4.0.5 php-composer execa 0.7.0 npm
sebastian/resource-operations 3.0.3 php-composer express 4.17.1 npm
sebastian/type 3.2.1 php-composer ext 1.4.0 npm
sebastian/version 3.0.2 php-composer extend 3.0.2 npm
shadow 4.14.2-r0 apk external-editor 3.1.0 npm
skalibs 2.14.0.1-r0 apk extsprintf 1.3.0 npm
spatie/backtrace 1.5.3 php-composer fast-deep-equal 3.1.1 npm
spatie/flare-client-php 1.4.4 php-composer fast-deep-equal 3.1.3 npm
spatie/ignition 1.12.0 php-composer fast-json-stable-stringify 2.0.0 npm
spatie/laravel-ignition 2.4.2 php-composer fast-json-stable-stringify 2.1.0 npm
sqlite-libs 3.44.2-r0 apk figgy-pudding 3.5.1 npm
squizlabs/php_codesniffer 3.9.0 php-composer figures 3.2.0 npm
ssl_client 1.36.1-r15 apk file-type 16.5.3 npm
symfony/cache v6.4.3 php-composer finalhandler 1.1.2 npm
symfony/cache-contracts v3.4.0 php-composer find-npm-prefix 1.0.2 npm
symfony/console v6.4.3 php-composer find-up 3.0.0 npm
symfony/css-selector v7.0.3 php-composer flush-write-stream 1.0.3 npm
symfony/deprecation-contracts v3.4.0 php-composer follow-redirects 1.13.0 npm
symfony/error-handler v6.4.3 php-composer forever-agent 0.6.1 npm
symfony/event-dispatcher v7.0.3 php-composer form-data 2.3.2 npm
symfony/event-dispatcher-contracts v3.4.0 php-composer form-data 2.3.3 npm
symfony/finder v6.4.0 php-composer forwarded 0.1.2 npm
symfony/http-foundation v6.4.3 php-composer fresh 0.5.2 npm
symfony/http-kernel v6.4.3 php-composer from2 1.3.0 npm
symfony/mailer v6.4.3 php-composer from2 2.3.0 npm
symfony/mime v6.4.3 php-composer fs-constants 1.0.0 npm
symfony/options-resolver v7.0.0 php-composer fs-extra 7.0.1 npm
symfony/polyfill-ctype v1.29.0 php-composer fs-minipass 1.2.7 npm
symfony/polyfill-intl-grapheme v1.29.0 php-composer fs-minipass 2.1.0 npm
symfony/polyfill-intl-idn v1.29.0 php-composer fs-vacuum 1.2.10 npm
symfony/polyfill-intl-normalizer v1.29.0 php-composer fs-write-stream-atomic 1.0.10 npm
symfony/polyfill-mbstring v1.29.0 php-composer fs.realpath 1.0.0 npm
symfony/polyfill-php72 v1.29.0 php-composer fstream 1.0.12 npm
symfony/polyfill-php80 v1.29.0 php-composer function-bind 1.1.1 npm
symfony/polyfill-php83 v1.29.0 php-composer gauge 2.7.4 npm
symfony/polyfill-uuid v1.29.0 php-composer generate-function 2.3.1 npm
symfony/process v6.4.3 php-composer genfun 5.0.0 npm
symfony/routing v6.4.3 php-composer gentle-fs 2.3.1 npm
symfony/service-contracts v3.4.1 php-composer get-caller-file 2.0.5 npm
symfony/string v7.0.3 php-composer get-stream 3.0.0 npm
symfony/thanks v1.2.10 php-composer get-stream 4.1.0 npm
symfony/translation v6.4.3 php-composer getpass 0.1.7 npm
symfony/translation-contracts v3.4.1 php-composer glob 7.1.6 npm
symfony/uid v6.4.3 php-composer global-dirs 0.1.1 npm
symfony/var-dumper v6.4.3 php-composer got 6.7.1 npm
symfony/var-exporter v7.0.3 php-composer graceful-fs 4.2.3 npm
symfony/yaml v6.4.3 php-composer graceful-fs 4.2.4 npm
theseer/tokenizer 1.2.2 php-composer har-schema 2.0.0 npm
tijsverkoyen/css-to-inline-styles v2.2.7 php-composer har-validator 5.1.5 npm
tzdata 2024a-r0 apk has 1.0.3 npm
utmps-libs 0.1.2.2-r0 apk has-flag 3.0.0 npm
vlucas/phpdotenv v5.6.0 php-composer has-flag 4.0.0 npm
voku/portable-ascii 2.0.1 php-composer has-symbols 1.0.0 npm
webmozart/assert 1.11.0 php-composer has-unicode 2.0.1 npm
xz-libs 5.4.5-r0 apk heimdall 3.0.0 npm
zlib 1.3.1-r0 apk hosted-git-info 2.8.9 npm
zstd-libs 1.5.5-r8 apk http-cache-semantics 3.8.1 npm
http-errors 1.7.2 npm
http-proxy-agent 2.1.0 npm
http-signature 1.2.0 npm
https-proxy-agent 2.2.4 npm
https-proxy-agent 5.0.0 npm
humanize-ms 1.2.1 npm
iconv-lite 0.4.23 npm
iconv-lite 0.4.24 npm
iconv-lite 0.6.3 npm
ieee754 1.2.1 npm
iferr 0.1.5 npm
iferr 1.0.2 npm
ignore-walk 3.0.3 npm
import-lazy 2.1.0 npm
imurmurhash 0.1.4 npm
infer-owner 1.0.4 npm
inflection 1.12.0 npm
inflight 1.0.6 npm
inherits 2.0.3 npm
inherits 2.0.4 npm
ini 1.3.8 npm
init-package-json 1.10.3 npm
inquirer 7.3.3 npm
ip 1.1.5 npm
ip-regex 2.1.0 npm
ipaddr.js 1.9.0 npm
is-callable 1.1.4 npm
is-ci 1.2.1 npm
is-cidr 3.0.0 npm
is-date-object 1.0.1 npm
is-fullwidth-code-point 1.0.0 npm
is-fullwidth-code-point 2.0.0 npm
is-fullwidth-code-point 3.0.0 npm
is-installed-globally 0.1.0 npm
is-npm 1.0.0 npm
is-obj 1.0.1 npm
is-path-inside 1.0.1 npm
is-promise 2.2.2 npm
is-property 1.0.2 npm
is-redirect 1.0.0 npm
is-regex 1.0.4 npm
is-retry-allowed 1.2.0 npm
is-stream 1.1.0 npm
is-symbol 1.0.2 npm
is-typedarray 1.0.0 npm
isarray 0.0.1 npm
isarray 1.0.0 npm
isarray 2.0.5 npm
isexe 2.0.0 npm
isstream 0.1.2 npm
js-beautify 1.13.0 npm
jsbn 0.1.1 npm
json-parse-better-errors 1.0.2 npm
json-schema 0.2.3 npm
json-schema 0.4.0 npm
json-schema-traverse 0.4.1 npm
json-stringify-safe 5.0.1 npm
jsonfile 4.0.0 npm
jsonparse 1.3.1 npm
jsonwebtoken 8.5.1 npm
jsprim 1.4.1 npm
jsprim 1.4.2 npm
jwa 1.4.1 npm
jws 3.2.2 npm
latest-version 3.1.0 npm
lazy-property 1.0.0 npm
libacl 2.2.53-r0 apk
libattr 2.4.48-r0 apk
libc-utils 0.7.2-r3 apk
libcipm 4.0.8 npm
libcrypto1.1 1.1.1s-r0 apk
libcurl 7.79.1-r3 apk
libgcc 10.2.1_pre1-r3 apk
libintl 0.20.2-r2 apk
libnpm 3.0.1 npm
libnpmaccess 3.0.2 npm
libnpmconfig 1.2.1 npm
libnpmhook 5.0.3 npm
libnpmorg 1.0.1 npm
libnpmpublish 1.1.2 npm
libnpmsearch 2.0.2 npm
libnpmteam 1.0.2 npm
libnpx 10.2.4 npm
libproc 3.3.16-r0 apk
libssl1.1 1.1.1s-r0 apk
libstdc++ 10.2.1_pre1-r3 apk
libtls-standalone 2.9.1-r1 apk
linux-pam 1.5.1-r0 apk
locate-path 3.0.0 npm
lock-verify 2.1.0 npm
lockfile 1.0.4 npm
lodash 4.17.21 npm
lodash._baseindexof 3.1.0 npm
lodash._baseuniq 4.6.0 npm
lodash._bindcallback 3.0.1 npm
lodash._cacheindexof 3.0.2 npm
lodash._createcache 3.1.2 npm
lodash._createset 4.0.3 npm
lodash._getnative 3.9.1 npm
lodash._root 3.0.1 npm
lodash.clonedeep 4.5.0 npm
lodash.includes 4.3.0 npm
lodash.isboolean 3.0.3 npm
lodash.isinteger 4.0.4 npm
lodash.isnumber 3.0.3 npm
lodash.isplainobject 4.0.6 npm
lodash.isstring 4.0.1 npm
lodash.once 4.1.1 npm
lodash.restparam 3.6.1 npm
lodash.union 4.6.0 npm
lodash.uniq 4.5.0 npm
lodash.without 4.4.0 npm
long 4.0.0 npm
lowercase-keys 1.0.1 npm
lru-cache 4.1.5 npm
lru-cache 5.1.1 npm
lru-cache 6.0.0 npm
lru-queue 0.1.0 npm
make-dir 1.3.0 npm
make-dir 3.1.0 npm
make-fetch-happen 5.0.2 npm
meant 1.0.2 npm
media-typer 0.3.0 npm
memoizee 0.4.14 npm
merge-descriptors 1.0.1 npm
methods 1.1.2 npm
mime 1.6.0 npm
mime-db 1.35.0 npm
mime-db 1.47.0 npm
mime-types 2.1.19 npm
mime-types 2.1.30 npm
mimic-fn 2.1.0 npm
minimatch 3.0.4 npm
minimist 1.2.5 npm
minimist 1.2.6 npm
minipass 2.9.0 npm
minipass 3.1.3 npm
minizlib 1.3.3 npm
minizlib 2.1.2 npm
mississippi 3.0.0 npm
mkdirp 0.5.5 npm
mkdirp 1.0.4 npm
mkdirp-classic 0.5.3 npm
moment 2.29.1 npm
moment-timezone 0.5.33 npm
monorepo-symlink-test 0.0.0 npm
morgan 1.10.0 npm
move-concurrently 1.0.1 npm
ms 2.0.0 npm
ms 2.1.1 npm
ms 2.1.2 npm
ms 2.1.3 npm
multer 1.4.2 npm
musl 1.2.2-r2 apk
musl-utils 1.2.2-r2 apk
mute-stream 0.0.7 npm
mute-stream 0.0.8 npm
mylib 0.0.0 npm
mysql2 2.3.0 npm
named-placeholders 1.1.2 npm
ncurses-libs 6.2_p20210109-r1 apk
ncurses-terminfo-base 6.2_p20210109-r1 apk
needle 2.6.0 npm
negotiator 0.6.2 npm
next-tick 1.0.0 npm
nghttp2-libs 1.42.0-r1 apk
node 14.20.1 binary
node-addon-api 3.1.0 npm
node-fetch 2.6.1 npm
node-fetch-npm 2.0.2 npm
node-gyp 3.8.0 npm
node-gyp 5.1.0 npm
node-pre-gyp 0.11.0 npm
nodejs 14.20.1-r0 apk
nopt 3.0.6 npm
nopt 4.0.3 npm
nopt 5.0.0 npm
normalize-package-data 2.5.0 npm
npm 14.20.1-r0 apk
npm 6.14.17 npm
npm-audit-report 1.3.3 npm
npm-bundled 1.1.1 npm
npm-cache-filename 1.0.2 npm
npm-init 0.0.0 npm
npm-install-checks 3.0.2 npm
npm-lifecycle 3.1.5 npm
npm-logical-tree 1.2.1 npm
npm-normalize-package-bin 1.0.1 npm
npm-package-arg 6.1.1 npm
npm-packlist 1.4.8 npm
npm-pick-manifest 3.0.2 npm
npm-profile 4.0.4 npm
npm-registry-fetch 4.0.7 npm
npm-run-path 2.0.2 npm
npm-user-validate 1.0.1 npm
npmlog 4.1.2 npm
number-is-nan 1.0.1 npm
nw-pre-gyp-module-test 0.0.1 npm
oauth-sign 0.9.0 npm
object-assign 4.1.1 npm
object-keys 1.0.12 npm
object.getownpropertydescriptors 2.0.3 npm
on-finished 2.3.0 npm
on-headers 1.0.2 npm
once 1.4.0 npm
onetime 5.1.0 npm
opener 1.5.2 npm
os-homedir 1.0.2 npm
os-tmpdir 1.0.2 npm
osenv 0.1.5 npm
p-finally 1.0.0 npm
p-limit 2.2.0 npm
p-limit 2.2.2 npm
p-limit 2.3.0 npm
p-locate 3.0.0 npm
p-try 2.2.0 npm
package-json 4.0.1 npm
pacote 9.5.12 npm
parallel-transform 1.1.0 npm
parseurl 1.3.3 npm
passport 0.4.1 npm
passport-jwt 4.0.0 npm
passport-strategy 1.0.0 npm
path-exists 3.0.0 npm
path-is-absolute 1.0.1 npm
path-is-inside 1.0.2 npm
path-key 2.0.1 npm
path-parse 1.0.6 npm
path-parse 1.0.7 npm
path-to-regexp 0.1.7 npm
pause 0.0.1 npm
peek-readable 4.0.1 npm
performance-now 2.1.0 npm
pify 3.0.0 npm
pngjs 3.4.0 npm
prepend-http 1.0.4 npm
process-nextick-args 2.0.0 npm
process-nextick-args 2.0.1 npm
procps 3.3.16-r0 apk
promise-inflight 1.0.1 npm
promise-retry 1.1.1 npm
promzard 0.3.0 npm
proto-list 1.2.4 npm
protoduck 5.0.1 npm
proxy-addr 2.0.5 npm
prr 1.0.1 npm
pseudomap 1.0.2 npm
psl 1.1.29 npm
psl 1.8.0 npm
pump 2.0.1 npm
pump 3.0.0 npm
pumpify 1.5.1 npm
punycode 1.4.1 npm
punycode 2.1.1 npm
qrcode 1.4.4 npm
qrcode-terminal 0.12.0 npm
qs 6.5.2 npm
qs 6.7.0 npm
quasar 1.15.10 npm
query-string 6.8.2 npm
qw 1.0.1 npm
range-parser 1.2.1 npm
raw-body 2.4.0 npm
rc 1.2.8 npm
read 1.0.7 npm
read-cmd-shim 1.0.5 npm
read-installed 4.0.3 npm
read-package-json 2.1.1 npm
read-package-tree 5.3.1 npm
readable-stream 1.1.14 npm
readable-stream 2.3.6 npm
readable-stream 2.3.7 npm
readable-stream 3.6.0 npm
readable-web-to-node-stream 3.0.2 npm
readdir-scoped-modules 1.1.0 npm
readline 8.1.0-r0 apk
registry-auth-token 3.4.0 npm
registry-url 3.1.0 npm
request 2.88.0 npm
request 2.88.2 npm
require-directory 2.1.1 npm
require-main-filename 2.0.0 npm
resolve 1.10.0 npm
resolve 1.15.1 npm
resolve-from 4.0.0 npm
restore-cursor 3.1.0 npm
retry 0.10.1 npm
retry 0.12.0 npm
retry-as-promised 3.2.0 npm
rimraf 2.7.1 npm
rimraf 3.0.2 npm
run-async 2.4.1 npm
run-queue 1.0.3 npm
rxjs 6.6.2 npm
s6-ipcserver 2.10.0.0-r0 apk
safe-buffer 5.1.2 npm
safe-buffer 5.2.0 npm
safe-buffer 5.2.1 npm
safer-buffer 2.1.2 npm
sax 1.2.4 npm
scanelf 1.2.8-r0 apk
semver 5.3.0 npm
semver 5.7.1 npm
semver 6.3.0 npm
semver 7.3.5 npm
semver-diff 2.1.0 npm
send 0.17.1 npm
seq-queue 0.0.5 npm
sequelize 6.6.2 npm
sequelize-cli 6.2.0 npm
sequelize-pool 6.1.0 npm
serve-static 1.14.1 npm
set-blocking 2.0.0 npm
setprototypeof 1.1.1 npm
sha 3.0.0 npm
shadow 4.8.1-r0 apk
shebang-command 1.2.0 npm
shebang-regex 1.0.0 npm
sigmund 1.0.1 npm
signal-exit 3.0.2 npm
skalibs 2.10.0.0-r0 apk
slide 1.1.6 npm
smart-buffer 4.1.0 npm
socks 2.3.3 npm
socks-proxy-agent 4.0.2 npm
sortablejs 1.10.2 npm
sorted-object 2.0.1 npm
sorted-union-stream 2.1.3 npm
spdx-correct 3.0.0 npm
spdx-exceptions 2.1.0 npm
spdx-expression-parse 3.0.0 npm
spdx-license-ids 3.0.5 npm
speakeasy 2.0.0 npm
split-ca 1.0.1 npm
split-on-first 1.1.0 npm
sqlite3 5.0.2 npm
sqlstring 2.3.2 npm
ssh2 0.8.9 npm
ssh2-streams 0.4.10 npm
sshpk 1.14.2 npm
sshpk 1.16.1 npm
ssl_client 1.32.1-r9 apk
ssri 6.0.2 npm
statuses 1.5.0 npm
stream-each 1.2.2 npm
stream-iterate 1.2.0 npm
stream-shift 1.0.0 npm
streamsearch 0.1.2 npm
strict-uri-encode 2.0.0 npm
string-width 1.0.2 npm
string-width 2.1.1 npm
string-width 3.1.0 npm
string-width 4.2.0 npm
string_decoder 0.10.31 npm
string_decoder 1.1.1 npm
string_decoder 1.3.0 npm
stringify-package 1.0.1 npm
strip-ansi 3.0.1 npm
strip-ansi 4.0.0 npm
strip-ansi 5.2.0 npm
strip-ansi 6.0.0 npm
strip-eof 1.0.0 npm
strip-json-comments 2.0.1 npm
strtok3 6.2.4 npm
supports-color 5.4.0 npm
supports-color 7.2.0 npm
tar 2.2.2 npm
tar 4.4.13 npm
tar 4.4.19 npm
tar 6.1.0 npm
tar-fs 2.0.1 npm
tar-stream 2.1.2 npm
term-size 1.2.0 npm
text-table 0.2.0 npm
through 2.3.8 npm
through2 2.0.3 npm
timed-out 4.0.1 npm
timers-ext 0.1.7 npm
tiny-relative-date 1.3.0 npm
tmp 0.0.33 npm
toidentifier 1.0.0 npm
token-types 4.1.1 npm
toposort-class 1.0.1 npm
tough-cookie 2.4.3 npm
tough-cookie 2.5.0 npm
tslib 1.10.0 npm
tunnel-agent 0.6.0 npm
tweetnacl 0.14.5 npm
type 1.2.0 npm
type 2.1.0 npm
type-fest 0.11.0 npm
type-is 1.6.18 npm
typedarray 0.0.6 npm
tzdata 2022f-r1 apk
uid-number 0.0.6 npm
umask 1.1.0 npm
umzug 2.3.0 npm
unique-filename 1.1.1 npm
unique-slug 2.0.0 npm
unique-string 1.0.0 npm
universalify 0.1.2 npm
unpipe 1.0.0 npm
unzip-response 2.0.1 npm
update-notifier 2.5.0 npm
uri-js 4.2.2 npm
uri-js 4.4.0 npm
url-parse-lax 1.0.0 npm
util-deprecate 1.0.2 npm
util-extend 1.0.3 npm
util-promisify 2.1.0 npm
utils-merge 1.0.1 npm
utmps 0.1.0.0-r0 apk
uuid 3.3.3 npm
uuid 3.4.0 npm
uuid 8.3.2 npm
validate-npm-package-license 3.0.4 npm
validate-npm-package-name 3.0.0 npm
validator 10.11.0 npm
vary 1.1.2 npm
verror 1.10.0 npm
vue-async-computed 3.9.0 npm
vue-i18n 8.24.3 npm
vuedraggable 2.24.3 npm
wcwidth 1.0.1 npm
which 1.3.1 npm
which-module 2.0.0 npm
wide-align 1.1.2 npm
wide-align 1.1.3 npm
widest-line 2.0.1 npm
wkx 0.5.0 npm
worker-farm 1.7.0 npm
wrap-ansi 5.1.0 npm
wrappy 1.0.2 npm
write-file-atomic 2.4.3 npm
xdg-basedir 3.0.0 npm
xtend 4.0.1 npm
xtend 4.0.2 npm
xz 5.2.5-r1 apk
xz-libs 5.2.5-r1 apk
y18n 4.0.1 npm
y18n 4.0.3 npm
yallist 2.1.2 npm
yallist 3.0.3 npm
yallist 3.1.1 npm
yallist 4.0.0 npm
yargs 13.3.0 npm
yargs 14.2.3 npm
yargs-parser 13.1.2 npm
yargs-parser 15.0.1 npm
zlib 1.2.12-r3 apk

View File

@@ -4,48 +4,42 @@
project_name: heimdall project_name: heimdall
project_url: "https://heimdall.site" project_url: "https://heimdall.site"
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/heimdall-banner.png" project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/heimdall-banner.png"
project_blurb: | project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is a way to organise all those links to your most used web sites and web applications in a simple way.
[{{ project_name|capitalize }}]({{ project_url }}) is a way to organise all those links to your most used web sites and web applications in a simple way.
Simplicity is the key to Heimdall. Simplicity is the key to Heimdall.
Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo."
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
# supported architectures # supported architectures
available_architectures: available_architectures:
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} - { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} - { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- { arch: "{{ arch_armhf }}", tag: "arm32v7-latest"}
project_deprecation_status: true
project_deprecation_message: |
We recommend switching to the latest tag
# development version # development version
development_versions: true development_versions: true
development_versions_items: development_versions_items:
- { tag: "latest", desc: "Stable Heimdall releases." } - { tag: "latest", desc: "Stable Heimdall releases." }
- { tag: "development", desc: "Latest commit from the github 2.x branch." } - { tag: "development", desc: "Latest commit from the github master branch." }
# container parameters # container parameters
common_param_env_vars_enabled: true common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}" param_container_name: "{{ project_name }}"
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: 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/appdata/config", desc: "Contains all relevant configuration files." }
param_usage_include_ports: true param_usage_include_ports: true
param_ports: param_ports:
- { external_port: "80", internal_port: "80", port_desc: "http gui" } - { external_port: "3000", internal_port: "3000", port_desc: "http gui" }
- { external_port: "443", internal_port: "443", port_desc: "https gui" }
param_usage_include_env: true param_usage_include_env: true
param_env_vars: param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London"} - { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London"}
# optional parameters
optional_block_1: false
optional_block_1_items:
- |
Using tags, you can switch between the stable releases of Heimdall and the master branch. No tag is required for the latest stable release.
Add the development tag, if required, to the linuxserver/heimdall line of the run/create command in the following format, linuxserver/heimdall:development
The development tag will be the latest commit in the master branch of Heimdall.
HOWEVER , USE THE DEVELOPMENT TAG AT YOUR OWN PERIL !!!!!!!!!
# application setup block # application setup block
app_setup_block_enabled: true app_setup_block_enabled: true
app_setup_block: | app_setup_block: |
@@ -54,28 +48,26 @@ app_setup_block: |
### Adding password protection ### Adding password protection
This image now supports password protection through htpasswd. Run the following command on your host to generate the htpasswd file `docker exec -it heimdall htpasswd -c /config/nginx/.htpasswd <username>`. Replace <username> with a username of your choice and you will be asked to enter a password. Uncomment the `basic auth` lines in `/config/nginx/site-confs/default.conf` and restart the container. This image now supports password protection through htpasswd. Run the following command on your host to generate the htpasswd file `docker exec -it heimdall htpasswd -c /config/nginx/.htpasswd <username>`. Replace <username> with a username of your choice and you will be asked to enter a password. New installs will automatically pick it up and implement password protected access. Existing users updating their image can delete their site config at `/config/nginx/site-confs/default` and restart the container after updating the image. A new site config with htpasswd support will be created in its place.
# changelog # changelog
changelogs: changelogs:
- { date: "07.03.24:", desc: "Enable the opcache and disable file revalidation."} - { date: "12.04.21:", desc: "Add experimental `js` tag for v3." }
- { date: "06.03.24:", desc: "Existing users should update: site-confs/default.conf - Cleanup default site conf." }
- { date: "23.12.23:", desc: "Rebase to Alpine 3.19 with php 8.3."}
- { date: "25.05.23:", desc: "Rebase to Alpine 3.18, deprecate armhf." }
- { date: "13.04.23:", desc: "Move ssl.conf include to default.conf." }
- { date: "20.01.23:", desc: "Rebase to alpine 3.17 with php8.1." }
- { date: "14.11.22:", desc: "Rebasing to alpine 3.15 with php8. Restructure nginx configs ([see changes announcement](https://info.linuxserver.io/issues/2022-08-20-nginx-base))." }
- { date: "04.11.22:", desc: "Build commits to upstream branch 2.x." }
- { date: "13.03.21:", desc: "Make searchproviders.yaml user configurable." }
- { date: "11.03.21:", desc: "Rebase to alpine 3.14." }
- { date: "10.02.21:", desc: "Revert to alpine 3.12 as php 7.4 broke laravel." } - { date: "10.02.21:", desc: "Revert to alpine 3.12 as php 7.4 broke laravel." }
- { date: "10.02.21:", desc: "Rebasing to alpine 3.13." } - { date: "10.02.21:", desc: "Rebasing to alpine 3.13." }
- { date: "17.08.20:", desc: "Add php7-curl." }
- { date: "01.06.20:", desc: "Rebasing to alpine 3.12." } - { date: "01.06.20:", desc: "Rebasing to alpine 3.12." }
- { date: "17.01.20:", desc: "Use nginx from baseimage." }
- { date: "19.12.19:", desc: "Rebasing to alpine 3.11." } - { date: "19.12.19:", desc: "Rebasing to alpine 3.11." }
- { date: "15.07.19:", desc: "Save laravel.log to /config, install heimdall during first start." } - { date: "16.07.19:", desc: "Save laravel.log to /config/log/heimdall." }
- { date: "28.06.19:", desc: "Rebasing to alpine 3.10." } - { date: "28.06.19:", desc: "Rebasing to alpine 3.10." }
- { date: "01.04.19:", desc: "Fix permission detect logic." }
- { date: "26.03.19:", desc: "Install Heimdall during container start to prevent delayed start due to overlayfs bug with recursive chown." }
- { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." } - { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." }
- { date: "15.03.19:", desc: "Clarify docker image tags in readme." }
- { date: "22.02.19:", desc: "Rebasing to alpine 3.9." } - { date: "22.02.19:", desc: "Rebasing to alpine 3.9." }
- { date: "16.01.18:", desc: "Generate random app key in .env for new installs." }
- { date: "20.11.18:", desc: "Upgrade baseimage packages during build." }
- { date: "04.11.18:", desc: "Add php7-zip." } - { date: "04.11.18:", desc: "Add php7-zip." }
- { date: "31.10.18:", desc: "Add queue service." } - { date: "31.10.18:", desc: "Add queue service." }
- { date: "17.10.18:", desc: "Symlink avatars folder." } - { date: "17.10.18:", desc: "Symlink avatars folder." }
@@ -83,5 +75,5 @@ changelogs:
- { date: "07.10.18:", desc: "Symlink `.env` rather than copy. It now resides under `/config/www`" } - { date: "07.10.18:", desc: "Symlink `.env` rather than copy. It now resides under `/config/www`" }
- { date: "30.09.18:", desc: "Multi-arch image. Move `.env` to `/config`." } - { date: "30.09.18:", desc: "Multi-arch image. Move `.env` to `/config`." }
- { date: "05.09.18:", desc: "Rebase to alpine linux 3.8." } - { date: "05.09.18:", desc: "Rebase to alpine linux 3.8." }
- { date: "06.03.18:", desc: "Use password protection if htpasswd is set. Existing users can delete their default site config at /config/nginx/site-confs/default.conf and restart the container, a new default site config with htpasswd support will be created in its place" } - { date: "06.03.18:", desc: "Use password protection if htpasswd is set. Existing users can delete their default site config at /config/nginx/site-confs/default and restart the container, a new default site config with htpasswd support will be created in its place" }
- { date: "12.02.18:", desc: "Initial Release." } - { date: "12.02.18:", desc: "Initial Release." }

View File

@@ -1,41 +0,0 @@
## Version 2024/03/06 - Changelog: https://github.com/linuxserver/docker-heimdall/commits/master/root/defaults/nginx/site-confs/default.conf.sample
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
include /config/nginx/ssl.conf;
root /app/www/public;
index index.html index.htm index.php;
location / {
# enable for basic auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args;
}
location ~ ^(.+\.php)(.*)$ {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
fastcgi_split_path_info ^(.+\.php)(.*)$;
if (!-f $document_root$fastcgi_script_name) { return 404; }
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
# deny access to .htaccess/.htpasswd files
location ~ /\.ht {
deny all;
}
}

View File

@@ -0,0 +1,32 @@
#!/usr/bin/with-contenv bash
mkdir -p /config/uploads
if [ ! -f "/config/env" ]; then
cp /app/heimdall/.env.example /config/env
rm -rf /app/heimdall/.env
ln -sf /config/env /app/heimdall/.env
SECRET_KEY=$(date +%s | sha256sum | base64 | head -c 32)
sed -i 's|JWT_SECRET=CHANGE_ME|JWT_SECRET='${SECRET_KEY}'|g' /config/env
sed -i 's|DB_TYPE=mysql|DB_TYPE=sqlite|g' /config/env
sed -i 's|DB_STORAGE=$|DB_STORAGE=/config/app.db|g' /config/env
sed -i 's|UPLOAD_DIR=$|UPLOAD_DIR=/config/uploads|g' /config/env
echo "Running migrations. . ."
cd /app/heimdall
npm run db:migrate
npm run db:seed
else
cd /app/heimdall
npm run db:migrate
fi
# permissions
echo "Fixing /config permissions. . ."
chown -R abc:abc \
/config
# chown the app directory, but not node_modules
echo "Fixing app permissions. . ."
find /app/heimdall -maxdepth 1 ! -name node_modules ! -name heimdall -exec chown -R abc:abc '{}' \;

View File

@@ -0,0 +1,18 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
echo '
╔════════════════════════════════════════════════════╗
╠════════════════════════════════════════════════════╣
║ ║
║ This image is deprecated. ║
║ We will not offer support for this image ║
║ and it will not be updated. ║
║ ║
╠════════════════════════════════════════════════════╣
╚════════════════════════════════════════════════════╝
We recommend switching to the latest tag
══════════════════════════════════════════════════════'

View File

@@ -1,59 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# make our folders
mkdir -p \
/config/www/{avatars,backgrounds,icons,logs,SupportedApps} \
/config/log/heimdall
# install heimdall if necessary
if [[ -d /app/www-tmp ]]; then
echo "New container detected, installing Heimdall"
mv /app/www-tmp /app/www
cp /app/www/storage/app/searchproviders.yaml /app/www/storage/app/searchproviders.yaml.orig
touch /app/set-perms
fi
# create symlinks
symlinks=(
/app/www/storage/app/public/avatars
/app/www/storage/app/public/backgrounds
/app/www/storage/app/public/icons
/app/www/storage/logs
/app/www/app/SupportedApps
/app/www/database/app.sqlite
/app/www/.env
)
for i in "${symlinks[@]}"; do
if [[ -e "${i}" && ! -L "${i}" ]]; then
rm -rf "${i}"
fi
if [[ ! -L "${i}" ]]; then
ln -s /config/www/"$(basename "${i}")" "${i}"
fi
done
# copy searchproviders if not exists and symlink
if [[ ! -f /config/www/searchproviders.yaml ]]; then
cp /app/www/storage/app/searchproviders.yaml.orig /config/www/searchproviders.yaml
fi
rm -rf /app/www/storage/app/searchproviders.yaml
ln -s /config/www/searchproviders.yaml /app/www/storage/app/searchproviders.yaml
# tidy up install files & set permissions
if [[ -f /app/set-perms ]]; then
rm -rf /app/set-perms
lsiown -R abc:abc \
/app/www \
/config
fi
# copy .env if not exists
if [[ ! -f /config/www/.env ]]; then
install -g abc -o abc /app/www/.env.example /config/www/.env
echo "Creating app key. This may take a while on slower systems"
s6-setuidgid abc php /app/www/artisan key:generate
fi
# set queue driver to database
sed -i 's/QUEUE_DRIVER=sync/QUEUE_DRIVER=database/' /config/www/.env

View File

@@ -1 +0,0 @@
oneshot

View File

@@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-heimdall-config/run

View File

@@ -1,4 +0,0 @@
#!/usr/bin/with-contenv bash
exec \
s6-setuidgid abc php /app/www/artisan queue:work database --sleep=3 --tries=3

View File

@@ -1 +0,0 @@
longrun

View File

@@ -0,0 +1,6 @@
#!/usr/bin/with-contenv bash
cd /app/heimdall || exit
exec \
s6-setuidgid abc npm run server

View File

@@ -1,10 +0,0 @@
#!/usr/bin/with-contenv bash
DEFAULT_CONF="/config/nginx/site-confs/default.conf"
OLD_ROOT="root /var/www/localhost/heimdall/public;"
NEW_ROOT="root /app/www/public;"
if [[ -f "${DEFAULT_CONF}" ]] && grep -q "${OLD_ROOT}" "${DEFAULT_CONF}" 2>/dev/null; then
echo "updating root in ${DEFAULT_CONF}"
sed -i "s|${OLD_ROOT}|${NEW_ROOT}|" "${DEFAULT_CONF}"
fi

View File

@@ -1,40 +0,0 @@
<html>
<head>
<title>Upgrade Required!</title>
<style>
body{
font-family: Helvetica, Arial, sans-serif;
}
.message{
width:440px;
padding:20px 40px;
margin:0 auto;
background-color:#f9f9f9;
border:1px solid #ddd;
color: #1e3d62;
}
center{
margin:40px 0;
}
h1{
font-size: 18px;
line-height: 26px;
}
p{
font-size: 12px;
}
a{
color: rgb(207, 48, 139);
}
</style>
</head>
<body>
<div class="message">
<h1>Upgrade Required!</h1>
<p>The application inside this image has been moved to a new folder.</p>
<p>You will need to update your <strong>/config/nginx/nginx.conf</strong> and <strong>/config/nginx/site-confs/default.conf</strong> in order for the application to work.</p>
<p>New config samples are located at <strong>/config/nginx/nginx.conf.sample</strong> and <strong>/config/nginx/site-confs/default.conf.sample</strong></p>
<p>Please review our announcement: <a target="_blank" href="https://info.linuxserver.io/issues/2022-08-20-nginx-base/">Significant changes to nginx based images</a></p>
</div>
</body>
</html>