mirror of
https://github.com/linuxserver/docker-cura.git
synced 2026-03-16 00:07:35 +08:00
Merge pull request #3 from linuxserver/new-initial
This commit is contained in:
commit
ec09cd4cbe
@ -15,6 +15,6 @@ trim_trailing_whitespace = false
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[{**.sh,root/etc/cont-init.d/**,root/etc/services.d/**}]
|
||||
[{**.sh,root/etc/s6-overlay/s6-rc.d/**,root/etc/cont-init.d/**,root/etc/services.d/**}]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
16
.github/workflows/call_issue_pr_tracker.yml
vendored
Normal file
16
.github/workflows/call_issue_pr_tracker.yml
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
name: Issue & PR Tracker
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened,reopened,labeled,unlabeled,closed]
|
||||
pull_request_target:
|
||||
types: [opened,reopened,review_requested,review_request_removed,labeled,unlabeled,closed]
|
||||
pull_request_review:
|
||||
types: [submitted,edited,dismissed]
|
||||
|
||||
jobs:
|
||||
manage-project:
|
||||
permissions:
|
||||
issues: write
|
||||
uses: linuxserver/github-workflows/.github/workflows/issue-pr-tracker.yml@v1
|
||||
secrets: inherit
|
||||
13
.github/workflows/call_issues_cron.yml
vendored
Normal file
13
.github/workflows/call_issues_cron.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
name: Mark stale issues and pull requests
|
||||
on:
|
||||
schedule:
|
||||
- cron: '58 23 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
uses: linuxserver/github-workflows/.github/workflows/issues-cron.yml@v1
|
||||
secrets: inherit
|
||||
10
.github/workflows/external_trigger.yml
vendored
10
.github/workflows/external_trigger.yml
vendored
@ -14,11 +14,13 @@ jobs:
|
||||
run: |
|
||||
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_CURA_MAIN }}" ]; then
|
||||
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_CURA_MAIN is set; skipping trigger. ****"
|
||||
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_CURA_MAIN\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
fi
|
||||
echo "**** External trigger running off of main branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_CURA_MAIN\". ****"
|
||||
echo "External trigger running off of main branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_CURA_MAIN\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**** Retrieving external version ****"
|
||||
EXT_RELEASE=$(curl -u ${{ secrets.CR_USER }}:${{ secrets.CR_PAT }} -sX GET https://api.github.com/repos/Ultimaker/Cura/releases/latest | jq -r '.tag_name')
|
||||
EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/Ultimaker/Cura/releases/latest" | jq -r '. | .tag_name')
|
||||
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
|
||||
echo "**** Can't retrieve external version, exiting ****"
|
||||
FAILURE_REASON="Can't retrieve external version for cura branch main"
|
||||
@ -30,6 +32,7 @@ jobs:
|
||||
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/cura"
|
||||
tag="latest"
|
||||
@ -60,14 +63,18 @@ jobs:
|
||||
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-cura/job/main/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-cura/job/main/buildWithParameters?PACKAGE_CHECK=false \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
|
||||
@ -77,6 +84,7 @@ jobs:
|
||||
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" \
|
||||
|
||||
18
.github/workflows/external_trigger_scheduler.yml
vendored
18
.github/workflows/external_trigger_scheduler.yml
vendored
@ -2,7 +2,7 @@ name: External Trigger Scheduler
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '34 * * * *'
|
||||
- cron: '42 * * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
@ -17,18 +17,18 @@ jobs:
|
||||
run: |
|
||||
echo "**** Branches found: ****"
|
||||
git for-each-ref --format='%(refname:short)' refs/remotes
|
||||
echo "**** Pulling the yq docker image ****"
|
||||
docker pull ghcr.io/linuxserver/yq
|
||||
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
|
||||
do
|
||||
br=$(echo "$br" | sed 's|origin/||g')
|
||||
echo "**** Evaluating branch ${br} ****"
|
||||
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-cura/${br}/jenkins-vars.yml \
|
||||
| docker run --rm -i --entrypoint yq ghcr.io/linuxserver/yq -r .ls_branch)
|
||||
if [ "$br" == "$ls_branch" ]; then
|
||||
echo "**** Branch ${br} appears to be live; checking workflow. ****"
|
||||
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-cura/${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-cura/${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" \
|
||||
@ -36,8 +36,10 @@ jobs:
|
||||
https://api.github.com/repos/linuxserver/docker-cura/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} appears to be a dev branch; skipping trigger. ****"
|
||||
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****"
|
||||
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
done
|
||||
|
||||
2
.github/workflows/greetings.yml
vendored
2
.github/workflows/greetings.yml
vendored
@ -8,6 +8,6 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
issue-message: 'Thanks for opening your first issue here! Be sure to follow the [bug](https://github.com/linuxserver/docker-cura/blob/main/.github/ISSUE_TEMPLATE/issue.bug.yml) or [feature](https://github.com/linuxserver/docker-cura/blob/main/.github/ISSUE_TEMPLATE/issue.feature.yml) issue templates!'
|
||||
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-cura/blob/main/.github/PULL_REQUEST_TEMPLATE.md)!'
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
4
.github/workflows/package_trigger.yml
vendored
4
.github/workflows/package_trigger.yml
vendored
@ -14,13 +14,16 @@ jobs:
|
||||
run: |
|
||||
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_CURA_MAIN }}" ]; then
|
||||
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_CURA_MAIN is set; skipping trigger. ****"
|
||||
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_CURA_MAIN\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
fi
|
||||
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-cura/job/main/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 main branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_CURA_MAIN\". ****"
|
||||
echo "Package trigger running off of main branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_CURA_MAIN\`" >> $GITHUB_STEP_SUMMARY
|
||||
response=$(curl -iX POST \
|
||||
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-cura/job/main/buildWithParameters?PACKAGE_CHECK=true \
|
||||
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
|
||||
@ -30,6 +33,7 @@ jobs:
|
||||
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
|
||||
buildurl="${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" \
|
||||
|
||||
10
.github/workflows/package_trigger_scheduler.yml
vendored
10
.github/workflows/package_trigger_scheduler.yml
vendored
@ -2,7 +2,7 @@ name: Package Trigger Scheduler
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '54 8 * * 4'
|
||||
- cron: '22 3 * * 1'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
@ -17,18 +17,16 @@ jobs:
|
||||
run: |
|
||||
echo "**** Branches found: ****"
|
||||
git for-each-ref --format='%(refname:short)' refs/remotes
|
||||
echo "**** Pulling the yq docker image ****"
|
||||
docker pull ghcr.io/linuxserver/yq
|
||||
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
|
||||
do
|
||||
br=$(echo "$br" | sed 's|origin/||g')
|
||||
echo "**** Evaluating branch ${br} ****"
|
||||
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-cura/${br}/jenkins-vars.yml \
|
||||
| docker run --rm -i --entrypoint yq ghcr.io/linuxserver/yq -r .ls_branch)
|
||||
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-cura/${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-cura/${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 }}" \
|
||||
@ -38,9 +36,11 @@ jobs:
|
||||
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} ****"
|
||||
|
||||
10
.github/workflows/permissions.yml
vendored
Normal file
10
.github/workflows/permissions.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
name: Permission check
|
||||
on:
|
||||
pull_request_target:
|
||||
paths:
|
||||
- '**/run'
|
||||
- '**/finish'
|
||||
- '**/check'
|
||||
jobs:
|
||||
permission_check:
|
||||
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1
|
||||
34
Dockerfile
34
Dockerfile
@ -1,33 +1,47 @@
|
||||
FROM ghcr.io/linuxserver/baseimage-rdesktop-web:arch
|
||||
FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm
|
||||
|
||||
# set version label
|
||||
ARG BUILD_DATE
|
||||
ARG VERSION
|
||||
ARG CURA_VERSION
|
||||
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
|
||||
LABEL maintainer="alex-phillips"
|
||||
LABEL maintainer="thelamer"
|
||||
|
||||
# title
|
||||
ENV TITLE=Cura
|
||||
|
||||
RUN \
|
||||
echo "**** install cura ****" && \
|
||||
echo "**** install packages ****" && \
|
||||
apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive \
|
||||
apt-get install --no-install-recommends -y \
|
||||
firefox-esr && \
|
||||
echo "**** install cura from appimage ****" && \
|
||||
if [ -z ${CURA_VERSION+x} ]; then \
|
||||
CURA_VERSION=$(curl -sX GET "https://api.github.com/repos/Ultimaker/Cura/releases/latest" \
|
||||
| awk '/tag_name/{print $4;exit}' FS='[""]'); \
|
||||
fi && \
|
||||
mkdir -p /app/cura/ && \
|
||||
cd /tmp && \
|
||||
curl -o \
|
||||
/app/cura/cura -L \
|
||||
"https://github.com/Ultimaker/Cura/releases/download/${CURA_VERSION}/Ultimaker-Cura-${CURA_VERSION}-linux-modern.AppImage" && \
|
||||
chmod +x /app/cura/cura && \
|
||||
/tmp/cura.app -L \
|
||||
"https://github.com/Ultimaker/Cura/releases/download/${CURA_VERSION}/UltiMaker-Cura-${CURA_VERSION}-linux-X64.AppImage" && \
|
||||
chmod +x /tmp/cura.app && \
|
||||
./cura.app --appimage-extract && \
|
||||
mv squashfs-root /opt/cura && \
|
||||
sed -i 's/QT_QPA_PLATFORMTHEME=xdgdesktopportal/QT_QPA_PLATFORMTHEME=gtk3/' /opt/cura/AppRun.env && \
|
||||
sed -i 's|</applications>| <application title="UltiMaker Cura" type="normal">\n <maximized>yes</maximized>\n </application>\n</applications>|' /etc/xdg/openbox/rc.xml && \
|
||||
echo "**** cleanup ****" && \
|
||||
apt-get autoclean && \
|
||||
rm -rf \
|
||||
/tmp/* \
|
||||
/config/.cache \
|
||||
/config/.launchpadlib \
|
||||
/var/lib/apt/lists/* \
|
||||
/var/tmp/*
|
||||
/var/tmp/* \
|
||||
/tmp/*
|
||||
|
||||
# add local files
|
||||
COPY /root /
|
||||
|
||||
# ports and volumes
|
||||
EXPOSE 3000
|
||||
|
||||
VOLUME /config
|
||||
|
||||
452
Jenkinsfile
vendored
452
Jenkinsfile
vendored
@ -16,7 +16,8 @@ pipeline {
|
||||
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
|
||||
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
|
||||
GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
|
||||
SCARF_TOKEN=credentials('scarf_api_key')
|
||||
EXT_USER = 'Ultimaker'
|
||||
EXT_REPO = 'Cura'
|
||||
BUILD_VERSION_ARG = 'CURA_VERSION'
|
||||
LS_USER = 'linuxserver'
|
||||
LS_REPO = 'docker-cura'
|
||||
@ -24,7 +25,7 @@ pipeline {
|
||||
DOCKERHUB_IMAGE = 'linuxserver/cura'
|
||||
DEV_DOCKERHUB_IMAGE = 'lsiodev/cura'
|
||||
PR_DOCKERHUB_IMAGE = 'lspipepr/cura'
|
||||
DIST_IMAGE = 'arch'
|
||||
DIST_IMAGE = 'ubuntu'
|
||||
MULTIARCH = 'false'
|
||||
CI = 'true'
|
||||
CI_WEB = 'true'
|
||||
@ -39,10 +40,16 @@ pipeline {
|
||||
// Setup all the basic environment variables needed for the build
|
||||
stage("Set ENV Variables base"){
|
||||
steps{
|
||||
sh '''#! /bin/bash
|
||||
containers=$(docker ps -aq)
|
||||
if [[ -n "${containers}" ]]; then
|
||||
docker stop ${containers}
|
||||
fi
|
||||
docker system prune -af --volumes || : '''
|
||||
script{
|
||||
env.EXIT_STATUS = ''
|
||||
env.LS_RELEASE = sh(
|
||||
script: '''docker run --rm ghcr.io/linuxserver/alexeiled-skopeo sh -c 'skopeo inspect docker://docker.io/'${DOCKERHUB_IMAGE}':latest 2>/dev/null' | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
|
||||
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:latest 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
|
||||
returnStdout: true).trim()
|
||||
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' ''',
|
||||
@ -56,7 +63,7 @@ pipeline {
|
||||
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
|
||||
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
|
||||
env.PULL_REQUEST = env.CHANGE_ID
|
||||
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/stale.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
|
||||
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
|
||||
}
|
||||
script{
|
||||
env.LS_RELEASE_NUMBER = sh(
|
||||
@ -99,16 +106,23 @@ pipeline {
|
||||
/* ########################
|
||||
External Release Tagging
|
||||
######################## */
|
||||
// If this is a custom command to determine version use that command
|
||||
stage("Set tag custom bash"){
|
||||
steps{
|
||||
script{
|
||||
env.EXT_RELEASE = sh(
|
||||
script: ''' curl -sX GET https://api.github.com/repos/Ultimaker/Cura/releases/latest | jq -r '.tag_name' ''',
|
||||
returnStdout: true).trim()
|
||||
env.RELEASE_LINK = 'custom_command'
|
||||
}
|
||||
}
|
||||
// If this is a stable github release use the latest endpoint from github to determine the ext tag
|
||||
stage("Set ENV github_stable"){
|
||||
steps{
|
||||
script{
|
||||
env.EXT_RELEASE = sh(
|
||||
script: '''curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq -r '. | .tag_name' ''',
|
||||
returnStdout: true).trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
// If this is a stable or devel github release generate the link for the build message
|
||||
stage("Set ENV github_link"){
|
||||
steps{
|
||||
script{
|
||||
env.RELEASE_LINK = 'https://github.com/' + env.EXT_USER + '/' + env.EXT_REPO + '/releases/tag/' + env.EXT_RELEASE
|
||||
}
|
||||
}
|
||||
}
|
||||
// Sanitize the release tag and strip illegal docker or github characters
|
||||
stage("Sanitize tag"){
|
||||
@ -157,7 +171,7 @@ pipeline {
|
||||
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
|
||||
env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME
|
||||
if (env.MULTIARCH == 'true') {
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
|
||||
} else {
|
||||
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
|
||||
}
|
||||
@ -180,7 +194,7 @@ pipeline {
|
||||
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
|
||||
env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME
|
||||
if (env.MULTIARCH == 'true') {
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
|
||||
} else {
|
||||
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
|
||||
}
|
||||
@ -203,12 +217,12 @@ pipeline {
|
||||
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
|
||||
env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME
|
||||
if (env.MULTIARCH == 'true') {
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
|
||||
} else {
|
||||
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
|
||||
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
|
||||
}
|
||||
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
|
||||
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
|
||||
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
|
||||
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
|
||||
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
|
||||
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
|
||||
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
|
||||
@ -228,19 +242,16 @@ pipeline {
|
||||
script{
|
||||
env.SHELLCHECK_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/shellcheck-result.xml'
|
||||
}
|
||||
sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-shellcheck/master/checkrun.sh | /bin/bash'''
|
||||
sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-jenkins-builder/master/checkrun.sh | /bin/bash'''
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
docker pull ghcr.io/linuxserver/lsiodev-spaces-file-upload:latest
|
||||
docker run --rm \
|
||||
-e DESTINATION=\"${IMAGE}/${META_TAG}/shellcheck-result.xml\" \
|
||||
-e FILE_NAME="shellcheck-result.xml" \
|
||||
-e MIMETYPE="text/xml" \
|
||||
-v ${WORKSPACE}:/mnt \
|
||||
-e SECRET_KEY=\"${S3_SECRET}\" \
|
||||
-e ACCESS_KEY=\"${S3_KEY}\" \
|
||||
-t ghcr.io/linuxserver/lsiodev-spaces-file-upload:latest \
|
||||
python /upload.py'''
|
||||
-v ${WORKSPACE}:/mnt \
|
||||
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
|
||||
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
|
||||
ghcr.io/linuxserver/baseimage-alpine:3.17 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
|
||||
apk add --no-cache py3-pip && \
|
||||
pip install 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" || :'''
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -277,7 +288,7 @@ pipeline {
|
||||
echo "Jenkinsfile is up to date."
|
||||
fi
|
||||
# Stage 2 - Delete old templates
|
||||
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md\n.github/ISSUE_TEMPLATE/issue.bug.md\n.github/ISSUE_TEMPLATE/issue.feature.md"
|
||||
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml Dockerfile.armhf"
|
||||
for i in ${OLD_TEMPLATES}; do
|
||||
if [[ -f "${i}" ]]; then
|
||||
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
|
||||
@ -294,7 +305,7 @@ pipeline {
|
||||
git commit -m 'Bot Updating Templated Files'
|
||||
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
|
||||
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
echo "Deleting old templates"
|
||||
echo "Deleting old and deprecated templates"
|
||||
rm -Rf ${TEMPDIR}
|
||||
exit 0
|
||||
else
|
||||
@ -313,24 +324,25 @@ pipeline {
|
||||
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
|
||||
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE
|
||||
cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/ || :
|
||||
cp --parents readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/ || :
|
||||
cd ${TEMPDIR}/repo/${LS_REPO}/
|
||||
if ! grep -q '.jenkins-external' .gitignore 2>/dev/null; then
|
||||
echo ".jenkins-external" >> .gitignore
|
||||
git add .gitignore
|
||||
fi
|
||||
git add ${TEMPLATED_FILES}
|
||||
git add readme-vars.yml ${TEMPLATED_FILES}
|
||||
git commit -m 'Bot Updating Templated Files'
|
||||
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
|
||||
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
else
|
||||
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
fi
|
||||
mkdir -p ${TEMPDIR}/gitbook
|
||||
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation
|
||||
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}/gitbook/docker-documentation/images/
|
||||
cd ${TEMPDIR}/gitbook/docker-documentation/
|
||||
git add images/docker-${CONTAINER_NAME}.md
|
||||
mkdir -p ${TEMPDIR}/docs
|
||||
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation
|
||||
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -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
|
||||
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/
|
||||
cd ${TEMPDIR}/docs/docker-documentation
|
||||
git add docs/images/docker-${CONTAINER_NAME}.md
|
||||
git commit -m 'Bot Updating Documentation'
|
||||
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
|
||||
fi
|
||||
@ -339,6 +351,8 @@ pipeline {
|
||||
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
|
||||
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
|
||||
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/
|
||||
@ -379,6 +393,26 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
// If this is a main build check the S6 service file perms
|
||||
stage("Check S6 Service file Permissions"){
|
||||
when {
|
||||
branch "main"
|
||||
environment name: 'CHANGE_ID', value: ''
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
script{
|
||||
sh '''#! /bin/bash
|
||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \\( -name "run" -o -name "finish" -o -name "check" \\) -not -perm -u=x,g=x,o=x -print)
|
||||
if [[ -n "${WRONG_PERM}" ]]; then
|
||||
echo "The following S6 service files are missing the executable bit; canceling the faulty build: ${WRONG_PERM}"
|
||||
exit 1
|
||||
else
|
||||
echo "S6 service file perms look good."
|
||||
fi '''
|
||||
}
|
||||
}
|
||||
}
|
||||
/* #######################
|
||||
GitLab Mirroring
|
||||
####################### */
|
||||
@ -399,36 +433,6 @@ pipeline {
|
||||
"visibility":"public"}' '''
|
||||
}
|
||||
}
|
||||
/* #######################
|
||||
Scarf.sh package registry
|
||||
####################### */
|
||||
// Add package to Scarf.sh and set permissions
|
||||
stage("Scarf.sh package registry"){
|
||||
when {
|
||||
branch "main"
|
||||
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/cura") | .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/cura",\
|
||||
"shortDescription":"example description",\
|
||||
"libraryType":"docker",\
|
||||
"website":"https://github.com/linuxserver/docker-cura",\
|
||||
"backendUrl":"https://ghcr.io/linuxserver/cura",\
|
||||
"publicUrl":"https://lscr.io/linuxserver/cura"}' || :
|
||||
else
|
||||
echo "Package already exists on Scarf.sh"
|
||||
fi
|
||||
'''
|
||||
}
|
||||
}
|
||||
/* ###############
|
||||
Build Container
|
||||
############### */
|
||||
@ -442,7 +446,8 @@ pipeline {
|
||||
}
|
||||
steps {
|
||||
echo "Running on node: ${NODE_NAME}"
|
||||
sh "docker build \
|
||||
sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile"
|
||||
sh "docker buildx build \
|
||||
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
|
||||
--label \"org.opencontainers.image.authors=linuxserver.io\" \
|
||||
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-cura/packages\" \
|
||||
@ -454,8 +459,8 @@ pipeline {
|
||||
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
|
||||
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
|
||||
--label \"org.opencontainers.image.title=Cura\" \
|
||||
--label \"org.opencontainers.image.description=[Ultimaker Cura](https://ultimaker.com/software/ultimaker-cura) is a state-of-the-art slicer app to prepare your 3D models for your 3D printer.\" \
|
||||
--no-cache --pull -t ${IMAGE}:${META_TAG} \
|
||||
--label \"org.opencontainers.image.description=[UltiMaker Cura](https://ultimaker.com/software/ultimaker-cura/) is free, easy-to-use 3D printing software trusted by millions of users. Fine-tune your 3D model with 400+ settings for the best slicing and printing results.\" \
|
||||
--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} ."
|
||||
}
|
||||
}
|
||||
@ -472,7 +477,8 @@ pipeline {
|
||||
stage('Build X86') {
|
||||
steps {
|
||||
echo "Running on node: ${NODE_NAME}"
|
||||
sh "docker build \
|
||||
sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile"
|
||||
sh "docker buildx build \
|
||||
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
|
||||
--label \"org.opencontainers.image.authors=linuxserver.io\" \
|
||||
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-cura/packages\" \
|
||||
@ -484,45 +490,11 @@ pipeline {
|
||||
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
|
||||
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
|
||||
--label \"org.opencontainers.image.title=Cura\" \
|
||||
--label \"org.opencontainers.image.description=[Ultimaker Cura](https://ultimaker.com/software/ultimaker-cura) is a state-of-the-art slicer app to prepare your 3D models for your 3D printer.\" \
|
||||
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} \
|
||||
--label \"org.opencontainers.image.description=[UltiMaker Cura](https://ultimaker.com/software/ultimaker-cura/) is free, easy-to-use 3D printing software trusted by millions of users. Fine-tune your 3D model with 400+ settings for the best slicing and printing results.\" \
|
||||
--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} ."
|
||||
}
|
||||
}
|
||||
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 "docker 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-cura/packages\" \
|
||||
--label \"org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-cura\" \
|
||||
--label \"org.opencontainers.image.source=https://github.com/linuxserver/docker-cura\" \
|
||||
--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=Cura\" \
|
||||
--label \"org.opencontainers.image.description=[Ultimaker Cura](https://ultimaker.com/software/ultimaker-cura) is a state-of-the-art slicer app to prepare your 3D models for your 3D printer.\" \
|
||||
--no-cache --pull -f Dockerfile.armhf -t ${IMAGE}:arm32v7-${META_TAG} \
|
||||
--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') {
|
||||
agent {
|
||||
label 'ARM64'
|
||||
@ -533,7 +505,8 @@ pipeline {
|
||||
sh '''#! /bin/bash
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
'''
|
||||
sh "docker build \
|
||||
sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
|
||||
sh "docker buildx build \
|
||||
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
|
||||
--label \"org.opencontainers.image.authors=linuxserver.io\" \
|
||||
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-cura/packages\" \
|
||||
@ -545,16 +518,19 @@ pipeline {
|
||||
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
|
||||
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
|
||||
--label \"org.opencontainers.image.title=Cura\" \
|
||||
--label \"org.opencontainers.image.description=[Ultimaker Cura](https://ultimaker.com/software/ultimaker-cura) is a state-of-the-art slicer app to prepare your 3D models for your 3D printer.\" \
|
||||
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \
|
||||
--label \"org.opencontainers.image.description=[UltiMaker Cura](https://ultimaker.com/software/ultimaker-cura/) is free, easy-to-use 3D printing software trusted by millions of users. Fine-tune your 3D model with 400+ settings for the best slicing and printing results.\" \
|
||||
--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} ."
|
||||
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
retry(5) {
|
||||
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
}
|
||||
sh '''docker rmi \
|
||||
${IMAGE}:arm64v8-${META_TAG} \
|
||||
ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
|
||||
sh '''#! /bin/bash
|
||||
containers=$(docker ps -aq)
|
||||
if [[ -n "${containers}" ]]; then
|
||||
docker stop ${containers}
|
||||
fi
|
||||
docker system prune -af --volumes || : '''
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -575,26 +551,12 @@ pipeline {
|
||||
else
|
||||
LOCAL_CONTAINER=${IMAGE}:${META_TAG}
|
||||
fi
|
||||
if [ "${DIST_IMAGE}" == "alpine" ]; then
|
||||
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
|
||||
apk info -v > /tmp/package_versions.txt && \
|
||||
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
|
||||
chmod 777 /tmp/package_versions.txt'
|
||||
elif [ "${DIST_IMAGE}" == "ubuntu" ]; then
|
||||
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
|
||||
apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \
|
||||
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
|
||||
chmod 777 /tmp/package_versions.txt'
|
||||
elif [ "${DIST_IMAGE}" == "fedora" ]; then
|
||||
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
|
||||
rpm -qa > /tmp/package_versions.txt && \
|
||||
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
|
||||
chmod 777 /tmp/package_versions.txt'
|
||||
elif [ "${DIST_IMAGE}" == "arch" ]; then
|
||||
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
|
||||
pacman -Q > /tmp/package_versions.txt && \
|
||||
chmod 777 /tmp/package_versions.txt'
|
||||
fi
|
||||
touch ${TEMPDIR}/package_versions.txt
|
||||
docker run --rm \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
-v ${TEMPDIR}:/tmp \
|
||||
ghcr.io/anchore/syft:latest \
|
||||
${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt
|
||||
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
|
||||
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
|
||||
if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
|
||||
@ -629,13 +591,6 @@ pipeline {
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
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{
|
||||
env.EXIT_STATUS = 'ABORTED'
|
||||
}
|
||||
@ -653,13 +608,6 @@ pipeline {
|
||||
}
|
||||
}
|
||||
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{
|
||||
env.EXIT_STATUS = 'ABORTED'
|
||||
}
|
||||
@ -681,14 +629,13 @@ pipeline {
|
||||
]) {
|
||||
script{
|
||||
env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
|
||||
env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json'
|
||||
}
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
docker pull ghcr.io/linuxserver/ci:latest
|
||||
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 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}
|
||||
fi
|
||||
docker run --rm \
|
||||
@ -707,8 +654,6 @@ pipeline {
|
||||
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
|
||||
-e WEB_AUTH=\"${CI_AUTH}\" \
|
||||
-e WEB_PATH=\"${CI_WEBPATH}\" \
|
||||
-e DO_REGION="ams3" \
|
||||
-e DO_BUCKET="lsio-ci" \
|
||||
-t ghcr.io/linuxserver/ci:latest \
|
||||
python3 test_build.py'''
|
||||
}
|
||||
@ -761,17 +706,6 @@ pipeline {
|
||||
done
|
||||
'''
|
||||
}
|
||||
sh '''#! /bin/bash
|
||||
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
|
||||
docker rmi \
|
||||
${DELETEIMAGE}:${META_TAG} \
|
||||
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
|
||||
${DELETEIMAGE}:latest || :
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker rmi ${DELETEIMAGE}:${SEMVER} || :
|
||||
fi
|
||||
done
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -804,58 +738,54 @@ pipeline {
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
if [ "${CI}" == "false" ]; then
|
||||
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${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}
|
||||
fi
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
|
||||
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
|
||||
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
|
||||
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-latest
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
|
||||
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
|
||||
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
|
||||
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
fi
|
||||
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:amd64-latest
|
||||
docker push ${MANIFESTIMAGE}:arm32v7-latest
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
|
||||
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
|
||||
docker push ${MANIFESTIMAGE}:amd64-latest
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
|
||||
docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
fi
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
|
||||
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
|
||||
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm64v8-latest --os linux --arch arm64 --variant v8
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:${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 create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
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 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 create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
|
||||
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:${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 create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
|
||||
fi
|
||||
token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Alinuxserver%2F${CONTAINER_NAME}%3Apull" | jq -r '.token')
|
||||
digest=$(curl -s \
|
||||
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
|
||||
--header "Authorization: Bearer ${token}" \
|
||||
"https://ghcr.io/v2/linuxserver/${CONTAINER_NAME}/manifests/arm32v7-latest")
|
||||
if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest || :
|
||||
docker manifest create ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:amd64-latest
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest
|
||||
fi
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:latest
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
|
||||
@ -865,29 +795,6 @@ pipeline {
|
||||
done
|
||||
'''
|
||||
}
|
||||
sh '''#! /bin/bash
|
||||
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
|
||||
docker rmi \
|
||||
${DELETEIMAGE}:amd64-${META_TAG} \
|
||||
${DELETEIMAGE}:amd64-latest \
|
||||
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
|
||||
${DELETEIMAGE}:arm32v7-${META_TAG} \
|
||||
${DELETEIMAGE}:arm32v7-latest \
|
||||
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
|
||||
${DELETEIMAGE}:arm64v8-${META_TAG} \
|
||||
${DELETEIMAGE}:arm64v8-latest \
|
||||
${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker rmi \
|
||||
${DELETEIMAGE}:amd64-${SEMVER} \
|
||||
${DELETEIMAGE}: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} || :
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -911,16 +818,51 @@ pipeline {
|
||||
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
|
||||
echo "Pushing New release for Tag"
|
||||
sh '''#! /bin/bash
|
||||
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json
|
||||
echo '{"tag_name":"'${META_TAG}'",\
|
||||
"target_commitish": "main",\
|
||||
"name": "'${META_TAG}'",\
|
||||
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
|
||||
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**'${EXT_REPO}' Changes:**\\n\\n' > start
|
||||
printf '","draft": false,"prerelease": false}' >> releasebody.json
|
||||
paste -d'\\0' start releasebody.json > releasebody.json.done
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
|
||||
}
|
||||
}
|
||||
// Add protection to the release branch
|
||||
stage('Github-Release-Branch-Protection') {
|
||||
when {
|
||||
branch "main"
|
||||
environment name: 'CHANGE_ID', value: ''
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
echo "Setting up protection for release branch main"
|
||||
sh '''#! /bin/bash
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/main/protection \
|
||||
-d $(jq -c . << EOF
|
||||
{
|
||||
"required_status_checks": null,
|
||||
"enforce_admins": false,
|
||||
"required_pull_request_reviews": {
|
||||
"dismiss_stale_reviews": false,
|
||||
"require_code_owner_reviews": false,
|
||||
"require_last_push_approval": false,
|
||||
"required_approving_review_count": 1
|
||||
},
|
||||
"restrictions": null,
|
||||
"required_linear_history": false,
|
||||
"allow_force_pushes": false,
|
||||
"allow_deletions": false,
|
||||
"block_creations": false,
|
||||
"required_conversation_resolution": true,
|
||||
"lock_branch": false,
|
||||
"allow_fork_syncing": false,
|
||||
"required_signatures": false
|
||||
}
|
||||
EOF
|
||||
) '''
|
||||
}
|
||||
}
|
||||
// Use helper container to sync the current README on master to the dockerhub endpoint
|
||||
stage('Sync-README') {
|
||||
when {
|
||||
@ -958,12 +900,78 @@ pipeline {
|
||||
stage('Pull Request Comment') {
|
||||
when {
|
||||
not {environment name: 'CHANGE_ID', value: ''}
|
||||
environment name: 'CI', value: 'true'
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST 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}'"}' '''
|
||||
sh '''#! /bin/bash
|
||||
# Function to retrieve JSON data from URL
|
||||
get_json() {
|
||||
local url="$1"
|
||||
local response=$(curl -s "$url")
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to retrieve JSON data from $url"
|
||||
return 1
|
||||
fi
|
||||
local json=$(echo "$response" | jq .)
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to parse JSON data from $url"
|
||||
return 1
|
||||
fi
|
||||
echo "$json"
|
||||
}
|
||||
|
||||
build_table() {
|
||||
local data="$1"
|
||||
|
||||
# Get the keys in the JSON data
|
||||
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
|
||||
|
||||
# Check if keys are empty
|
||||
if [ -z "$keys" ]; then
|
||||
echo "JSON report data does not contain any keys or the report does not exist."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Build table header
|
||||
local header="| Tag | Passed |\\n| --- | --- |\\n"
|
||||
|
||||
# Loop through the JSON data to build the table rows
|
||||
local rows=""
|
||||
for build in $keys; do
|
||||
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
|
||||
if [ "$status" = "true" ]; then
|
||||
status="✅"
|
||||
else
|
||||
status="❌"
|
||||
fi
|
||||
local row="| "$build" | "$status" |\\n"
|
||||
rows="${rows}${row}"
|
||||
done
|
||||
|
||||
local table="${header}${rows}"
|
||||
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
|
||||
echo "$escaped_table"
|
||||
}
|
||||
|
||||
if [[ "${CI}" = "true" ]]; then
|
||||
# Retrieve JSON data from URL
|
||||
data=$(get_json "$CI_JSON_URL")
|
||||
# Create table from JSON data
|
||||
table=$(build_table "$data")
|
||||
echo -e "$table"
|
||||
|
||||
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
|
||||
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
|
||||
else
|
||||
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
|
||||
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
|
||||
fi
|
||||
'''
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -977,18 +985,26 @@ pipeline {
|
||||
sh 'echo "build aborted"'
|
||||
}
|
||||
else if (currentBuild.currentResult == "SUCCESS"){
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 1681177,\
|
||||
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
|
||||
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
|
||||
}
|
||||
else {
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\
|
||||
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
|
||||
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
|
||||
}
|
||||
}
|
||||
}
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
190
README.md
190
README.md
@ -1,6 +1,5 @@
|
||||
<!-- DO NOT EDIT THIS FILE MANUALLY -->
|
||||
<!-- Please read the https://github.com/linuxserver/docker-cura/blob/main/.github/CONTRIBUTING.md -->
|
||||
|
||||
<!-- DO NOT EDIT THIS FILE MANUALLY -->
|
||||
<!-- Please read https://github.com/linuxserver/docker-cura/blob/main/.github/CONTRIBUTING.md -->
|
||||
[](https://linuxserver.io)
|
||||
|
||||
[](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
|
||||
@ -40,13 +39,13 @@ Find us at:
|
||||
[](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-cura/job/main/)
|
||||
[](https://ci-tests.linuxserver.io/linuxserver/cura/latest/index.html)
|
||||
|
||||
[Ultimaker Cura](https://ultimaker.com/software/ultimaker-cura) is a state-of-the-art slicer app to prepare your 3D models for your 3D printer.
|
||||
[UltiMaker Cura](https://ultimaker.com/software/ultimaker-cura/) is free, easy-to-use 3D printing software trusted by millions of users. Fine-tune your 3D model with 400+ settings for the best slicing and printing results.
|
||||
|
||||
[](https://ultimaker.com/software/ultimaker-cura)
|
||||
[](https://ultimaker.com/software/ultimaker-cura/)
|
||||
|
||||
## Supported Architectures
|
||||
|
||||
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/).
|
||||
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/).
|
||||
|
||||
Simply pulling `lscr.io/linuxserver/cura:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
|
||||
|
||||
@ -56,21 +55,48 @@ The architectures supported by this image are:
|
||||
| :----: | :----: | ---- |
|
||||
| x86-64 | ✅ | amd64-\<version tag\> |
|
||||
| arm64 | ❌ | |
|
||||
| armhf| ❌ | |
|
||||
| armhf | ❌ | |
|
||||
|
||||
## Application Setup
|
||||
|
||||
The application can be accessed at:
|
||||
|
||||
* http://yourhost:3000/
|
||||
* https://yourhost:3001/
|
||||
|
||||
By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:
|
||||
### Options in all KasmVNC based GUI containers
|
||||
|
||||
* http://yourhost:3000/?login=true
|
||||
This container is based on [Docker Baseimage KasmVNC](https://github.com/linuxserver/docker-baseimage-kasmvnc) which means there are additional environment variables and run configurations to enable or disable specific functionality.
|
||||
|
||||
#### Optional environment variables
|
||||
|
||||
| Variable | Description |
|
||||
| :----: | --- |
|
||||
| CUSTOM_PORT | Internal port the container listens on for http if it needs to be swapped from the default 3000. |
|
||||
| CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default 3001. |
|
||||
| CUSTOM_USER | HTTP Basic auth username, abc is default. |
|
||||
| PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |
|
||||
| SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE `/subfolder/` |
|
||||
| TITLE | The page title displayed on the web browser, default "KasmVNC Client". |
|
||||
| FM_HOME | This is the home directory (landing) for the file manager, default "/config". |
|
||||
| START_DOCKER | If set to false a container with privilege will not automatically start the DinD Docker setup. |
|
||||
| DRINODE | If mounting in /dev/dri for [DRI3 GPU Acceleration](https://www.kasmweb.com/kasmvnc/docs/master/gpu_acceleration.html) allows you to specify the device to use IE `/dev/dri/renderD128` |
|
||||
|
||||
#### Optional run configurations
|
||||
|
||||
| Variable | Description |
|
||||
| :----: | --- |
|
||||
| `--privileged` | Will start a Docker in Docker (DinD) setup inside the container to use docker in an isolated environment. For increased performance mount the Docker directory inside the container to the host IE `-v /home/user/docker-data:/var/lib/docker`. |
|
||||
| `-v /var/run/docker.sock:/var/run/docker.sock` | Mount in the host level Docker socket to either interact with it via CLI or use Docker enabled applications. |
|
||||
| `--device /dev/dri:/dev/dri` | Mount a GPU into the container, this can be used in conjunction with the `DRINODE` environment variable to leverage a host video card for GPU accelerated appplications. Only **Open Source** drivers are supported IE (Intel,AMDGPU,Radeon,ATI,Nouveau) |
|
||||
|
||||
### Lossless mode
|
||||
|
||||
This container is capable of delivering a true lossless image at a high framerate to your web browser by changing the Stream Quality preset to "Lossless", more information [here](https://www.kasmweb.com/docs/latest/how_to/lossless.html#technical-background). In order to use this mode from a non localhost endpoint the HTTPS port on 3001 needs to be used. If using a reverse proxy to port 3000 specific headers will need to be set as outlined [here](https://github.com/linuxserver/docker-baseimage-kasmvnc#lossless).
|
||||
|
||||
## Usage
|
||||
|
||||
Here are some example snippets to help you get started creating a container.
|
||||
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
|
||||
|
||||
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
|
||||
|
||||
@ -81,14 +107,17 @@ services:
|
||||
cura:
|
||||
image: lscr.io/linuxserver/cura:latest
|
||||
container_name: cura
|
||||
security_opt:
|
||||
- seccomp:unconfined #optional
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/London
|
||||
- TZ=Etc/UTC
|
||||
volumes:
|
||||
- /path/to/config:/config
|
||||
ports:
|
||||
- 3000:3000
|
||||
- 3001:3001
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
@ -97,10 +126,12 @@ services:
|
||||
```bash
|
||||
docker run -d \
|
||||
--name=cura \
|
||||
--security-opt seccomp=unconfined `#optional` \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Europe/London \
|
||||
-e TZ=Etc/UTC \
|
||||
-p 3000:3000 \
|
||||
-p 3001:3001 \
|
||||
-v /path/to/config:/config \
|
||||
--restart unless-stopped \
|
||||
lscr.io/linuxserver/cura:latest
|
||||
@ -108,15 +139,17 @@ docker run -d \
|
||||
|
||||
## Parameters
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
| Parameter | Function |
|
||||
| :----: | --- |
|
||||
| `-p 3000` | Cura desktop gui. |
|
||||
| `-p 3001` | Cura desktop gui HTTPS. |
|
||||
| `-e PUID=1000` | for UserID - see below for explanation |
|
||||
| `-e PGID=1000` | for GroupID - see below for explanation |
|
||||
| `-e TZ=Europe/London` | Specify a timezone to use EG Europe/London. |
|
||||
| `-v /config` | Users home directory in the container, stores program settings and files |
|
||||
| `-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` | Users home directory in the container, stores program settings and files. |
|
||||
| `--security-opt seccomp=unconfined` | For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker. |
|
||||
|
||||
## Environment variables from files (Docker secrets)
|
||||
|
||||
@ -125,10 +158,10 @@ You can set any environment variable from a file by using a special prepend `FIL
|
||||
As an example:
|
||||
|
||||
```bash
|
||||
-e FILE__PASSWORD=/run/secrets/mysecretpassword
|
||||
-e FILE__MYVAR=/run/secrets/mysecretvariable
|
||||
```
|
||||
|
||||
Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file.
|
||||
Will set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file.
|
||||
|
||||
## Umask for running applications
|
||||
|
||||
@ -137,15 +170,20 @@ Keep in mind umask is not chmod it subtracts from permissions based on it's valu
|
||||
|
||||
## 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.
|
||||
|
||||
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
|
||||
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below:
|
||||
|
||||
```bash
|
||||
$ id username
|
||||
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
|
||||
id your_user
|
||||
```
|
||||
|
||||
Example output:
|
||||
|
||||
```text
|
||||
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
|
||||
```
|
||||
|
||||
## Docker Mods
|
||||
@ -156,12 +194,29 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
|
||||
|
||||
## Support Info
|
||||
|
||||
* Shell access whilst the container is running: `docker exec -it cura /bin/bash`
|
||||
* To monitor the logs of the container in realtime: `docker logs -f cura`
|
||||
* container version number
|
||||
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' cura`
|
||||
* image version number
|
||||
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/cura:latest`
|
||||
* Shell access whilst the container is running:
|
||||
|
||||
```bash
|
||||
docker exec -it cura /bin/bash
|
||||
```
|
||||
|
||||
* To monitor the logs of the container in realtime:
|
||||
|
||||
```bash
|
||||
docker logs -f cura
|
||||
```
|
||||
|
||||
* Container version number:
|
||||
|
||||
```bash
|
||||
docker inspect -f '{{ index .Config.Labels "build_version" }}' cura
|
||||
```
|
||||
|
||||
* Image version number:
|
||||
|
||||
```bash
|
||||
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/cura:latest
|
||||
```
|
||||
|
||||
## Updating Info
|
||||
|
||||
@ -171,38 +226,83 @@ Below are the instructions for updating containers:
|
||||
|
||||
### Via Docker Compose
|
||||
|
||||
* Update all images: `docker-compose pull`
|
||||
* or update a single image: `docker-compose pull cura`
|
||||
* Let compose update all containers as necessary: `docker-compose up -d`
|
||||
* or update a single container: `docker-compose up -d cura`
|
||||
* You can also remove the old dangling images: `docker image prune`
|
||||
* Update images:
|
||||
* All images:
|
||||
|
||||
```bash
|
||||
docker-compose pull
|
||||
```
|
||||
|
||||
* Single image:
|
||||
|
||||
```bash
|
||||
docker-compose pull cura
|
||||
```
|
||||
|
||||
* Update containers:
|
||||
* All containers:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
* Single container:
|
||||
|
||||
```bash
|
||||
docker-compose up -d cura
|
||||
```
|
||||
|
||||
* You can also remove the old dangling images:
|
||||
|
||||
```bash
|
||||
docker image prune
|
||||
```
|
||||
|
||||
### Via Docker Run
|
||||
|
||||
* Update the image: `docker pull lscr.io/linuxserver/cura:latest`
|
||||
* Stop the running container: `docker stop cura`
|
||||
* Delete the container: `docker rm cura`
|
||||
* Update the image:
|
||||
|
||||
```bash
|
||||
docker pull lscr.io/linuxserver/cura:latest
|
||||
```
|
||||
|
||||
* Stop the running container:
|
||||
|
||||
```bash
|
||||
docker stop cura
|
||||
```
|
||||
|
||||
* Delete the container:
|
||||
|
||||
```bash
|
||||
docker rm cura
|
||||
```
|
||||
|
||||
* 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: `docker image prune`
|
||||
* You can also remove the old dangling images:
|
||||
|
||||
```bash
|
||||
docker image prune
|
||||
```
|
||||
|
||||
### Via Watchtower auto-updater (only use if you don't remember the original parameters)
|
||||
|
||||
* 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 cura
|
||||
```
|
||||
```bash
|
||||
docker run --rm \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
containrrr/watchtower \
|
||||
--run-once cura
|
||||
```
|
||||
|
||||
* 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).
|
||||
**warning**: 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)
|
||||
|
||||
* We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
|
||||
**tip**: We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
|
||||
|
||||
## Building locally
|
||||
|
||||
@ -227,4 +327,4 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
|
||||
|
||||
## Versions
|
||||
|
||||
* **21.01.23:** - Initial release.
|
||||
* **15.11.23:** - Initial release.
|
||||
|
||||
@ -2,12 +2,13 @@
|
||||
|
||||
# jenkins variables
|
||||
project_name: docker-cura
|
||||
external_type: na
|
||||
custom_version_command: "curl -sX GET https://api.github.com/repos/Ultimaker/Cura/releases/latest | jq -r '.tag_name'"
|
||||
external_type: github_stable
|
||||
release_type: stable
|
||||
release_tag: latest
|
||||
ls_branch: main
|
||||
repo_vars:
|
||||
- EXT_USER = 'Ultimaker'
|
||||
- EXT_REPO = 'Cura'
|
||||
- BUILD_VERSION_ARG = 'CURA_VERSION'
|
||||
- LS_USER = 'linuxserver'
|
||||
- LS_REPO = 'docker-cura'
|
||||
@ -15,7 +16,7 @@ repo_vars:
|
||||
- DOCKERHUB_IMAGE = 'linuxserver/cura'
|
||||
- DEV_DOCKERHUB_IMAGE = 'lsiodev/cura'
|
||||
- PR_DOCKERHUB_IMAGE = 'lspipepr/cura'
|
||||
- DIST_IMAGE = 'arch'
|
||||
- DIST_IMAGE = 'ubuntu'
|
||||
- MULTIARCH = 'false'
|
||||
- CI = 'true'
|
||||
- CI_WEB = 'true'
|
||||
|
||||
@ -1,458 +0,0 @@
|
||||
adduser3.118ubuntu5
|
||||
adwaita-icon-theme41.0-1ubuntu1
|
||||
apt2.4.8
|
||||
apt-transport-https2.4.8
|
||||
apt-utils2.4.8
|
||||
base-files12ubuntu4.2
|
||||
base-passwd3.5.52build1
|
||||
bash5.1-6ubuntu1
|
||||
bsdextrautils2.37.2-4ubuntu3
|
||||
bsdutils1:2.37.2-4ubuntu3
|
||||
ca-certificates20211016ubuntu0.22.04.1
|
||||
coreutils8.32-4.1ubuntu1
|
||||
cpp-1111.3.0-1ubuntu1~22.04
|
||||
cpp4:11.2.0-1ubuntu1
|
||||
curl7.81.0-1ubuntu1.7
|
||||
dash0.5.11+git20210903+057cd650a4ed-3build1
|
||||
dbus1.12.20-2ubuntu4.1
|
||||
dbus-x111.12.20-2ubuntu4.1
|
||||
dconf-gsettings-backend0.40.0-3
|
||||
dconf-service0.40.0-3
|
||||
debconf1.5.79ubuntu1
|
||||
debianutils5.5-1ubuntu2
|
||||
diffutils1:3.8-0ubuntu2
|
||||
dirmngr2.2.27-3ubuntu2.1
|
||||
distro-info-data0.52ubuntu0.2
|
||||
docker-ce-cli5:20.10.22~3-0~ubuntu-bionic
|
||||
dpkg1.21.1ubuntu2.1
|
||||
e2fsprogs1.46.5-2ubuntu1.1
|
||||
findutils4.8.0-1ubuntu3
|
||||
fontconfig2.13.1-4.2ubuntu5
|
||||
fontconfig-config2.13.1-4.2ubuntu5
|
||||
fonts-dejavu-core2.37-2build1
|
||||
gawk1:5.1.0-1build3
|
||||
gcc-11-base11.3.0-1ubuntu1~22.04
|
||||
gcc-12-base12.1.0-2ubuntu1~22.04
|
||||
gir1.2-glib-2.01.72.0-1
|
||||
gir1.2-packagekitglib-1.01.2.5-2ubuntu2
|
||||
glib-networking2.72.0-1
|
||||
glib-networking-common2.72.0-1
|
||||
glib-networking-services2.72.0-1
|
||||
gnupg22.2.27-3ubuntu2.1
|
||||
gnupg2.2.27-3ubuntu2.1
|
||||
gnupg-l10n2.2.27-3ubuntu2.1
|
||||
gnupg-utils2.2.27-3ubuntu2.1
|
||||
gpg2.2.27-3ubuntu2.1
|
||||
gpg-agent2.2.27-3ubuntu2.1
|
||||
gpgconf2.2.27-3ubuntu2.1
|
||||
gpgsm2.2.27-3ubuntu2.1
|
||||
gpgv2.2.27-3ubuntu2.1
|
||||
gpg-wks-client2.2.27-3ubuntu2.1
|
||||
gpg-wks-server2.2.27-3ubuntu2.1
|
||||
grep3.7-1build1
|
||||
groff-base1.22.4-8build1
|
||||
gsettings-desktop-schemas42.0-1ubuntu1
|
||||
gtk-update-icon-cache3.24.33-1ubuntu2
|
||||
guacd1.1.0-1
|
||||
gzip1.10-4ubuntu4.1
|
||||
hicolor-icon-theme0.17-2
|
||||
hostname3.23ubuntu2
|
||||
humanity-icon-theme0.6.16
|
||||
init-system-helpers1.62
|
||||
iso-codes4.9.0-1
|
||||
jq1.6-2.1ubuntu3
|
||||
keyboard-configuration1.205ubuntu3
|
||||
libacl12.3.1-1
|
||||
libapparmor13.0.4-2ubuntu2.1
|
||||
libappstream40.15.2-2
|
||||
libapt-pkg6.02.4.8
|
||||
libargon2-10~20171227-0.3
|
||||
libasound21.2.6.1-1ubuntu1
|
||||
libasound2-data1.2.6.1-1ubuntu1
|
||||
libasound2-plugins1.2.6-1
|
||||
libassuan02.5.5-1build1
|
||||
libasyncns00.8-6build2
|
||||
libatk1.0-02.36.0-3build1
|
||||
libatk1.0-data2.36.0-3build1
|
||||
libatk-bridge2.0-02.38.0-3
|
||||
libatspi2.0-02.44.0-3
|
||||
libattr11:2.5.1-1build1
|
||||
libaudit11:3.0.7-1build1
|
||||
libaudit-common1:3.0.7-1build1
|
||||
libavahi-client30.8-5ubuntu5
|
||||
libavahi-common30.8-5ubuntu5
|
||||
libavahi-common-data0.8-5ubuntu5
|
||||
libblkid12.37.2-4ubuntu3
|
||||
libbrotli11.0.9-2build6
|
||||
libbsd00.11.5-1
|
||||
libbz2-1.01.0.8-5build1
|
||||
libc62.35-0ubuntu3.1
|
||||
libcairo21.16.0-5ubuntu2
|
||||
libcairo-gobject21.16.0-5ubuntu2
|
||||
libcap21:2.44-1build3
|
||||
libcap2-bin1:2.44-1build3
|
||||
libcap-ng00.7.9-2.2build3
|
||||
libc-bin2.35-0ubuntu3.1
|
||||
libcbor0.80.8.0-2ubuntu1
|
||||
libcolord21.4.6-1
|
||||
libcom-err21.46.5-2ubuntu1.1
|
||||
libcrypt11:4.4.27-1
|
||||
libcryptsetup122:2.4.3-1ubuntu1.1
|
||||
libcups22.4.1op1-1ubuntu4.1
|
||||
libcurl3-gnutls7.81.0-1ubuntu1.7
|
||||
libcurl47.81.0-1ubuntu1.7
|
||||
libdatrie10.2.13-2
|
||||
libdb5.35.3.28+dfsg1-0.8ubuntu3
|
||||
libdbus-1-31.12.20-2ubuntu4.1
|
||||
libdconf10.40.0-3
|
||||
libdebconfclient00.261ubuntu1
|
||||
libdeflate01.10-2
|
||||
libdevmapper1.02.12:1.02.175-2.1ubuntu4
|
||||
libdrm22.4.110-1ubuntu1
|
||||
libdrm-amdgpu12.4.110-1ubuntu1
|
||||
libdrm-common2.4.110-1ubuntu1
|
||||
libdrm-intel12.4.110-1ubuntu1
|
||||
libdrm-nouveau22.4.110-1ubuntu1
|
||||
libdrm-radeon12.4.110-1ubuntu1
|
||||
libdw10.186-1build1
|
||||
libedit23.1-20210910-1build1
|
||||
libegl11.4.0-1
|
||||
libegl-mesa022.0.5-0ubuntu0.3
|
||||
libelf10.186-1build1
|
||||
libepoxy01.5.10-1
|
||||
libexpat12.4.7-1ubuntu0.2
|
||||
libext2fs21.46.5-2ubuntu1.1
|
||||
libffi83.4.2-4
|
||||
libfftw3-single33.3.8-2ubuntu8
|
||||
libfido2-11.10.0-1
|
||||
libflac81.3.3-2ubuntu0.1
|
||||
libfontconfig12.13.1-4.2ubuntu5
|
||||
libfontenc11:1.1.4-1build3
|
||||
libfreerdp2-22.6.1+dfsg1-3ubuntu2.3
|
||||
libfreerdp-client2-22.6.1+dfsg1-3ubuntu2.3
|
||||
libfreetype62.11.1+dfsg-1ubuntu0.1
|
||||
libfribidi01.0.8-2ubuntu3.1
|
||||
libfuse22.9.9-5ubuntu3
|
||||
libgbm122.0.5-0ubuntu0.3
|
||||
libgcc-s112.1.0-2ubuntu1~22.04
|
||||
libgcrypt201.9.4-3ubuntu3
|
||||
libgdbm61.23-1
|
||||
libgdk-pixbuf-2.0-02.42.8+dfsg-1ubuntu0.2
|
||||
libgdk-pixbuf2.0-common2.42.8+dfsg-1ubuntu0.2
|
||||
libgif75.1.9-2build2
|
||||
libgirepository-1.0-11.72.0-1
|
||||
libgl11.4.0-1
|
||||
libgl1-mesa-dri22.0.5-0ubuntu0.3
|
||||
libglapi-mesa22.0.5-0ubuntu0.3
|
||||
libglib2.0-02.72.4-0ubuntu1
|
||||
libglib2.0-bin2.72.4-0ubuntu1
|
||||
libglib2.0-data2.72.4-0ubuntu1
|
||||
libglvnd01.4.0-1
|
||||
libglx01.4.0-1
|
||||
libglx-mesa022.0.5-0ubuntu0.3
|
||||
libgmp102:6.2.1+dfsg-3ubuntu1
|
||||
libgnutls303.7.3-4ubuntu1.1
|
||||
libgomp112.1.0-2ubuntu1~22.04
|
||||
libgpg-error01.43-3
|
||||
libgraphite2-31.3.14-1build2
|
||||
libgssapi-krb5-21.19.2-2
|
||||
libgstreamer1.0-01.20.3-0ubuntu1
|
||||
libgstreamer-plugins-base1.0-01.20.1-1
|
||||
libgtk-3-03.24.33-1ubuntu2
|
||||
libgtk-3-common3.24.33-1ubuntu2
|
||||
libharfbuzz0b2.7.4-1ubuntu3.1
|
||||
libhogweed63.7.3-1build2
|
||||
libice62:1.0.10-1build2
|
||||
libicu7070.1-2
|
||||
libid3tag00.15.1b-14
|
||||
libidn2-02.3.2-2build1
|
||||
libimlib21.7.4-1build1
|
||||
libip4tc21.8.7-1ubuntu5
|
||||
libisl230.24-2build1
|
||||
libjack-jackd2-01.9.20~dfsg-1
|
||||
libjbig02.1-3.1ubuntu0.22.04.1
|
||||
libjpeg88c-2ubuntu10
|
||||
libjpeg-turbo82.1.2-0ubuntu1
|
||||
libjq11.6-2.1ubuntu3
|
||||
libjson-c50.15-3~ubuntu1.22.04.1
|
||||
libjson-glib-1.0-01.6.6-1build1
|
||||
libjson-glib-1.0-common1.6.6-1build1
|
||||
libk5crypto31.19.2-2
|
||||
libkeyutils11.6.1-2ubuntu3
|
||||
libkmod229-1ubuntu1
|
||||
libkrb5-31.19.2-2
|
||||
libkrb5support01.19.2-2
|
||||
libksba81.6.0-2ubuntu0.2
|
||||
liblcms2-22.12~rc1-2build2
|
||||
libldap-2.5-02.5.13+dfsg-0ubuntu0.22.04.1
|
||||
libldap-common2.5.13+dfsg-0ubuntu0.22.04.1
|
||||
libllvm131:13.0.1-2ubuntu2.1
|
||||
liblocale-gettext-perl1.07-4build3
|
||||
libltdl72.4.6-15build2
|
||||
liblz4-11.9.3-2build2
|
||||
liblzma55.2.5-2ubuntu1
|
||||
libmd01.0.4-1build1
|
||||
libmount12.37.2-4ubuntu3
|
||||
libmpc31.2.1-2build1
|
||||
libmpdec32.5.1-2build2
|
||||
libmpfr64.1.0-3build3
|
||||
libncurses66.3-2
|
||||
libncursesw66.3-2
|
||||
libnettle83.7.3-1build2
|
||||
libnghttp2-141.43.0-1build3
|
||||
libnpth01.6-3build2
|
||||
libnsl21.3.0-2build2
|
||||
libnspr42:4.32-3build1
|
||||
libnss32:3.68.2-0ubuntu1.1
|
||||
libobrender32v53.6.1-10
|
||||
libobt2v53.6.1-10
|
||||
libogg01.3.5-0ubuntu3
|
||||
libonig56.9.7.1-2build1
|
||||
libopus01.3.1-0.1build2
|
||||
liborc-0.4-01:0.4.32-2
|
||||
libossp-uuid161.6.2-1.5build9
|
||||
libp11-kit00.24.0-6build1
|
||||
libpackagekit-glib2-181.2.5-2ubuntu2
|
||||
libpam0g1.4.0-11ubuntu2
|
||||
libpam-modules1.4.0-11ubuntu2
|
||||
libpam-modules-bin1.4.0-11ubuntu2
|
||||
libpam-runtime1.4.0-11ubuntu2
|
||||
libpam-systemd249.11-0ubuntu3.6
|
||||
libpango-1.0-01.50.6+ds-2
|
||||
libpangocairo-1.0-01.50.6+ds-2
|
||||
libpangoft2-1.0-01.50.6+ds-2
|
||||
libpangoxft-1.0-01.50.6+ds-2
|
||||
libpciaccess00.16-3
|
||||
libpcre2-8-010.39-3ubuntu0.1
|
||||
libpcre32:8.39-13ubuntu0.22.04.1
|
||||
libpipeline11.5.5-1
|
||||
libpixman-1-00.40.0-1ubuntu0.22.04.1
|
||||
libpng16-161.6.37-3build5
|
||||
libpolkit-agent-1-00.105-33
|
||||
libpolkit-gobject-1-00.105-33
|
||||
libprocps82:3.3.17-6ubuntu2
|
||||
libproxy1v50.4.17-2
|
||||
libpsl50.21.0-1.2build2
|
||||
libpthread-stubs0-dev0.4-1build2
|
||||
libpulse01:15.99.1+dfsg1-1ubuntu2
|
||||
libpulsedsp1:15.99.1+dfsg1-1ubuntu2
|
||||
libpython2.7-minimal2.7.18-13ubuntu1.1
|
||||
libpython2.7-stdlib2.7.18-13ubuntu1.1
|
||||
libpython2-stdlib2.7.18-3
|
||||
libpython3.10-minimal3.10.6-1~22.04.2
|
||||
libpython3.10-stdlib3.10.6-1~22.04.2
|
||||
libpython3-stdlib3.10.6-1~22.04
|
||||
libreadline88.1.2-1
|
||||
librsvg2-22.52.5+dfsg-3
|
||||
librtmp12.4+20151223.gitfa8646d.1-2build4
|
||||
libsamplerate00.2.2-1build1
|
||||
libsasl2-22.1.27+dfsg2-3ubuntu1.1
|
||||
libsasl2-modules2.1.27+dfsg2-3ubuntu1.1
|
||||
libsasl2-modules-db2.1.27+dfsg2-3ubuntu1.1
|
||||
libseccomp22.5.3-2ubuntu2
|
||||
libselinux13.3-1build2
|
||||
libsemanage23.3-1build2
|
||||
libsemanage-common3.3-1build2
|
||||
libsensors51:3.6.0-7ubuntu1
|
||||
libsensors-config1:3.6.0-7ubuntu1
|
||||
libsepol23.3-1build1
|
||||
libsigsegv22.13-1ubuntu3
|
||||
libsm62:1.2.3-1build2
|
||||
libsmartcols12.37.2-4ubuntu3
|
||||
libsnapd-glib11.60-0ubuntu1
|
||||
libsndfile11.0.31-2build1
|
||||
libsoup2.4-12.74.2-3
|
||||
libsoup2.4-common2.74.2-3
|
||||
libsoxr00.1.3-4build2
|
||||
libspeexdsp11.2~rc1.2-1.1ubuntu3
|
||||
libsqlite3-03.37.2-2ubuntu0.1
|
||||
libss21.46.5-2ubuntu1.1
|
||||
libssh-40.9.6-2build1
|
||||
libssl33.0.2-0ubuntu1.7
|
||||
libstartup-notification00.12-6build2
|
||||
libstdc++612.1.0-2ubuntu1~22.04
|
||||
libstemmer0d2.2.0-1build1
|
||||
libsystemd0249.11-0ubuntu3.6
|
||||
libtasn1-64.18.0-4build1
|
||||
libtdb11.4.5-2build1
|
||||
libthai00.1.29-1build1
|
||||
libthai-data0.1.29-1build1
|
||||
libtiff54.3.0-6ubuntu0.3
|
||||
libtinfo66.3-2
|
||||
libtirpc31.3.2-2ubuntu0.1
|
||||
libtirpc-common1.3.2-2ubuntu0.1
|
||||
libuchardet00.0.7-1build2
|
||||
libudev1249.11-0ubuntu3.6
|
||||
libunistring21.0-1
|
||||
libunwind81.3.2-2build2
|
||||
libusb-1.0-02:1.0.25-1ubuntu2
|
||||
libutempter01.2.1-2build2
|
||||
libuuid12.37.2-4ubuntu3
|
||||
libvorbis0a1.3.7-1build2
|
||||
libvorbisenc21.3.7-1build2
|
||||
libvulkan11.3.204.1-2
|
||||
libwayland-client01.20.0-1ubuntu0.1
|
||||
libwayland-cursor01.20.0-1ubuntu0.1
|
||||
libwayland-egl11.20.0-1ubuntu0.1
|
||||
libwayland-server01.20.0-1ubuntu0.1
|
||||
libwebp71.2.2-2
|
||||
libwebrtc-audio-processing10.3.1-0ubuntu5
|
||||
libwinpr2-22.6.1+dfsg1-3ubuntu2.3
|
||||
libwrap07.6.q-31build2
|
||||
libx11-62:1.7.5-1
|
||||
libx11-data2:1.7.5-1
|
||||
libx11-dev2:1.7.5-1
|
||||
libx11-xcb12:1.7.5-1
|
||||
libxau61:1.0.9-1build5
|
||||
libxau-dev1:1.0.9-1build5
|
||||
libxaw72:1.0.14-1
|
||||
libxcb11.14-3ubuntu3
|
||||
libxcb1-dev1.14-3ubuntu3
|
||||
libxcb-dri2-01.14-3ubuntu3
|
||||
libxcb-dri3-01.14-3ubuntu3
|
||||
libxcb-glx01.14-3ubuntu3
|
||||
libxcb-present01.14-3ubuntu3
|
||||
libxcb-render01.14-3ubuntu3
|
||||
libxcb-shape01.14-3ubuntu3
|
||||
libxcb-shm01.14-3ubuntu3
|
||||
libxcb-sync11.14-3ubuntu3
|
||||
libxcb-util10.4.0-1build2
|
||||
libxcb-xfixes01.14-3ubuntu3
|
||||
libxcomposite11:0.4.5-1build2
|
||||
libxcursor11:1.2.0-2build4
|
||||
libxcvt00.1.1-3
|
||||
libxdamage11:1.1.5-2build2
|
||||
libxdmcp61:1.1.3-0ubuntu5
|
||||
libxdmcp-dev1:1.1.3-0ubuntu5
|
||||
libxext62:1.3.4-1build1
|
||||
libxfixes31:6.0.0-1
|
||||
libxfont21:2.0.5-1build1
|
||||
libxft22.3.4-1
|
||||
libxi62:1.8-1build1
|
||||
libxinerama12:1.1.4-3
|
||||
libxkbcommon01.4.0-1
|
||||
libxkbfile11:1.1.0-1build3
|
||||
libxml22.9.13+dfsg-1ubuntu0.2
|
||||
libxmlb20.3.6-2build1
|
||||
libxmu62:1.1.3-3
|
||||
libxmuu12:1.1.3-3
|
||||
libxpm41:3.5.12-1build2
|
||||
libxrandr22:1.5.2-1build1
|
||||
libxrender11:0.9.10-1build4
|
||||
libxshmfence11.3-1build4
|
||||
libxss11:1.2.3-1build2
|
||||
libxt61:1.2.1-1
|
||||
libxtst62:1.2.3-1build4
|
||||
libxv12:1.0.11-1build2
|
||||
libxvmc12:1.0.12-2build2
|
||||
libxxf86dga12:1.1.5-0ubuntu3
|
||||
libxxf86vm11:1.1.4-1build3
|
||||
libxxhash00.8.1-1
|
||||
libyaml-0-20.2.2-1build2
|
||||
libzstd11.4.8+dfsg-3build1
|
||||
locales2.35-0ubuntu3.1
|
||||
login1:4.8.1-2ubuntu2.1
|
||||
logsave1.46.5-2ubuntu1.1
|
||||
lsb-base11.1.0ubuntu4
|
||||
lsb-release11.1.0ubuntu4
|
||||
man-db2.10.2-1
|
||||
mawk1.3.4.20200120-3
|
||||
media-types7.0.0
|
||||
mount2.37.2-4ubuntu3
|
||||
ncurses-base6.3-2
|
||||
ncurses-bin6.3-2
|
||||
netcat1.218-4ubuntu1
|
||||
netcat-openbsd1.218-4ubuntu1
|
||||
nodejs16.19.0-deb-1nodesource1
|
||||
obconf1:2.0.4+git20150213-2build1
|
||||
openbox3.6.1-10
|
||||
openssh-client1:8.9p1-3ubuntu0.1
|
||||
openssl3.0.2-0ubuntu1.7
|
||||
packagekit1.2.5-2ubuntu2
|
||||
passwd1:4.8.1-2ubuntu2.1
|
||||
perl-base5.34.0-3ubuntu1.1
|
||||
pinentry-curses1.1.1-1build2
|
||||
pkexec0.105-33
|
||||
policykit-10.105-33
|
||||
polkitd0.105-33
|
||||
procps2:3.3.17-6ubuntu2
|
||||
publicsuffix20211207.1025-1
|
||||
pulseaudio1:15.99.1+dfsg1-1ubuntu2
|
||||
pulseaudio-utils1:15.99.1+dfsg1-1ubuntu2
|
||||
python22.7.18-3
|
||||
python2.72.7.18-13ubuntu1.1
|
||||
python2.7-minimal2.7.18-13ubuntu1.1
|
||||
python2-minimal2.7.18-3
|
||||
python3.103.10.6-1~22.04.2
|
||||
python3.10-minimal3.10.6-1~22.04.2
|
||||
python33.10.6-1~22.04
|
||||
python3-apt2.3.0ubuntu2.1
|
||||
python3-blinker1.4+dfsg1-0.4
|
||||
python3-cffi-backend1.15.0-1build2
|
||||
python3-cryptography3.4.8-1ubuntu2
|
||||
python3-dbus1.2.18-3build1
|
||||
python3-distro1.7.0-1
|
||||
python3-gi3.42.1-0ubuntu1
|
||||
python3-httplib20.20.2-2
|
||||
python3-importlib-metadata4.6.4-1
|
||||
python3-jeepney0.7.1-3
|
||||
python3-jwt2.3.0-1ubuntu0.2
|
||||
python3-keyring23.5.0-1
|
||||
python3-launchpadlib1.10.16-1
|
||||
python3-lazr.restfulclient0.14.4-1
|
||||
python3-lazr.uri1.0.6-2
|
||||
python3-minimal3.10.6-1~22.04
|
||||
python3-more-itertools8.10.0-2
|
||||
python3-oauthlib3.2.0-1ubuntu0.1
|
||||
python3-pkg-resources59.6.0-1.2
|
||||
python3-pyparsing2.4.7-1
|
||||
python3-secretstorage3.3.1-1
|
||||
python3-six1.16.0-3ubuntu1
|
||||
python3-software-properties0.99.22.4
|
||||
python3-wadllib1.3.6-1
|
||||
python3-zipp1.0.0-3
|
||||
python-apt-common2.3.0ubuntu2.1
|
||||
readline-common8.1.2-1
|
||||
sed4.8-1ubuntu2
|
||||
sensible-utils0.0.17
|
||||
session-migration0.3.6
|
||||
shared-mime-info2.1-2
|
||||
software-properties-common0.99.22.4
|
||||
ssl-cert1.1.2
|
||||
sudo1.9.9-1ubuntu2.1
|
||||
systemd249.11-0ubuntu3.6
|
||||
systemd-sysv249.11-0ubuntu3.6
|
||||
sysvinit-utils3.01-1ubuntu1
|
||||
tar1.34+dfsg-1build3
|
||||
tzdata2022g-0ubuntu0.22.04.1
|
||||
ubuntu-keyring2021.03.26
|
||||
ubuntu-mono20.10-0ubuntu2
|
||||
ucf3.0043
|
||||
udev249.11-0ubuntu3.6
|
||||
usrmerge25ubuntu2
|
||||
util-linux2.37.2-4ubuntu3
|
||||
x11-apps7.7+8build2
|
||||
x11-common1:7.7+23ubuntu2
|
||||
x11proto-dev2021.5-1
|
||||
x11-session-utils7.7+4build2
|
||||
x11-utils7.7+5build2
|
||||
x11-xkb-utils7.7+5build4
|
||||
x11-xserver-utils7.7+9build1
|
||||
xbitmaps1.1.1-2.1ubuntu1
|
||||
xfonts-base1:1.0.5
|
||||
xfonts-encodings1:1.0.5-0ubuntu2
|
||||
xfonts-utils1:7.7+6build2
|
||||
xkb-data2.33-1
|
||||
xorg-sgml-doctools1:1.11-1.1
|
||||
xorgxrdp1:0.2.17-1build1
|
||||
xrdp0.9.17-2ubuntu2
|
||||
xserver-common2:21.1.3-2ubuntu2.5
|
||||
xserver-xorg-core2:21.1.3-2ubuntu2.5
|
||||
xserver-xorg-video-amdgpu22.0.0-1ubuntu0.1
|
||||
xserver-xorg-video-ati1:19.1.0-2ubuntu1
|
||||
xserver-xorg-video-intel2:2.99.917+git20210115-1
|
||||
xserver-xorg-video-radeon1:19.1.0-2ubuntu1
|
||||
xterm372-1ubuntu1
|
||||
xtrans-dev1.4.0-1
|
||||
xutils1:7.7+23ubuntu2
|
||||
zlib1g1:1.2.11.dfsg-2ubuntu9.2
|
||||
@ -2,9 +2,9 @@
|
||||
|
||||
# project information
|
||||
project_name: cura
|
||||
project_url: "https://ultimaker.com/software/ultimaker-cura"
|
||||
project_logo: "https://github.com/Ultimaker/Cura/raw/main/resources/images/cura-icon.png"
|
||||
project_blurb: "[Ultimaker Cura]({{ project_url }}) is a state-of-the-art slicer app to prepare your 3D models for your 3D printer."
|
||||
project_url: "https://ultimaker.com/software/ultimaker-cura/"
|
||||
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/cura-logo.png"
|
||||
project_blurb: "[UltiMaker Cura]({{ project_url }}) is free, easy-to-use 3D printing software trusted by millions of users. Fine-tune your 3D model with 400+ settings for the best slicing and printing results."
|
||||
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
|
||||
project_blurb_optional_extras_enabled: false
|
||||
|
||||
@ -23,10 +23,14 @@ param_env_vars:
|
||||
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
|
||||
param_usage_include_vols: true
|
||||
param_volumes:
|
||||
- { vol_path: "/config", vol_host_path: "/path/to/config", desc: "Users home directory in the container, stores program settings and files" }
|
||||
- { vol_path: "/config", vol_host_path: "/path/to/config", desc: "Users home directory in the container, stores program settings and files." }
|
||||
param_usage_include_ports: true
|
||||
param_ports:
|
||||
- { external_port: "3000", internal_port: "3000", port_desc: "Cura desktop gui." }
|
||||
- { external_port: "3001", internal_port: "3001", port_desc: "Cura desktop gui HTTPS." }
|
||||
opt_security_opt_param: true
|
||||
opt_security_opt_param_vars:
|
||||
- { run_var: "seccomp=unconfined", compose_var: "seccomp:unconfined", desc: "For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker." }
|
||||
|
||||
# application setup block
|
||||
app_setup_block_enabled: true
|
||||
@ -34,11 +38,39 @@ app_setup_block: |
|
||||
The application can be accessed at:
|
||||
|
||||
* http://yourhost:3000/
|
||||
* https://yourhost:3001/
|
||||
|
||||
By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:
|
||||
### Options in all KasmVNC based GUI containers
|
||||
|
||||
This container is based on [Docker Baseimage KasmVNC](https://github.com/linuxserver/docker-baseimage-kasmvnc) which means there are additional environment variables and run configurations to enable or disable specific functionality.
|
||||
|
||||
#### Optional environment variables
|
||||
|
||||
| Variable | Description |
|
||||
| :----: | --- |
|
||||
| CUSTOM_PORT | Internal port the container listens on for http if it needs to be swapped from the default 3000. |
|
||||
| CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default 3001. |
|
||||
| CUSTOM_USER | HTTP Basic auth username, abc is default. |
|
||||
| PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |
|
||||
| SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE `/subfolder/` |
|
||||
| TITLE | The page title displayed on the web browser, default "KasmVNC Client". |
|
||||
| FM_HOME | This is the home directory (landing) for the file manager, default "/config". |
|
||||
| START_DOCKER | If set to false a container with privilege will not automatically start the DinD Docker setup. |
|
||||
| DRINODE | If mounting in /dev/dri for [DRI3 GPU Acceleration](https://www.kasmweb.com/kasmvnc/docs/master/gpu_acceleration.html) allows you to specify the device to use IE `/dev/dri/renderD128` |
|
||||
|
||||
#### Optional run configurations
|
||||
|
||||
| Variable | Description |
|
||||
| :----: | --- |
|
||||
| `--privileged` | Will start a Docker in Docker (DinD) setup inside the container to use docker in an isolated environment. For increased performance mount the Docker directory inside the container to the host IE `-v /home/user/docker-data:/var/lib/docker`. |
|
||||
| `-v /var/run/docker.sock:/var/run/docker.sock` | Mount in the host level Docker socket to either interact with it via CLI or use Docker enabled applications. |
|
||||
| `--device /dev/dri:/dev/dri` | Mount a GPU into the container, this can be used in conjunction with the `DRINODE` environment variable to leverage a host video card for GPU accelerated appplications. Only **Open Source** drivers are supported IE (Intel,AMDGPU,Radeon,ATI,Nouveau) |
|
||||
|
||||
### Lossless mode
|
||||
|
||||
This container is capable of delivering a true lossless image at a high framerate to your web browser by changing the Stream Quality preset to "Lossless", more information [here](https://www.kasmweb.com/docs/latest/how_to/lossless.html#technical-background). In order to use this mode from a non localhost endpoint the HTTPS port on 3001 needs to be used. If using a reverse proxy to port 3000 specific headers will need to be set as outlined [here](https://github.com/linuxserver/docker-baseimage-kasmvnc#lossless).
|
||||
|
||||
* http://yourhost:3000/?login=true
|
||||
|
||||
# changelog
|
||||
changelogs:
|
||||
- { date: "21.01.23:", desc: "Initial release." }
|
||||
- { date: "15.11.23:", desc: "Initial release." }
|
||||
|
||||
@ -1 +1 @@
|
||||
/app/cura/cura --appimage-extract-and-run -platformtheme gtk3
|
||||
/opt/cura/AppRun
|
||||
|
||||
8
root/defaults/menu.xml
Normal file
8
root/defaults/menu.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openbox_menu xmlns="http://openbox.org/3.4/menu">
|
||||
<menu id="root-menu" label="MENU">
|
||||
<item label="xterm" icon="/usr/share/pixmaps/xterm-color_48x48.xpm"><action name="Execute"><command>/usr/bin/xterm</command></action></item>
|
||||
<item label="FireFox" icon="/usr/share/icons/hicolor/48x48/apps/firefox-esr.png"><action name="Execute"><command>/usr/bin/firefox</command></action></item>
|
||||
<item label="Cura" icon="/opt/cura/cura-icon.png"><action name="Execute"><command>/opt/cura/AppRun</command></action></item>
|
||||
</menu>
|
||||
</openbox_menu>
|
||||
Loading…
x
Reference in New Issue
Block a user