From 86e0579f33435536f184f62ca2f985b730377075 Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Wed, 15 Mar 2017 17:32:24 +0000 Subject: [PATCH 01/23] fix formatting markdown README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ab1cea1..5946f4e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [forumurl]: https://forum.linuxserver.io [ircurl]: https://www.linuxserver.io/irc/ [podcasturl]: https://www.linuxserver.io/podcast/ +[appurl]: https://sonarr.tv/ +[hub]: https://hub.docker.com/r/linuxserver/sonarr/ [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl] @@ -13,12 +15,10 @@ The [LinuxServer.io][linuxserverurl] team brings you another container release f # linuxserver/sonarr [![](https://images.microbadger.com/badges/image/linuxserver/sonarr.svg)](http://microbadger.com/images/linuxserver/sonarr "Get your own image badge on microbadger.com")[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/sonarr.svg)][hub][![Docker Stars](https://img.shields.io/docker/stars/linuxserver/sonarr.svg)][hub][![Build Status](http://jenkins.linuxserver.io:8080/buildStatus/icon?job=Dockers/LinuxServer.io-hub-built/linuxserver-sonarr)](http://jenkins.linuxserver.io:8080/job/Dockers/job/LinuxServer.io-hub-built/job/linuxserver-sonarr/) -[hub]: https://hub.docker.com/r/linuxserver/sonarr/ [Sonarr](https://sonarr.tv/) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. -[![sonarr](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sonarr-banner.png)][sonarrurl] -[sonarrurl]: https://sonarr.tv/ +[![sonarr](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sonarr-banner.png)][appurl] ## Usage From 189d3f37150fb2241b5c2aff1305945c7ac89e05 Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Thu, 13 Apr 2017 22:46:12 +0100 Subject: [PATCH 02/23] switch to official mono repository --- Dockerfile | 6 +++++- README.md | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d711db5..bfe308a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,11 +5,15 @@ MAINTAINER sparklyballs ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" -# add sonarr repository +# add sonarr and mono repositories RUN \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC && \ echo "deb http://apt.sonarr.tv/ master main" > \ /etc/apt/sources.list.d/sonarr.list && \ + apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ + --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \ + echo "deb http://download.mono-project.com/repo/debian wheezy main" \ + | tee /etc/apt/sources.list.d/mono-xamarin.list && \ # install packages apt-get update && \ diff --git a/README.md b/README.md index 5946f4e..11f1363 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ Access the webui at `:8989`, for more information check out [Sonarr](ht ## Changelog ++ **13.04.17:** Switch to official mono repository. + **30.09.16:** Fix umask + **23.09.16:** Add cd to /opt fixes redirects with althub (issue #25) , make XDG config environment variable From d7f623ba2f67462992ba4c9778d8caa1088d6009 Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Sat, 15 Apr 2017 02:16:04 +0100 Subject: [PATCH 03/23] edit README to /etc/localtime mount in place of /dev/rtc --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11f1363..774f896 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ docker create \ --name sonarr \ -p 8989:8989 \ -e PUID= -e PGID= \ - -v /dev/rtc:/dev/rtc:ro \ + -v /etc/localtime:/etc/localtime:ro \ -v :/config \ -v :/tv \ -v :/downloads \ @@ -43,7 +43,7 @@ http://192.168.x.x:8080 would show you what's running INSIDE the container on po * `-p 8989` - the port sonarr webinterface -* `-v /dev/rtc:/dev/rtc:ro` - map hwclock as ReadOnly (mono throws exceptions otherwise) +* `-v /etc/localtime:/etc/localtime:ro` - map localtime as ReadOnly (mono throws exceptions otherwise) * `-v /config` - database and sonarr configs * `-v /tv` - location of TV library on disk * `-e PGID` for for GroupID - see below for explanation @@ -71,6 +71,7 @@ Access the webui at `:8989`, for more information check out [Sonarr](ht ## Changelog ++ **14.04.17:** Change to mount /etc/localtime in README, thanks cbgj. + **13.04.17:** Switch to official mono repository. + **30.09.16:** Fix umask + **23.09.16:** Add cd to /opt fixes redirects with althub (issue #25) From e013af2690759201a3b15bb27875fd188f8599a9 Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Mon, 17 Apr 2017 10:47:43 +0100 Subject: [PATCH 04/23] rebase to inhouse mono image --- Dockerfile | 9 ++------- README.md | 9 ++++++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index bfe308a..3d09b54 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,19 @@ -FROM lsiobase/xenial +FROM lsiobase/mono MAINTAINER sparklyballs # set environment variables ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" -# add sonarr and mono repositories +# add sonarr repository RUN \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC && \ echo "deb http://apt.sonarr.tv/ master main" > \ /etc/apt/sources.list.d/sonarr.list && \ - apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ - --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \ - echo "deb http://download.mono-project.com/repo/debian wheezy main" \ - | tee /etc/apt/sources.list.d/mono-xamarin.list && \ # install packages apt-get update && \ apt-get install -y \ - libcurl3 \ nzbdrone && \ # cleanup diff --git a/README.md b/README.md index 774f896..628b986 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ docker create \ --name sonarr \ -p 8989:8989 \ -e PUID= -e PGID= \ + -e TZ= \ -v /etc/localtime:/etc/localtime:ro \ -v :/config \ -v :/tv \ @@ -43,14 +44,19 @@ http://192.168.x.x:8080 would show you what's running INSIDE the container on po * `-p 8989` - the port sonarr webinterface -* `-v /etc/localtime:/etc/localtime:ro` - map localtime as ReadOnly (mono throws exceptions otherwise) * `-v /config` - database and sonarr configs * `-v /tv` - location of TV library on disk +* `-v /etc/localtime` for timesync - see [Localtime](#localtime) for important information +* `-e TZ` for timezone information, Europe/London - see [Localtime](#localtime) for important information * `-e PGID` for for GroupID - see below for explanation * `-e PUID` for for UserID - see below for explanation It is based on ubuntu xenial with S6 overlay, for shell access whilst the container is running do `docker exec -it sonarr /bin/bash`. +## Localtime + +It is important that you either set `-v /etc/localtime:/etc/localtime:ro` or the TZ variable, mono will throw exceptions without one of them set. + ### User / Group Identifiers Sometimes when using data 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 the data volume directory on the host is owned by the same user you specify and it will "just work" TM. @@ -71,6 +77,7 @@ Access the webui at `:8989`, for more information check out [Sonarr](ht ## Changelog ++ **17.04.17:** Switch to using inhouse mono baseimage. + **14.04.17:** Change to mount /etc/localtime in README, thanks cbgj. + **13.04.17:** Switch to official mono repository. + **30.09.16:** Fix umask From 5522f50c204a50eb6b218ce7f3844a768fe8f940 Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Mon, 17 Apr 2017 11:02:44 +0100 Subject: [PATCH 05/23] add branch info to README --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 628b986..7561c7c 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,14 @@ docker create \ linuxserver/sonarr ``` +You can choose between ,using tags, various branch versions of sonarr, no tag is required to remain on the main branch. + +Add one of the tags, if required, to the linuxserver/sonarr line of the run/create command in the following format, linuxserver/sonarr:develop + +#### Tags ++ **develop** ++ **preview** + ## Parameters `The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side. From 065be515290d340196e1112656eccbfcb50855a5 Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Mon, 17 Apr 2017 11:05:21 +0100 Subject: [PATCH 06/23] edit tags --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7561c7c..6bd92e8 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,6 @@ Add one of the tags, if required, to the linuxserver/sonarr line of the run/cr #### Tags + **develop** -+ **preview** ## Parameters From 019a9bc9e205aaeca23a37369a6666b122b2aaec Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Mon, 17 Apr 2017 11:07:24 +0100 Subject: [PATCH 07/23] add python note to changelog --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6bd92e8..019c309 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ Access the webui at `:8989`, for more information check out [Sonarr](ht ## Changelog -+ **17.04.17:** Switch to using inhouse mono baseimage. ++ **17.04.17:** Switch to using inhouse mono baseimage, adds python also. + **14.04.17:** Change to mount /etc/localtime in README, thanks cbgj. + **13.04.17:** Switch to official mono repository. + **30.09.16:** Fix umask From a4b778a9a30294058bd6039f5f94c489f968c5cc Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Wed, 12 Jul 2017 15:19:30 +0100 Subject: [PATCH 08/23] update of README with badges for new ci --- Dockerfile | 5 +++++ README.md | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3d09b54..1f34484 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,11 @@ FROM lsiobase/mono MAINTAINER sparklyballs +# set version label +ARG BUILD_DATE +ARG VERSION +LABEL build_version="Build-date:- ${BUILD_DATE}" + # set environment variables ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" diff --git a/README.md b/README.md index 019c309..afd8a22 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,7 @@ The [LinuxServer.io][linuxserverurl] team brings you another container release f * [Podcast][podcasturl] covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation! # linuxserver/sonarr - -[![](https://images.microbadger.com/badges/image/linuxserver/sonarr.svg)](http://microbadger.com/images/linuxserver/sonarr "Get your own image badge on microbadger.com")[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/sonarr.svg)][hub][![Docker Stars](https://img.shields.io/docker/stars/linuxserver/sonarr.svg)][hub][![Build Status](http://jenkins.linuxserver.io:8080/buildStatus/icon?job=Dockers/LinuxServer.io-hub-built/linuxserver-sonarr)](http://jenkins.linuxserver.io:8080/job/Dockers/job/LinuxServer.io-hub-built/job/linuxserver-sonarr/) +[![](https://images.microbadger.com/badges/version/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own version badge on microbadger.com")[![](https://images.microbadger.com/badges/image/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own image badge on microbadger.com")[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/sonarr.svg)][hub][![Docker Stars](https://img.shields.io/docker/stars/linuxserver/sonarr.svg)][hub][![Build Status](https://ci.linuxserver.io/buildStatus/icon?job=Docker-Builders/x86-64/x86-64-sonarr)](https://ci.linuxserver.io/job/Docker-Builders/job/x86-64/job/x86-64-sonarr/) [Sonarr](https://sonarr.tv/) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. @@ -40,6 +39,7 @@ You can choose between ,using tags, various branch versions of sonarr, no tag is Add one of the tags, if required, to the linuxserver/sonarr line of the run/create command in the following format, linuxserver/sonarr:develop #### Tags + + **develop** ## Parameters @@ -80,10 +80,19 @@ Access the webui at `:8989`, for more information check out [Sonarr](ht ## Info -* Monitor the logs of the container in realtime `docker logs -f sonarr`. +Monitor the logs of the container in realtime `docker logs -f sonarr`. -## Changelog +* container version number +`docker inspect -f '{{ index .Config.Labels "build_version" }}' sonarr` + +* image version number + +`docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/sonarr` + +## Versions + ++ **12.07.17:** Add inspect commands to README, move to jenkins build and push. + **17.04.17:** Switch to using inhouse mono baseimage, adds python also. + **14.04.17:** Change to mount /etc/localtime in README, thanks cbgj. + **13.04.17:** Switch to official mono repository. From 482c0115cfe5366a794a30113beed33c8b838f1e Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Wed, 12 Jul 2017 15:43:07 +0100 Subject: [PATCH 09/23] Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1f34484..2787db1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ MAINTAINER sparklyballs # set version label ARG BUILD_DATE ARG VERSION -LABEL build_version="Build-date:- ${BUILD_DATE}" +LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" # set environment variables ARG DEBIAN_FRONTEND="noninteractive" From 2d604921bc15e844d2f2498b8c719ae9cbe3354d Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Fri, 15 Dec 2017 11:23:26 +0000 Subject: [PATCH 10/23] fix continuation lines xenial --- Dockerfile | 10 ++++------ README.md | 1 + 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2787db1..b1c0333 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,25 @@ FROM lsiobase/mono -MAINTAINER sparklyballs # set version label ARG BUILD_DATE ARG VERSION LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="sparklyballs" # set environment variables ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" -# add sonarr repository RUN \ + echo "**** add sonarr repository ****" && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC && \ echo "deb http://apt.sonarr.tv/ master main" > \ /etc/apt/sources.list.d/sonarr.list && \ - -# install packages + echo "**** install packages ****" && \ apt-get update && \ apt-get install -y \ nzbdrone && \ - -# cleanup + echo "**** cleanup ****" && \ apt-get clean && \ rm -rf \ /tmp/* \ diff --git a/README.md b/README.md index afd8a22..83d5e21 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ Monitor the logs of the container in realtime `docker logs -f sonarr`. ## Versions ++ **15.12.17:** Fix continuation lines. + **12.07.17:** Add inspect commands to README, move to jenkins build and push. + **17.04.17:** Switch to using inhouse mono baseimage, adds python also. + **14.04.17:** Change to mount /etc/localtime in README, thanks cbgj. From bb7b041c6f3c082b6503043591d08d1e902295e1 Mon Sep 17 00:00:00 2001 From: sparklyballs Date: Wed, 14 Mar 2018 18:36:41 +0000 Subject: [PATCH 11/23] change baseimages to new ubuntu style --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b1c0333..92acf32 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM lsiobase/mono +FROM lsiobase/mono:xenial # set version label ARG BUILD_DATE From 375b0c298556c9a59f65eff5beb5c07ce3a04e5a Mon Sep 17 00:00:00 2001 From: thelamer Date: Sat, 8 Sep 2018 20:04:42 -0700 Subject: [PATCH 12/23] adding pipeline build logic and multi arch manifests --- Dockerfile | 10 +- Dockerfile.aarch64 | 41 ++++ Dockerfile.armhf | 42 ++++ Jenkinsfile | 484 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 575 insertions(+), 2 deletions(-) create mode 100644 Dockerfile.aarch64 create mode 100644 Dockerfile.armhf create mode 100644 Jenkinsfile diff --git a/Dockerfile b/Dockerfile index 92acf32..ed160fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,22 +3,28 @@ FROM lsiobase/mono:xenial # set version label ARG BUILD_DATE ARG VERSION +ARG SONARR_VERSION LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="sparklyballs" # set environment variables ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" +ENV SONARR_BRANCH="master" RUN \ + if [ -z ${SONARR_VERSION+x} ]; then \ + SONARR_VERSION=$(curl -sX GET http://apt.sonarr.tv/dists/${SONARR_BRANCH}/main/binary-amd64/Packages \ + |grep -A 6 -m 1 "Package: nzbdrone" | awk -F ": " '/Version/{print $2;exit}'); \ + fi && \ echo "**** add sonarr repository ****" && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC && \ - echo "deb http://apt.sonarr.tv/ master main" > \ + echo "deb http://apt.sonarr.tv/ ${SONARR_BRANCH} main" > \ /etc/apt/sources.list.d/sonarr.list && \ echo "**** install packages ****" && \ apt-get update && \ apt-get install -y \ - nzbdrone && \ + nzbdrone=${SONARR_VERSION} && \ echo "**** cleanup ****" && \ apt-get clean && \ rm -rf \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 new file mode 100644 index 0000000..5b6074b --- /dev/null +++ b/Dockerfile.aarch64 @@ -0,0 +1,41 @@ +FROM lsiobase/mono.arm64:xenial +# Add qemu to build on x86_64 systems +COPY qemu-aarch64-static /usr/bin + +# set version label +ARG BUILD_DATE +ARG VERSION +ARG SONARR_VERSION +LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="sparklyballs" + +# set environment variables +ENV XDG_CONFIG_HOME="/config/xdg" + +# package versions +ARG SONARR_BRANCH="master" + +RUN \ + if [ -z ${SONARR_VERSION+x} ]; then \ + SONARR_VERSION=$(curl -sX GET http://apt.sonarr.tv/dists/${SONARR_BRANCH}/main/binary-amd64/Packages \ + |grep -A 6 -m 1 "Package: nzbdrone" | awk -F ": " '/Version/{print $2;exit}'); \ + fi && \ + echo "**** install sonarr ****" && \ + mkdir -p \ + /opt/NzbDrone && \ + curl -o \ + /tmp/sonarr.tar.gz -L \ + "http://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ + tar xf \ + /tmp/sonarr.tar.gz -C \ + /opt/NzbDrone --strip-components=1 && \ + echo "**** cleanup ****" && \ + rm -rf \ + /tmp/* + +# add local files +COPY root/ / + +# ports and volumes +EXPOSE 8989 +VOLUME /config /downloads /tv diff --git a/Dockerfile.armhf b/Dockerfile.armhf new file mode 100644 index 0000000..15dfb0d --- /dev/null +++ b/Dockerfile.armhf @@ -0,0 +1,42 @@ +FROM lsiobase/mono.armhf:xenial +# Add qemu to build on x86_64 systems +COPY qemu-arm-static /usr/bin + +# set version label +ARG BUILD_DATE +ARG VERSION +ARG SONARR_VERSION +LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="sparklyballs" + +# set environment variables +ARG DEBIAN_FRONTEND="noninteractive" +ENV XDG_CONFIG_HOME="/config/xdg" +ENV SONARR_BRANCH="master" + +RUN \ + if [ -z ${SONARR_VERSION+x} ]; then \ + SONARR_VERSION=$(curl -sX GET http://apt.sonarr.tv/dists/${SONARR_BRANCH}/main/binary-amd64/Packages \ + |grep -A 6 -m 1 "Package: nzbdrone" | awk -F ": " '/Version/{print $2;exit}'); \ + fi && \ + echo "**** add sonarr repository ****" && \ + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC && \ + echo "deb http://apt.sonarr.tv/ ${SONARR_BRANCH} main" > \ + /etc/apt/sources.list.d/sonarr.list && \ + echo "**** install packages ****" && \ + apt-get update && \ + apt-get install -y \ + nzbdrone=${SONARR_VERSION} && \ + echo "**** cleanup ****" && \ + apt-get clean && \ + rm -rf \ + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* + +# add local files +COPY root/ / + +# ports and volumes +EXPOSE 8989 +VOLUME /config /downloads /tv diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..1e3c68f --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,484 @@ +pipeline { + agent { + label 'X86-64-MULTI' + } + // Configuraiton for the variables used for this specific repo + environment { + BUILD_VERSION_ARG = 'SONARR_VERSION' + LS_USER = 'linuxserver' + LS_REPO = 'docker-sonarr' + DOCKERHUB_IMAGE = 'linuxserver/sonarr' + DEV_DOCKERHUB_IMAGE = 'lsiodev/sonarr' + PR_DOCKERHUB_IMAGE = 'lspipepr/sonarr' + BUILDS_DISCORD = credentials('build_webhook_url') + GITHUB_TOKEN = credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab') + DIST_IMAGE = 'ubuntu' + DIST_TAG = 'xenial' + DIST_PACKAGES = 'none' + DIST_REPO = 'http://apt.sonarr.tv/dists/master/main/binary-amd64/Packages' + DIST_REPO_PACKAGE = 'nzbdrone' + MULTIARCH='true' + CI='true' + CI_WEB='true' + CI_PORT='8989' + CI_SSL='false' + CI_DELAY='60' + CI_DOCKERENV='TZ=US/Pacific' + CI_AUTH='user:password' + CI_WEBPATH='' + } + stages { + // Setup all the basic environment variables needed for the build + stage("Set ENV Variables base"){ + steps{ + script{ + env.LS_RELEASE = sh( + script: '''curl -s https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/latest | jq -r '. | .tag_name' ''', + returnStdout: true).trim() + env.LS_RELEASE_NOTES = sh( + script: '''git log -1 --pretty=%B | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''', + returnStdout: true).trim() + env.GITHUB_DATE = sh( + script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''', + returnStdout: true).trim() + env.COMMIT_SHA = sh( + script: '''git rev-parse HEAD''', + returnStdout: true).trim() + 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 + } + script{ + env.LS_RELEASE_NUMBER = sh( + script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''', + returnStdout: true).trim() + } + script{ + env.LS_TAG_NUMBER = sh( + script: '''#! /bin/bash + tagsha=$(git rev-list -n 1 ${LS_RELEASE} 2>/dev/null) + if [ "${tagsha}" == "${COMMIT_SHA}" ]; then + echo ${LS_RELEASE_NUMBER} + elif [ -z "${GIT_COMMIT}" ]; then + echo ${LS_RELEASE_NUMBER} + else + echo $((${LS_RELEASE_NUMBER} + 1)) + fi''', + returnStdout: true).trim() + } + } + } + /* ####################### + Package Version Tagging + ####################### */ + // If this is an ubuntu base image determine the base package tag to use + stage("Set Package tag Ubuntu"){ + when { + environment name: 'DIST_IMAGE', value: 'ubuntu' + not {environment name: 'DIST_PACKAGES', value: 'none'} + } + steps{ + sh '''docker pull ubuntu:${DIST_TAG}''' + script{ + env.PACKAGE_TAG = sh( + script: '''docker run --rm ubuntu:${DIST_TAG} sh -c\ + 'apt-get --allow-unauthenticated update -qq >/dev/null 2>&1 &&\ + apt-cache --no-all-versions show '"${DIST_PACKAGES}"' | md5sum | cut -c1-8' ''', + returnStdout: true).trim() + } + } + } + /* ######################## + External Release Tagging + ######################## */ + // If this is a deb repo release pull the specific version from the packages file + stage("Set EXT tag deb repo"){ + steps{ + sh '''docker pull ${DIST_IMAGE}:${DIST_TAG}''' + script{ + env.EXT_RELEASE = sh( + script: '''curl -sX GET ${DIST_REPO} \ + |grep -A 6 -m 1 "Package: ${DIST_REPO_PACKAGE}" | awk -F ": " '/Version/{print $2;exit}' ''', + returnStdout: true).trim() + env.RELEASE_LINK = env.DIST_REPO + } + } + } + // If this is a master build use live docker endpoints + stage("Set ENV live build"){ + when { + branch "master" + environment name: 'CHANGE_ID', value: '' + } + steps { + script{ + env.IMAGE = env.DOCKERHUB_IMAGE + if (env.MULTIARCH == 'true') { + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '|arm32v6-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + } else { + env.CI_TAGS = env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + } + env.META_TAG = env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + } + } + } + // If this is a dev build use dev docker endpoints + stage("Set ENV dev build"){ + when { + not {branch "master"} + environment name: 'CHANGE_ID', value: '' + } + steps { + script{ + env.IMAGE = env.DEV_DOCKERHUB_IMAGE + if (env.MULTIARCH == 'true') { + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v6-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + } else { + env.CI_TAGS = env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + } + env.META_TAG = env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' + } + } + } + // If this is a pull request build use dev docker endpoints + stage("Set ENV PR build"){ + when { + not {environment name: 'CHANGE_ID', value: ''} + } + steps { + script{ + env.IMAGE = env.PR_DOCKERHUB_IMAGE + if (env.MULTIARCH == 'true') { + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v6-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + } else { + env.CI_TAGS = env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + } + env.META_TAG = env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST + env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/' + } + } + } + // Use helper container to render a readme from the template if needed + stage('Update-README') { + when { + branch "master" + environment name: 'CHANGE_ID', value: '' + expression { + env.CONTAINER_NAME != null + } + } + steps { + sh '''#! /bin/bash + TEMPDIR=$(mktemp -d) + docker pull linuxserver/doc-builder:latest + docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -v ${TEMPDIR}:/ansible/readme linuxserver/doc-builder:latest + if [ "$(md5sum ${TEMPDIR}/${CONTAINER_NAME}/README.md | awk '{ print $1 }')" != "$(md5sum README.md | awk '{ print $1 }')" ]; then + git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO} + cp ${TEMPDIR}/${CONTAINER_NAME}/README.md ${TEMPDIR}/${LS_REPO}/ + cd ${TEMPDIR}/${LS_REPO}/ + git --git-dir ${TEMPDIR}/${LS_REPO}/.git add README.md + git --git-dir ${TEMPDIR}/${LS_REPO}/.git commit -m 'Bot Updating README from template' + git --git-dir ${TEMPDIR}/${LS_REPO}/.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 + rm -Rf ${TEMPDIR}''' + script{ + env.README_UPDATED = sh( + script: '''cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''', + returnStdout: true).trim() + } + } + } + // Exit the build if the Readme was just updated + stage('README-exit') { + when { + branch "master" + environment name: 'CHANGE_ID', value: '' + environment name: 'README_UPDATED', value: 'true' + expression { + env.CONTAINER_NAME != null + } + } + steps { + script{ + env.CI_URL = 'README_UPDATE' + env.RELEASE_LINK = 'README_UPDATE' + currentBuild.rawBuild.result = Result.ABORTED + throw new hudson.AbortException('ABORTED_README') + } + } + } + /* ############### + Build Container + ############### */ + // Build Docker container for push to LS Repo + stage('Build-Single') { + when { + environment name: 'MULTIARCH', value: 'false' + } + steps { + sh "docker build --no-cache -t ${IMAGE}:${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + } + } + // Build MultiArch Docker containers for push to LS Repo + stage('Build-Multi') { + when { + environment name: 'MULTIARCH', value: 'true' + } + parallel { + stage('Build X86') { + steps { + sh "docker build --no-cache -t ${IMAGE}:amd64-${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + } + } + stage('Build ARMHF') { + agent { + label 'ARMHF' + } + steps { + withCredentials([ + [ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', + usernameVariable: 'DOCKERUSER', + passwordVariable: 'DOCKERPASS' + ] + ]) { + echo 'Logging into DockerHub' + sh '''#! /bin/bash + echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin + ''' + sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-arm-static -o qemu-arm-static" + sh "chmod +x qemu-*" + sh "docker build --no-cache -f Dockerfile.armhf -t ${IMAGE}:arm32v6-${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + sh "docker tag ${IMAGE}:arm32v6-${META_TAG} lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}" + sh "docker push lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}" + } + } + } + stage('Build ARM64') { + agent { + label 'ARM64' + } + steps { + withCredentials([ + [ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', + usernameVariable: 'DOCKERUSER', + passwordVariable: 'DOCKERPASS' + ] + ]) { + echo 'Logging into DockerHub' + sh '''#! /bin/bash + echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin + ''' + sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-aarch64-static -o qemu-aarch64-static" + sh "chmod +x qemu-*" + sh "docker build --no-cache -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + sh "docker tag ${IMAGE}:arm64v8-${META_TAG} lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" + sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" + } + } + } + } + } + /* ####### + Testing + ####### */ + // Run Container tests + stage('Test') { + when { + environment name: 'CI', value: 'true' + } + steps { + withCredentials([ + string(credentialsId: 'spaces-key', variable: 'DO_KEY'), + string(credentialsId: 'spaces-secret', variable: 'DO_SECRET') + ]) { + sh '''#! /bin/bash + docker pull lsiodev/ci:latest + if [ "${MULTIARCH}" == "true" ]; then + docker pull lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} + docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} + docker tag lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v6-${META_TAG} + docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} + fi + docker run --rm \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -e IMAGE=\"${IMAGE}\" \ + -e DELAY_START=\"${CI_DELAY}\" \ + -e TAGS=\"${CI_TAGS}\" \ + -e META_TAG=\"${META_TAG}\" \ + -e PORT=\"${CI_PORT}\" \ + -e SSL=\"${CI_SSL}\" \ + -e BASE=\"${DIST_IMAGE}\" \ + -e SECRET_KEY=\"${DO_SECRET}\" \ + -e ACCESS_KEY=\"${DO_KEY}\" \ + -e DOCKER_ENV=\"DB_HOST=${TEST_MYSQL_HOST}|DB_DATABASE=bookstack|DB_USERNAME=root|DB_PASSWORD=${TEST_MYSQL_PASSWORD}\" \ + -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 lsiodev/ci:latest \ + python /ci/ci.py''' + script{ + env.CI_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/index.html' + } + } + } + } + /* ################## + Release Logic + ################## */ + // If this is an amd64 only image only push a single image + stage('Docker-Push-Single') { + when { + environment name: 'MULTIARCH', value: 'false' + } + steps { + withCredentials([ + [ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', + usernameVariable: 'DOCKERUSER', + passwordVariable: 'DOCKERPASS' + ] + ]) { + echo 'Logging into DockerHub' + sh '''#! /bin/bash + echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin + ''' + sh "docker tag ${IMAGE}:${META_TAG} ${IMAGE}:latest" + sh "docker push ${IMAGE}:latest" + sh "docker push ${IMAGE}:${META_TAG}" + } + } + } + // If this is a multi arch release push all images and define the manifest + stage('Docker-Push-Multi') { + when { + environment name: 'MULTIARCH', value: 'true' + } + steps { + withCredentials([ + [ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', + usernameVariable: 'DOCKERUSER', + passwordVariable: 'DOCKERPASS' + ] + ]) { + sh '''#! /bin/bash + echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin + ''' + sh '''#! /bin/bash + if [ "${CI}" == "false" ]; then + docker pull lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} + docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} + docker tag lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v6-${META_TAG} + docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} + fi''' + sh "docker tag ${IMAGE}:amd64-${META_TAG} ${IMAGE}:amd64-latest" + sh "docker tag ${IMAGE}:arm32v6-${META_TAG} ${IMAGE}:arm32v6-latest" + sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ${IMAGE}:arm64v8-latest" + sh "docker push ${IMAGE}:amd64-${META_TAG}" + sh "docker push ${IMAGE}:arm32v6-${META_TAG}" + sh "docker push ${IMAGE}:arm64v8-${META_TAG}" + sh "docker push ${IMAGE}:amd64-latest" + sh "docker push ${IMAGE}:arm32v6-latest" + sh "docker push ${IMAGE}:arm64v8-latest" + sh "docker manifest push --purge ${IMAGE}:latest || :" + sh "docker manifest create ${IMAGE}:latest ${IMAGE}:amd64-latest ${IMAGE}:arm32v6-latest ${IMAGE}:arm64v8-latest" + sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm32v6-latest --os linux --arch arm" + sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm64v8-latest --os linux --arch arm64 --variant armv8" + sh "docker manifest push --purge ${IMAGE}:${EXT_RELEASE}-ls${LS_TAG_NUMBER} || :" + sh "docker manifest create ${IMAGE}:${META_TAG} ${IMAGE}:amd64-${META_TAG} ${IMAGE}:arm32v6-${META_TAG} ${IMAGE}:arm64v8-${META_TAG}" + sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm32v6-${META_TAG} --os linux --arch arm" + sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant armv8" + sh "docker manifest push --purge ${IMAGE}:latest" + sh "docker manifest push --purge ${IMAGE}:${META_TAG}" + } + } + } + // If this is a public release tag it in the LS Github and push a changelog from external repo and our internal one + stage('Github-Tag-Push-Release') { + when { + branch "master" + expression { + env.LS_RELEASE != env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-ls' + env.LS_TAG_NUMBER + } + environment name: 'CHANGE_ID', value: '' + } + steps { + echo "Pushing New tag for current commit ${EXT_RELEASE}-pkg-${PACKAGE_TAG}-ls${LS_TAG_NUMBER}" + sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ + -d '{"tag":"'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ + "object": "'${COMMIT_SHA}'",\ + "message": "Tagging Release '${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to master",\ + "type": "commit",\ + "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' + echo "Pushing New release for Tag" + sh '''#! /bin/bash + echo "Updating ${DIST_REPO_PACKAGE} to ${EXT_RELEASE}" > releasebody.json + echo '{"tag_name":"'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ + "target_commitish": "master",\ + "name": "'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ + "body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n**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''' + } + } + // Use helper container to sync the current README on master to the dockerhub endpoint + stage('Sync-README') { + when { + environment name: 'CHANGE_ID', value: '' + } + steps { + withCredentials([ + [ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', + usernameVariable: 'DOCKERUSER', + passwordVariable: 'DOCKERPASS' + ] + ]) { + sh '''#! /bin/bash + docker pull lsiodev/readme-sync + docker run --rm=true \ + -e DOCKERHUB_USERNAME=$DOCKERUSER \ + -e DOCKERHUB_PASSWORD=$DOCKERPASS \ + -e GIT_REPOSITORY=${LS_USER}/${LS_REPO} \ + -e DOCKER_REPOSITORY=${DOCKERHUB_IMAGE} \ + -e GIT_BRANCH=master \ + lsiodev/readme-sync bash -c 'node sync' ''' + } + } + } + } + /* ###################### + Send status to Discord + ###################### */ + post { + success { + sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\ + "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_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} ''' + } + failure { + sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\ + "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_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} ''' + } + } +} From a2fbadb10798f94a0ddf10aa361eb66c0c564960 Mon Sep 17 00:00:00 2001 From: thelamer Date: Sat, 8 Sep 2018 20:17:21 -0700 Subject: [PATCH 13/23] need the none logic added for package tagging during the build --- Jenkinsfile | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1e3c68f..3cc5214 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -71,20 +71,11 @@ pipeline { /* ####################### Package Version Tagging ####################### */ - // If this is an ubuntu base image determine the base package tag to use - stage("Set Package tag Ubuntu"){ - when { - environment name: 'DIST_IMAGE', value: 'ubuntu' - not {environment name: 'DIST_PACKAGES', value: 'none'} - } + // If this does not track package tags + stage("Set Package tag None"){ steps{ - sh '''docker pull ubuntu:${DIST_TAG}''' script{ - env.PACKAGE_TAG = sh( - script: '''docker run --rm ubuntu:${DIST_TAG} sh -c\ - 'apt-get --allow-unauthenticated update -qq >/dev/null 2>&1 &&\ - apt-cache --no-all-versions show '"${DIST_PACKAGES}"' | md5sum | cut -c1-8' ''', - returnStdout: true).trim() + env.PACKAGE_TAG = 'none' } } } From 99f3213e1d426a435c970d44a22726f2f281d576 Mon Sep 17 00:00:00 2001 From: thelamer Date: Sat, 8 Sep 2018 21:26:28 -0700 Subject: [PATCH 14/23] adding dynamically generated readmes to build logic --- Jenkinsfile | 3 +- README.md | 190 ++++++++++++++++++++++++++++++------------------ readme-vars.yml | 63 ++++++++++++++++ 3 files changed, 185 insertions(+), 71 deletions(-) create mode 100644 readme-vars.yml diff --git a/Jenkinsfile b/Jenkinsfile index 3cc5214..3615f55 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,6 +7,7 @@ pipeline { BUILD_VERSION_ARG = 'SONARR_VERSION' LS_USER = 'linuxserver' LS_REPO = 'docker-sonarr' + CONTAINER_NAME = 'sonarr' DOCKERHUB_IMAGE = 'linuxserver/sonarr' DEV_DOCKERHUB_IMAGE = 'lsiodev/sonarr' PR_DOCKERHUB_IMAGE = 'lspipepr/sonarr' @@ -450,7 +451,7 @@ pipeline { -e DOCKERHUB_USERNAME=$DOCKERUSER \ -e DOCKERHUB_PASSWORD=$DOCKERPASS \ -e GIT_REPOSITORY=${LS_USER}/${LS_REPO} \ - -e DOCKER_REPOSITORY=${DOCKERHUB_IMAGE} \ + -e DOCKER_REPOSITORY=${IMAGE} \ -e GIT_BRANCH=master \ lsiodev/readme-sync bash -c 'node sync' ''' } diff --git a/README.md b/README.md index 83d5e21..12bae97 100644 --- a/README.md +++ b/README.md @@ -1,107 +1,157 @@ -[linuxserverurl]: https://linuxserver.io -[forumurl]: https://forum.linuxserver.io -[ircurl]: https://www.linuxserver.io/irc/ -[podcasturl]: https://www.linuxserver.io/podcast/ -[appurl]: https://sonarr.tv/ -[hub]: https://hub.docker.com/r/linuxserver/sonarr/ +[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) -[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl] +The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring :- -The [LinuxServer.io][linuxserverurl] team brings you another container release featuring easy user mapping and community support. Find us for support at: -* [forum.linuxserver.io][forumurl] -* [IRC][ircurl] on freenode at `#linuxserver.io` -* [Podcast][podcasturl] covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation! + * regular and timely application updates + * easy user mappings (PGID, PUID) + * custom base image with s6 overlay + * weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth + * regular security updates -# linuxserver/sonarr -[![](https://images.microbadger.com/badges/version/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own version badge on microbadger.com")[![](https://images.microbadger.com/badges/image/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own image badge on microbadger.com")[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/sonarr.svg)][hub][![Docker Stars](https://img.shields.io/docker/stars/linuxserver/sonarr.svg)][hub][![Build Status](https://ci.linuxserver.io/buildStatus/icon?job=Docker-Builders/x86-64/x86-64-sonarr)](https://ci.linuxserver.io/job/Docker-Builders/job/x86-64/job/x86-64-sonarr/) +Find us at: +* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team. +* [IRC](https://irc.linuxserver.io) - on freenode at `#linuxserver.io`. Our primary support channel is Discord. +* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! +* [Podcast](https://podcast.linuxserver.io) - on hiatus. Coming back soon (late 2018). + +# PSA: Changes are happening + +From August 2018 onwards, Linuxserver are in the midst of switching to a new CI platform which will enable us to build and release multiple architectures under a single repo. To this end, existing images for `arm64` and `armhf` builds are being deprecated. They are replaced by a manifest file in each container which automatically pulls the correct image for your architecture. You'll also be able to pull based on a specific architecture tag. + +TLDR: Multi-arch support is changing from multiple repos to one repo per container image. + +# [linuxserver/sonarr](https://github.com/linuxserver/docker-sonarr) +[![](https://images.microbadger.com/badges/version/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own version badge on microbadger.com") +[![](https://images.microbadger.com/badges/image/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own version badge on microbadger.com") +![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/sonarr.svg) +![Docker Stars](https://img.shields.io/docker/stars/linuxserver/sonarr.svg) [Sonarr](https://sonarr.tv/) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. -[![sonarr](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sonarr-banner.png)][appurl] + +[![sonarr](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sonarr-banner.png)](https://sonarr.tv/) + +## Supported Architectures + +Our images support multiple architectures such as `X86-64`, `arm64` and `armhf`. 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). + +The architectures supported by this image are: + +| Architecture | Tag | +| :----: | --- | +| X86-64 | amd64-latest | +| arm64 | arm64v8-latest | +| armhf | arm32v6-latest | ## Usage +Here are some example snippets to help you get started creating a container. + +### docker + ``` docker create \ - --name sonarr \ - -p 8989:8989 \ - -e PUID= -e PGID= \ - -e TZ= \ - -v /etc/localtime:/etc/localtime:ro \ - -v :/config \ - -v :/tv \ - -v :/downloads \ - linuxserver/sonarr + --name=sonarr \ + -e PUID=1001 \ + -e PGID=1001 \ + -e TZ=Europe/London \ + -p 8989:8989 \ + -v :/config \ + -v :/tv \ + -v :/downloads \ + linuxserver/sonarr ``` You can choose between ,using tags, various branch versions of sonarr, no tag is required to remain on the main branch. Add one of the tags, if required, to the linuxserver/sonarr line of the run/create command in the following format, linuxserver/sonarr:develop - #### Tags + **develop** -## Parameters -`The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side. -For example with a port -p external:internal - what this shows is the port mapping from internal to external of the container. -So -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 -http://192.168.x.x:8080 would show you what's running INSIDE the container on port 80.` +-p 8989:8989 \ +### docker-compose -* `-p 8989` - the port sonarr webinterface -* `-v /config` - database and sonarr configs -* `-v /tv` - location of TV library on disk -* `-v /etc/localtime` for timesync - see [Localtime](#localtime) for important information -* `-e TZ` for timezone information, Europe/London - see [Localtime](#localtime) for important information -* `-e PGID` for for GroupID - see below for explanation -* `-e PUID` for for UserID - see below for explanation - -It is based on ubuntu xenial with S6 overlay, for shell access whilst the container is running do `docker exec -it sonarr /bin/bash`. - -## Localtime - -It is important that you either set `-v /etc/localtime:/etc/localtime:ro` or the TZ variable, mono will throw exceptions without one of them set. - -### User / Group Identifiers - -Sometimes when using data 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 the data volume directory on the host is owned by the same user you specify and it will "just work" TM. - -In this instance `PUID=1001` and `PGID=1001`. To find yours use `id user` as below: +Compatible with docker-compose v2 schemas. ``` - $ id +--- +version: "2" +services: + sonarr: + image: linuxserver/sonarr + container_name: sonarr + environment: + - PUID=1001 + - PGID=1001 + - TZ=Europe/London + volumes: + - :/config + - :/tv + - :/downloads + ports: + - 8989:8989 + mem_limit: 4096m + restart: unless-stopped +``` + +## Parameters + +Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `:` 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 8989` | The port for the Sonarr webinterface | +| `-e PUID=1001` | for UserID - see below for explanation | +| `-e PGID=1001` | for GroupID - see below for explanation | +| `-e TZ=Europe/London` | Specify a timezone to use EG Europe/London, this is required for Sonarr | +| `-v /config` | Database and sonarr configs | +| `-v /tv` | Location of TV library on disk | +| `-v /downloads` | Location of download managers output directory | + +## 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`. + +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=1001` and `PGID=1001`, to find yours use `id user` as below: + +``` + $ id username uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup) ``` -## Setting up the application +  +## Application Setup + Access the webui at `:8989`, for more information check out [Sonarr](https://sonarr.tv/). -## Info -Monitor the logs of the container in realtime `docker logs -f sonarr`. +## Support Info + +* Shell access whilst the container is running: `docker exec -it sonarr /bin/bash` +* To monitor the logs of the container in realtime: `docker logs -f sonarr` * container version number - -`docker inspect -f '{{ index .Config.Labels "build_version" }}' sonarr` - + * `docker inspect -f '{{ index .Config.Labels "build_version" }}' sonarr` * image version number - -`docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/sonarr` + * `docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/sonarr` ## Versions -+ **15.12.17:** Fix continuation lines. -+ **12.07.17:** Add inspect commands to README, move to jenkins build and push. -+ **17.04.17:** Switch to using inhouse mono baseimage, adds python also. -+ **14.04.17:** Change to mount /etc/localtime in README, thanks cbgj. -+ **13.04.17:** Switch to official mono repository. -+ **30.09.16:** Fix umask -+ **23.09.16:** Add cd to /opt fixes redirects with althub (issue #25) -, make XDG config environment variable -+ **15.09.16:** Add libcurl3 package. -+ **09.09.16:** Add layer badges to README. -+ **27.08.16:** Add badges to README. -+ **20.07.16:** Rebase to xenial. -+ **31.08.15:** Cleanup, changed sources to fetch binarys from. also a new baseimage. +* **08.09.18:** - Adding Multi arch images and pipeline build logic +* **15.12.17:** - Fix continuation lines. +* **12.07.17:** - Add inspect commands to README, move to jenkins build and push. +* **17.04.17:** - Switch to using inhouse mono baseimage, adds python also. +* **14.04.17:** - Change to mount /etc/localtime in README, thanks cbgj. +* **13.04.17:** - Switch to official mono repository. +* **30.09.16:** - Fix umask +* **23.09.16:** - Add cd to /opt fixes redirects with althub (issue #25) , make XDG config environment variable +* **15.09.16:** - Add libcurl3 package. +* **09.09.16:** - Add layer badges to README. +* **27.08.16:** - Add badges to README. +* **20.07.16:** - Rebase to xenial. +* **31.08.15:** - Cleanup, changed sources to fetch binarys from. also a new baseimage. diff --git a/readme-vars.yml b/readme-vars.yml new file mode 100644 index 0000000..a06ee21 --- /dev/null +++ b/readme-vars.yml @@ -0,0 +1,63 @@ +--- + +# project information +project_name: sonarr +project_url: "https://sonarr.tv/" +project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sonarr-banner.png" +project_blurb: | + [{{ project_name|capitalize }}]({{ project_url }}) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. +project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" + +# supported architectures +available_architectures: + - { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} + - { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} + - { arch: "{{ arch_armhf }}", tag: "arm32v6-latest"} + +# Optional Block +optional_block_1: true +optional_block_1_items: + - | + You can choose between ,using tags, various branch versions of sonarr, no tag is required to remain on the main branch. + + Add one of the tags, if required, to the linuxserver/sonarr line of the run/create command in the following format, linuxserver/sonarr:develop + #### Tags + + + **develop** + +# container parameters +param_container_name: "{{ project_name }}" +param_usage_include_vols: true +param_volumes: + - { vol_path: "/config", vol_host_path: "", desc: "Database and sonarr configs" } + - { vol_path: "/tv", vol_host_path: "", desc: "Location of TV library on disk" } + - { vol_path: "/downloads", vol_host_path: "", desc: "Location of download managers output directory" } + +param_usage_include_ports: true +param_ports: + - { external_port: "8989", internal_port: "8989", port_desc: "The port for the Sonarr webinterface" } +param_usage_include_env: true +param_env_vars: + - { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London, this is required for Sonarr"} + +# application setup block +app_setup_block_enabled: true +app_setup_block: | + Access the webui at `:8989`, for more information check out [Sonarr](https://sonarr.tv/). + +# changelog +changelogs: + - { date: "08.09.18:", desc: "Adding Multi arch images and pipeline build logic" } + - { date: "15.12.17:", desc: "Fix continuation lines." } + - { date: "12.07.17:", desc: "Add inspect commands to README, move to jenkins build and push." } + - { date: "17.04.17:", desc: "Switch to using inhouse mono baseimage, adds python also." } + - { date: "14.04.17:", desc: "Change to mount /etc/localtime in README, thanks cbgj." } + - { date: "13.04.17:", desc: "Switch to official mono repository." } + - { date: "30.09.16:", desc: "Fix umask" } + - { date: "23.09.16:", desc: "Add cd to /opt fixes redirects with althub (issue #25) +, make XDG config environment variable" } + - { date: "15.09.16:", desc: "Add libcurl3 package." } + - { date: "09.09.16:", desc: "Add layer badges to README." } + - { date: "27.08.16:", desc: "Add badges to README." } + - { date: "20.07.16:", desc: "Rebase to xenial." } + - { date: "31.08.15:", desc: "Cleanup, changed sources to fetch binarys from. also a new baseimage." } From 249f35a4a8083add929caf192517d6ad59171886 Mon Sep 17 00:00:00 2001 From: thelamer Date: Sat, 8 Sep 2018 21:57:41 -0700 Subject: [PATCH 15/23] adding develop build logic and multi arching --- Dockerfile | 2 +- Dockerfile.aarch64 | 2 +- Dockerfile.armhf | 2 +- Jenkinsfile | 38 +++++++++++++++++++------------------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Dockerfile b/Dockerfile index ed160fb..dc280b8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ LABEL maintainer="sparklyballs" # set environment variables ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" -ENV SONARR_BRANCH="master" +ENV SONARR_BRANCH="develop" RUN \ if [ -z ${SONARR_VERSION+x} ]; then \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 5b6074b..e9fe628 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -13,7 +13,7 @@ LABEL maintainer="sparklyballs" ENV XDG_CONFIG_HOME="/config/xdg" # package versions -ARG SONARR_BRANCH="master" +ARG SONARR_BRANCH="develop" RUN \ if [ -z ${SONARR_VERSION+x} ]; then \ diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 15dfb0d..e16b3b5 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -12,7 +12,7 @@ LABEL maintainer="sparklyballs" # set environment variables ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" -ENV SONARR_BRANCH="master" +ENV SONARR_BRANCH="develop" RUN \ if [ -z ${SONARR_VERSION+x} ]; then \ diff --git a/Jenkinsfile b/Jenkinsfile index 3615f55..3af645c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -99,25 +99,25 @@ pipeline { // If this is a master build use live docker endpoints stage("Set ENV live build"){ when { - branch "master" + branch "develop" environment name: 'CHANGE_ID', value: '' } steps { script{ env.IMAGE = env.DOCKERHUB_IMAGE if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '|arm32v6-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' + '|arm32v6-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' + '|arm64v8-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' } else { - env.CI_TAGS = env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + env.CI_TAGS = env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' } - env.META_TAG = env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + env.META_TAG = env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' } } } // If this is a dev build use dev docker endpoints stage("Set ENV dev build"){ when { - not {branch "master"} + not {branch "develop"} environment name: 'CHANGE_ID', value: '' } steps { @@ -315,7 +315,7 @@ pipeline { -e BASE=\"${DIST_IMAGE}\" \ -e SECRET_KEY=\"${DO_SECRET}\" \ -e ACCESS_KEY=\"${DO_KEY}\" \ - -e DOCKER_ENV=\"DB_HOST=${TEST_MYSQL_HOST}|DB_DATABASE=bookstack|DB_USERNAME=root|DB_PASSWORD=${TEST_MYSQL_PASSWORD}\" \ + -e DOCKER_ENV=\"${CI_DOCKERENV}\" \ -e WEB_SCREENSHOT=\"${CI_WEB}\" \ -e WEB_AUTH=\"${CI_AUTH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \ @@ -350,8 +350,8 @@ pipeline { sh '''#! /bin/bash echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin ''' - sh "docker tag ${IMAGE}:${META_TAG} ${IMAGE}:latest" - sh "docker push ${IMAGE}:latest" + sh "docker tag ${IMAGE}:${META_TAG} ${IMAGE}:develop" + sh "docker push ${IMAGE}:develop" sh "docker push ${IMAGE}:${META_TAG}" } } @@ -380,24 +380,24 @@ pipeline { docker tag lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v6-${META_TAG} docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} fi''' - sh "docker tag ${IMAGE}:amd64-${META_TAG} ${IMAGE}:amd64-latest" - sh "docker tag ${IMAGE}:arm32v6-${META_TAG} ${IMAGE}:arm32v6-latest" - sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ${IMAGE}:arm64v8-latest" + sh "docker tag ${IMAGE}:amd64-${META_TAG} ${IMAGE}:amd64-develop" + sh "docker tag ${IMAGE}:arm32v6-${META_TAG} ${IMAGE}:arm32v6-develop" + sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ${IMAGE}:arm64v8-develop" sh "docker push ${IMAGE}:amd64-${META_TAG}" sh "docker push ${IMAGE}:arm32v6-${META_TAG}" sh "docker push ${IMAGE}:arm64v8-${META_TAG}" - sh "docker push ${IMAGE}:amd64-latest" - sh "docker push ${IMAGE}:arm32v6-latest" - sh "docker push ${IMAGE}:arm64v8-latest" - sh "docker manifest push --purge ${IMAGE}:latest || :" - sh "docker manifest create ${IMAGE}:latest ${IMAGE}:amd64-latest ${IMAGE}:arm32v6-latest ${IMAGE}:arm64v8-latest" - sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm32v6-latest --os linux --arch arm" - sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm64v8-latest --os linux --arch arm64 --variant armv8" + sh "docker push ${IMAGE}:amd64-develop" + sh "docker push ${IMAGE}:arm32v6-develop" + sh "docker push ${IMAGE}:arm64v8-develop" + sh "docker manifest push --purge ${IMAGE}:develop || :" + sh "docker manifest create ${IMAGE}:develop ${IMAGE}:amd64-develop ${IMAGE}:arm32v6-develop ${IMAGE}:arm64v8-develop" + sh "docker manifest annotate ${IMAGE}:develop ${IMAGE}:arm32v6-develop --os linux --arch arm" + sh "docker manifest annotate ${IMAGE}:develop ${IMAGE}:arm64v8-develop --os linux --arch arm64 --variant armv8" sh "docker manifest push --purge ${IMAGE}:${EXT_RELEASE}-ls${LS_TAG_NUMBER} || :" sh "docker manifest create ${IMAGE}:${META_TAG} ${IMAGE}:amd64-${META_TAG} ${IMAGE}:arm32v6-${META_TAG} ${IMAGE}:arm64v8-${META_TAG}" sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm32v6-${META_TAG} --os linux --arch arm" sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant armv8" - sh "docker manifest push --purge ${IMAGE}:latest" + sh "docker manifest push --purge ${IMAGE}:develop" sh "docker manifest push --purge ${IMAGE}:${META_TAG}" } } From a96fbd8dfdc39f0de24fab2453bd208424e1fdd9 Mon Sep 17 00:00:00 2001 From: thelamer Date: Sat, 8 Sep 2018 22:06:16 -0700 Subject: [PATCH 16/23] wrong endpoint to determine package version for develop build --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3af645c..f8a8e34 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,7 +16,7 @@ pipeline { DIST_IMAGE = 'ubuntu' DIST_TAG = 'xenial' DIST_PACKAGES = 'none' - DIST_REPO = 'http://apt.sonarr.tv/dists/master/main/binary-amd64/Packages' + DIST_REPO = 'http://apt.sonarr.tv/dists/develop/main/binary-amd64/Packages' DIST_REPO_PACKAGE = 'nzbdrone' MULTIARCH='true' CI='true' From 4962cf19851fdd2189287b6a00ef38fd3cc03a40 Mon Sep 17 00:00:00 2001 From: thelamer Date: Thu, 27 Sep 2018 23:19:17 -0700 Subject: [PATCH 17/23] adding pre-release tagging logic to develop branch for github version control --- Jenkinsfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index f8a8e34..f1a5b13 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -34,7 +34,7 @@ pipeline { steps{ script{ env.LS_RELEASE = sh( - script: '''curl -s https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/latest | jq -r '. | .tag_name' ''', + script: '''curl -s https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases | jq -r 'first(.[] | select(.prerelease == true)) | .tag_name' ''', returnStdout: true).trim() env.LS_RELEASE_NOTES = sh( script: '''git log -1 --pretty=%B | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''', @@ -405,7 +405,7 @@ pipeline { // If this is a public release tag it in the LS Github and push a changelog from external repo and our internal one stage('Github-Tag-Push-Release') { when { - branch "master" + branch "develop" expression { env.LS_RELEASE != env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-ls' + env.LS_TAG_NUMBER } @@ -416,17 +416,17 @@ pipeline { sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ -d '{"tag":"'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ "object": "'${COMMIT_SHA}'",\ - "message": "Tagging Release '${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to master",\ + "message": "Tagging Release '${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to develop",\ "type": "commit",\ "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' echo "Pushing New release for Tag" sh '''#! /bin/bash echo "Updating ${DIST_REPO_PACKAGE} to ${EXT_RELEASE}" > releasebody.json echo '{"tag_name":"'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ - "target_commitish": "master",\ + "target_commitish": "develop",\ "name": "'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ "body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n**Repo Changes:**\\n\\n' > start - printf '","draft": false,"prerelease": false}' >> releasebody.json + printf '","draft": false,"prerelease": true}' >> 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''' } From 18aeb041eae004764072d92a47d550029dd542c2 Mon Sep 17 00:00:00 2001 From: thelamer Date: Sun, 20 Jan 2019 20:56:13 -0800 Subject: [PATCH 18/23] updating branch with current pipeline build logic in prep for PR --- Dockerfile.aarch64 | 1 + Dockerfile.armhf | 1 + Jenkinsfile | 431 ++++++++++++++++++++++++++++----------------- README.md | 10 +- jenkins-vars.yml | 27 +++ 5 files changed, 308 insertions(+), 162 deletions(-) create mode 100644 jenkins-vars.yml diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index e9fe628..870a5f5 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,4 +1,5 @@ FROM lsiobase/mono.arm64:xenial + # Add qemu to build on x86_64 systems COPY qemu-aarch64-static /usr/bin diff --git a/Dockerfile.armhf b/Dockerfile.armhf index e16b3b5..7bf2f60 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -1,4 +1,5 @@ FROM lsiobase/mono.armhf:xenial + # Add qemu to build on x86_64 systems COPY qemu-arm-static /usr/bin diff --git a/Jenkinsfile b/Jenkinsfile index f1a5b13..eb7839f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,8 +2,14 @@ pipeline { agent { label 'X86-64-MULTI' } - // Configuraiton for the variables used for this specific repo + // Input to determine if this is a package check + parameters { + string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK') + } + // Configuration for the variables used for this specific repo environment { + BUILDS_DISCORD=credentials('build_webhook_url') + GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab') BUILD_VERSION_ARG = 'SONARR_VERSION' LS_USER = 'linuxserver' LS_REPO = 'docker-sonarr' @@ -11,19 +17,13 @@ pipeline { DOCKERHUB_IMAGE = 'linuxserver/sonarr' DEV_DOCKERHUB_IMAGE = 'lsiodev/sonarr' PR_DOCKERHUB_IMAGE = 'lspipepr/sonarr' - BUILDS_DISCORD = credentials('build_webhook_url') - GITHUB_TOKEN = credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab') DIST_IMAGE = 'ubuntu' - DIST_TAG = 'xenial' - DIST_PACKAGES = 'none' - DIST_REPO = 'http://apt.sonarr.tv/dists/develop/main/binary-amd64/Packages' - DIST_REPO_PACKAGE = 'nzbdrone' MULTIARCH='true' CI='true' CI_WEB='true' CI_PORT='8989' CI_SSL='false' - CI_DELAY='60' + CI_DELAY='120' CI_DOCKERENV='TZ=US/Pacific' CI_AUTH='user:password' CI_WEBPATH='' @@ -33,6 +33,7 @@ pipeline { stage("Set ENV Variables base"){ steps{ script{ + env.EXIT_STATUS = '' env.LS_RELEASE = sh( script: '''curl -s https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases | jq -r 'first(.[] | select(.prerelease == true)) | .tag_name' ''', returnStdout: true).trim() @@ -72,31 +73,46 @@ pipeline { /* ####################### Package Version Tagging ####################### */ - // If this does not track package tags - stage("Set Package tag None"){ - steps{ - script{ - env.PACKAGE_TAG = 'none' - } - } + // Grab the current package versions in Git to determine package tag + stage("Set Package tag"){ + steps{ + script{ + env.PACKAGE_TAG = sh( + script: '''#!/bin/bash + if [ -e package_versions.txt ] ; then + cat package_versions.txt | md5sum | cut -c1-8 + else + echo none + fi''', + returnStdout: true).trim() + } + } } /* ######################## External Release Tagging ######################## */ - // If this is a deb repo release pull the specific version from the packages file - stage("Set EXT tag deb repo"){ - steps{ - sh '''docker pull ${DIST_IMAGE}:${DIST_TAG}''' - script{ - env.EXT_RELEASE = sh( - script: '''curl -sX GET ${DIST_REPO} \ - |grep -A 6 -m 1 "Package: ${DIST_REPO_PACKAGE}" | awk -F ": " '/Version/{print $2;exit}' ''', - returnStdout: true).trim() - env.RELEASE_LINK = env.DIST_REPO - } - } + // 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 http://apt.sonarr.tv/dists/develop/main/binary-amd64/Packages |grep -A 6 -m 1 'Package: nzbdrone' | awk -F ': ' '/Version/{print $2;exit}' ''', + returnStdout: true).trim() + env.RELEASE_LINK = 'custom_command' + } + } } - // If this is a master build use live docker endpoints + // Sanitize the release tag and strip illegal docker or github characters + stage("Sanitize tag"){ + steps{ + script{ + env.EXT_RELEASE_CLEAN = sh( + script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''', + returnStdout: true).trim() + } + } + } + // If this is a develop build use live docker endpoints stage("Set ENV live build"){ when { branch "develop" @@ -106,11 +122,11 @@ pipeline { script{ env.IMAGE = env.DOCKERHUB_IMAGE if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' + '|arm32v6-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' + '|arm64v8-' + env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v6-' + 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 + '-ls' + env.LS_TAG_NUMBER + '-develop' + env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } - env.META_TAG = env.EXT_RELEASE + '-ls' + env.LS_TAG_NUMBER + '-develop' + env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } } } @@ -124,11 +140,11 @@ pipeline { script{ env.IMAGE = env.DEV_DOCKERHUB_IMAGE if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v6-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v6-' + 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 + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA } - env.META_TAG = env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' } } @@ -142,20 +158,20 @@ pipeline { script{ env.IMAGE = env.PR_DOCKERHUB_IMAGE if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v6-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v6-' + 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 } else { - env.CI_TAGS = env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST } - env.META_TAG = env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/' } } } - // Use helper container to render a readme from the template if needed - stage('Update-README') { + // Use helper containers to render templated files + stage('Update-Templates') { when { - branch "master" + branch "develop" environment name: 'CHANGE_ID', value: '' expression { env.CONTAINER_NAME != null @@ -163,126 +179,214 @@ pipeline { } steps { sh '''#! /bin/bash + set -e TEMPDIR=$(mktemp -d) + docker pull linuxserver/jenkins-builder:latest + docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=develop -v ${TEMPDIR}:/ansible/jenkins linuxserver/jenkins-builder:latest docker pull linuxserver/doc-builder:latest - docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -v ${TEMPDIR}:/ansible/readme linuxserver/doc-builder:latest - if [ "$(md5sum ${TEMPDIR}/${CONTAINER_NAME}/README.md | awk '{ print $1 }')" != "$(md5sum README.md | awk '{ print $1 }')" ]; then - git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO} - cp ${TEMPDIR}/${CONTAINER_NAME}/README.md ${TEMPDIR}/${LS_REPO}/ - cd ${TEMPDIR}/${LS_REPO}/ - git --git-dir ${TEMPDIR}/${LS_REPO}/.git add README.md - git --git-dir ${TEMPDIR}/${LS_REPO}/.git commit -m 'Bot Updating README from template' - git --git-dir ${TEMPDIR}/${LS_REPO}/.git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all + docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=develop -v ${TEMPDIR}:/ansible/readme linuxserver/doc-builder:latest + if [ "$(md5sum ${TEMPDIR}/${LS_REPO}/Jenkinsfile | awk '{ print $1 }')" != "$(md5sum Jenkinsfile | awk '{ print $1 }')" ] || [ "$(md5sum ${TEMPDIR}/${CONTAINER_NAME}/README.md | awk '{ print $1 }')" != "$(md5sum README.md | awk '{ print $1 }')" ]; then + mkdir -p ${TEMPDIR}/repo + git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} + git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git checkout -f develop + cp ${TEMPDIR}/${CONTAINER_NAME}/README.md ${TEMPDIR}/repo/${LS_REPO}/ + cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/ + cd ${TEMPDIR}/repo/${LS_REPO}/ + git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git add Jenkinsfile README.md + git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git commit -m 'Bot Updating Templated Files' + git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.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 rm -Rf ${TEMPDIR}''' script{ - env.README_UPDATED = sh( + env.FILES_UPDATED = sh( script: '''cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''', returnStdout: true).trim() } } } - // Exit the build if the Readme was just updated - stage('README-exit') { + // Exit the build if the Templated files were just updated + stage('Template-exit') { when { - branch "master" + branch "develop" environment name: 'CHANGE_ID', value: '' - environment name: 'README_UPDATED', value: 'true' + environment name: 'FILES_UPDATED', value: 'true' expression { env.CONTAINER_NAME != null } } steps { script{ - env.CI_URL = 'README_UPDATE' - env.RELEASE_LINK = 'README_UPDATE' - currentBuild.rawBuild.result = Result.ABORTED - throw new hudson.AbortException('ABORTED_README') + env.EXIT_STATUS = 'ABORTED' } } } /* ############### Build Container ############### */ - // Build Docker container for push to LS Repo - stage('Build-Single') { - when { - environment name: 'MULTIARCH', value: 'false' - } - steps { - sh "docker build --no-cache -t ${IMAGE}:${META_TAG} \ - --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." - } - } - // Build MultiArch Docker containers for push to LS Repo - stage('Build-Multi') { - when { - environment name: 'MULTIARCH', value: 'true' - } - parallel { - stage('Build X86') { - steps { - sh "docker build --no-cache -t ${IMAGE}:amd64-${META_TAG} \ - --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." - } - } - stage('Build ARMHF') { - agent { - label 'ARMHF' - } - steps { - withCredentials([ - [ - $class: 'UsernamePasswordMultiBinding', - credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', - usernameVariable: 'DOCKERUSER', - passwordVariable: 'DOCKERPASS' - ] - ]) { - echo 'Logging into DockerHub' - sh '''#! /bin/bash - echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin - ''' - sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-arm-static -o qemu-arm-static" - sh "chmod +x qemu-*" - sh "docker build --no-cache -f Dockerfile.armhf -t ${IMAGE}:arm32v6-${META_TAG} \ - --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." - sh "docker tag ${IMAGE}:arm32v6-${META_TAG} lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}" - sh "docker push lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}" - } - } - } - stage('Build ARM64') { - agent { - label 'ARM64' - } - steps { - withCredentials([ - [ - $class: 'UsernamePasswordMultiBinding', - credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', - usernameVariable: 'DOCKERUSER', - passwordVariable: 'DOCKERPASS' - ] - ]) { - echo 'Logging into DockerHub' - sh '''#! /bin/bash - echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin - ''' - sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-aarch64-static -o qemu-aarch64-static" - sh "chmod +x qemu-*" - sh "docker build --no-cache -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \ - --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." - sh "docker tag ${IMAGE}:arm64v8-${META_TAG} lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" - sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" - } - } - } - } - } + // Build Docker container for push to LS Repo + stage('Build-Single') { + when { + environment name: 'MULTIARCH', value: 'false' + environment name: 'EXIT_STATUS', value: '' + } + steps { + sh "docker build --no-cache -t ${IMAGE}:${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + } + } + // Build MultiArch Docker containers for push to LS Repo + stage('Build-Multi') { + when { + environment name: 'MULTIARCH', value: 'true' + environment name: 'EXIT_STATUS', value: '' + } + parallel { + stage('Build X86') { + steps { + sh "docker build --no-cache -t ${IMAGE}:amd64-${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + } + } + stage('Build ARMHF') { + agent { + label 'ARMHF' + } + steps { + withCredentials([ + [ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', + usernameVariable: 'DOCKERUSER', + passwordVariable: 'DOCKERPASS' + ] + ]) { + echo 'Logging into DockerHub' + sh '''#! /bin/bash + echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin + ''' + sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-arm-static -o qemu-arm-static" + sh "chmod +x qemu-*" + sh "docker build --no-cache -f Dockerfile.armhf -t ${IMAGE}:arm32v6-${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + sh "docker tag ${IMAGE}:arm32v6-${META_TAG} lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}" + sh "docker push lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}" + } + } + } + stage('Build ARM64') { + agent { + label 'ARM64' + } + steps { + withCredentials([ + [ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', + usernameVariable: 'DOCKERUSER', + passwordVariable: 'DOCKERPASS' + ] + ]) { + echo 'Logging into DockerHub' + sh '''#! /bin/bash + echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin + ''' + sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-aarch64-static -o qemu-aarch64-static" + sh "chmod +x qemu-*" + sh "docker build --no-cache -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \ + --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." + sh "docker tag ${IMAGE}:arm64v8-${META_TAG} lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" + sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" + } + } + } + } + } + // Take the image we just built and dump package versions for comparison + stage('Update-packages') { + when { + branch "develop" + environment name: 'CHANGE_ID', value: '' + environment name: 'EXIT_STATUS', value: '' + } + steps { + sh '''#! /bin/bash + set -e + TEMPDIR=$(mktemp -d) + if [ "${MULTIARCH}" == "true" ]; then + LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG} + 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 > packages && \ + apk info -v > versions && \ + paste -d " " packages versions > /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 > /tmp/package_versions.txt && \ + chmod 777 /tmp/package_versions.txt' + fi + 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 + git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO} + git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f develop + cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/ + cd ${TEMPDIR}/${LS_REPO}/ + wait + git add package_versions.txt + git commit -m 'Bot Updating Package Versions' + git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all + echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER} + echo "Package tag updated, stopping build process" + else + echo "false" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER} + echo "Package tag is same as previous continue with build process" + fi + rm -Rf ${TEMPDIR}''' + script{ + env.PACKAGE_UPDATED = sh( + script: '''cat /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}''', + returnStdout: true).trim() + } + } + } + // Exit the build if the package file was just updated + stage('PACKAGE-exit') { + when { + branch "develop" + environment name: 'CHANGE_ID', value: '' + environment name: 'PACKAGE_UPDATED', value: 'true' + environment name: 'EXIT_STATUS', value: '' + } + steps { + script{ + env.EXIT_STATUS = 'ABORTED' + } + } + } + // Exit the build if this is just a package check and there are no changes to push + stage('PACKAGECHECK-exit') { + when { + branch "develop" + environment name: 'CHANGE_ID', value: '' + environment name: 'PACKAGE_UPDATED', value: 'false' + environment name: 'EXIT_STATUS', value: '' + expression { + params.PACKAGE_CHECK == 'true' + } + } + steps { + script{ + env.EXIT_STATUS = 'ABORTED' + } + } + } /* ####### Testing ####### */ @@ -290,13 +394,18 @@ pipeline { stage('Test') { when { environment name: 'CI', value: 'true' + environment name: 'EXIT_STATUS', value: '' } steps { withCredentials([ string(credentialsId: 'spaces-key', variable: 'DO_KEY'), string(credentialsId: 'spaces-secret', variable: 'DO_SECRET') ]) { + script{ + env.CI_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/index.html' + } sh '''#! /bin/bash + set -e docker pull lsiodev/ci:latest if [ "${MULTIARCH}" == "true" ]; then docker pull lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} @@ -323,9 +432,6 @@ pipeline { -e DO_BUCKET="lsio-ci" \ -t lsiodev/ci:latest \ python /ci/ci.py''' - script{ - env.CI_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/index.html' - } } } } @@ -336,6 +442,7 @@ pipeline { stage('Docker-Push-Single') { when { environment name: 'MULTIARCH', value: 'false' + environment name: 'EXIT_STATUS', value: '' } steps { withCredentials([ @@ -360,6 +467,7 @@ pipeline { stage('Docker-Push-Multi') { when { environment name: 'MULTIARCH', value: 'true' + environment name: 'EXIT_STATUS', value: '' } steps { withCredentials([ @@ -392,40 +500,41 @@ pipeline { sh "docker manifest push --purge ${IMAGE}:develop || :" sh "docker manifest create ${IMAGE}:develop ${IMAGE}:amd64-develop ${IMAGE}:arm32v6-develop ${IMAGE}:arm64v8-develop" sh "docker manifest annotate ${IMAGE}:develop ${IMAGE}:arm32v6-develop --os linux --arch arm" - sh "docker manifest annotate ${IMAGE}:develop ${IMAGE}:arm64v8-develop --os linux --arch arm64 --variant armv8" - sh "docker manifest push --purge ${IMAGE}:${EXT_RELEASE}-ls${LS_TAG_NUMBER} || :" + sh "docker manifest annotate ${IMAGE}:develop ${IMAGE}:arm64v8-develop --os linux --arch arm64 --variant v8" + sh "docker manifest push --purge ${IMAGE}:${META_TAG} || :" sh "docker manifest create ${IMAGE}:${META_TAG} ${IMAGE}:amd64-${META_TAG} ${IMAGE}:arm32v6-${META_TAG} ${IMAGE}:arm64v8-${META_TAG}" sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm32v6-${META_TAG} --os linux --arch arm" - sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant armv8" + sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8" sh "docker manifest push --purge ${IMAGE}:develop" sh "docker manifest push --purge ${IMAGE}:${META_TAG}" } } } - // If this is a public release tag it in the LS Github and push a changelog from external repo and our internal one + // If this is a public release tag it in the LS Github stage('Github-Tag-Push-Release') { when { branch "develop" expression { - env.LS_RELEASE != env.EXT_RELEASE + '-pkg-' + env.PACKAGE_TAG + '-ls' + env.LS_TAG_NUMBER + env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-ls' + env.LS_TAG_NUMBER } environment name: 'CHANGE_ID', value: '' + environment name: 'EXIT_STATUS', value: '' } steps { - echo "Pushing New tag for current commit ${EXT_RELEASE}-pkg-${PACKAGE_TAG}-ls${LS_TAG_NUMBER}" + echo "Pushing New tag for current commit ${EXT_RELEASE_CLEAN}-pkg-${PACKAGE_TAG}-ls${LS_TAG_NUMBER}" sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ - -d '{"tag":"'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ + -d '{"tag":"'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ "object": "'${COMMIT_SHA}'",\ - "message": "Tagging Release '${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to develop",\ + "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to develop",\ "type": "commit",\ "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' echo "Pushing New release for Tag" sh '''#! /bin/bash - echo "Updating ${DIST_REPO_PACKAGE} to ${EXT_RELEASE}" > releasebody.json - echo '{"tag_name":"'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ + echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json + echo '{"tag_name":"'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ "target_commitish": "develop",\ - "name": "'${EXT_RELEASE}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ - "body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n**Repo Changes:**\\n\\n' > start + "name": "'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\ + "body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n**Remote Changes:**\\n\\n' > start printf '","draft": false,"prerelease": true}' >> 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''' @@ -435,6 +544,7 @@ pipeline { stage('Sync-README') { when { environment name: 'CHANGE_ID', value: '' + environment name: 'EXIT_STATUS', value: '' } steps { withCredentials([ @@ -462,15 +572,22 @@ pipeline { Send status to Discord ###################### */ post { - success { - sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\ - "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_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} ''' - } - failure { - sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\ - "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_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} ''' + always { + script{ + if (env.EXIT_STATUS == "ABORTED"){ + sh 'echo "build aborted"' + } + else if (currentBuild.currentResult == "SUCCESS"){ + sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\ + "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_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 --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\ + "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_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} ''' + } + } } } } diff --git a/README.md b/README.md index 12bae97..5f135d2 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Find us at: * [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team. * [IRC](https://irc.linuxserver.io) - on freenode at `#linuxserver.io`. Our primary support channel is Discord. * [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! -* [Podcast](https://podcast.linuxserver.io) - on hiatus. Coming back soon (late 2018). +* [Podcast](https://anchor.fm/linuxserverio) - on hiatus. Coming back soon (late 2018). # PSA: Changes are happening @@ -21,6 +21,7 @@ From August 2018 onwards, Linuxserver are in the midst of switching to a new CI TLDR: Multi-arch support is changing from multiple repos to one repo per container image. # [linuxserver/sonarr](https://github.com/linuxserver/docker-sonarr) +[![](https://img.shields.io/discord/354974912613449730.svg?logo=discord&label=LSIO%20Discord&style=flat-square)](https://discord.gg/YWrKVTn) [![](https://images.microbadger.com/badges/version/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/linuxserver/sonarr.svg)](https://microbadger.com/images/linuxserver/sonarr "Get your own version badge on microbadger.com") ![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/sonarr.svg) @@ -33,13 +34,13 @@ TLDR: Multi-arch support is changing from multiple repos to one repo per contain ## Supported Architectures -Our images support multiple architectures such as `X86-64`, `arm64` and `armhf`. 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). +Our images support multiple architectures such as `x86-64`, `arm64` and `armhf`. 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). The architectures supported by this image are: | Architecture | Tag | | :----: | --- | -| X86-64 | amd64-latest | +| x86-64 | amd64-latest | | arm64 | arm64v8-latest | | armhf | arm32v6-latest | @@ -59,6 +60,7 @@ docker create \ -v :/config \ -v :/tv \ -v :/downloads \ + --restart unless-stopped \ linuxserver/sonarr ``` @@ -70,8 +72,6 @@ Add one of the tags, if required, to the linuxserver/sonarr line of the run/cr + **develop** --p 8989:8989 \ - ### docker-compose Compatible with docker-compose v2 schemas. diff --git a/jenkins-vars.yml b/jenkins-vars.yml new file mode 100644 index 0000000..8e7aac1 --- /dev/null +++ b/jenkins-vars.yml @@ -0,0 +1,27 @@ +--- + +# jenkins variables +project_name: docker-sonarr +external_type: na +custom_version_command: "curl -sX GET http://apt.sonarr.tv/dists/develop/main/binary-amd64/Packages |grep -A 6 -m 1 'Package: nzbdrone' | awk -F ': ' '/Version/{print $2;exit}'" +release_type: prerelease +release_tag: develop +ls_branch: develop +repo_vars: + - BUILD_VERSION_ARG = 'SONARR_VERSION' + - LS_USER = 'linuxserver' + - LS_REPO = 'docker-sonarr' + - CONTAINER_NAME = 'sonarr' + - DOCKERHUB_IMAGE = 'linuxserver/sonarr' + - DEV_DOCKERHUB_IMAGE = 'lsiodev/sonarr' + - PR_DOCKERHUB_IMAGE = 'lspipepr/sonarr' + - DIST_IMAGE = 'ubuntu' + - MULTIARCH='true' + - CI='true' + - CI_WEB='true' + - CI_PORT='8989' + - CI_SSL='false' + - CI_DELAY='120' + - CI_DOCKERENV='TZ=US/Pacific' + - CI_AUTH='user:password' + - CI_WEBPATH='' From f540632b2880353fdaa48e4fb01a0fffe42cead9 Mon Sep 17 00:00:00 2001 From: aptalca Date: Mon, 28 Jan 2019 15:40:42 -0500 Subject: [PATCH 19/23] standardize the package download urls and simplify version retrieval --- Dockerfile | 24 ++++++++++++++---------- Dockerfile.aarch64 | 23 ++++++++++++++--------- Dockerfile.armhf | 23 +++++++++++++---------- jenkins-vars.yml | 2 +- 4 files changed, 42 insertions(+), 30 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5db0e83..ac01c11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,25 +13,29 @@ ENV XDG_CONFIG_HOME="/config/xdg" ENV SONARR_BRANCH="develop" RUN \ - if [ -z ${SONARR_VERSION+x} ]; then \ - SONARR_VERSION=$(curl -sX GET http://apt.sonarr.tv/dists/${SONARR_BRANCH}/main/binary-amd64/Packages \ - |grep -A 6 -m 1 "Package: nzbdrone" | awk -F ": " '/Version/{print $2;exit}'); \ - fi && \ - echo "**** add sonarr repository ****" && \ - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC && \ - echo "deb http://apt.sonarr.tv/ ${SONARR_BRANCH} main" > \ - /etc/apt/sources.list.d/sonarr.list && \ echo "**** install packages ****" && \ apt-get update && \ apt-get install -y \ - nzbdrone=${SONARR_VERSION} && \ + jq && \ + echo "**** install sonarr ****" && \ + mkdir -p /opt/NzbDrone && \ + if [ -z ${SONARR_VERSION+x} ]; then \ + SONARR_VERSION=$(curl -sX GET http://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ + | jq -r '.version'); \ + fi && \ + curl -o \ + /tmp/sonarr.tar.gz -L \ + "http://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ + tar xf \ + /tmp/sonarr.tar.gz -C \ + /opt/NzbDrone --strip-components=1 && \ echo "**** cleanup ****" && \ apt-get clean && \ rm -rf \ /tmp/* \ - /var/lib/apt/lists/* \ /var/tmp/* + # add local files COPY root/ / diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 870a5f5..dfa8da1 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -17,22 +17,27 @@ ENV XDG_CONFIG_HOME="/config/xdg" ARG SONARR_BRANCH="develop" RUN \ - if [ -z ${SONARR_VERSION+x} ]; then \ - SONARR_VERSION=$(curl -sX GET http://apt.sonarr.tv/dists/${SONARR_BRANCH}/main/binary-amd64/Packages \ - |grep -A 6 -m 1 "Package: nzbdrone" | awk -F ": " '/Version/{print $2;exit}'); \ - fi && \ + echo "**** install packages ****" && \ + apt-get update && \ + apt-get install -y \ + jq && \ echo "**** install sonarr ****" && \ - mkdir -p \ - /opt/NzbDrone && \ + mkdir -p /opt/NzbDrone && \ + if [ -z ${SONARR_VERSION+x} ]; then \ + SONARR_VERSION=$(curl -sX GET http://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ + | jq -r '.version'); \ + fi && \ curl -o \ - /tmp/sonarr.tar.gz -L \ + /tmp/sonarr.tar.gz -L \ "http://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ tar xf \ - /tmp/sonarr.tar.gz -C \ + /tmp/sonarr.tar.gz -C \ /opt/NzbDrone --strip-components=1 && \ echo "**** cleanup ****" && \ + apt-get clean && \ rm -rf \ - /tmp/* + /tmp/* \ + /var/tmp/* # add local files COPY root/ / diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 7bf2f60..11988b2 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -16,23 +16,26 @@ ENV XDG_CONFIG_HOME="/config/xdg" ENV SONARR_BRANCH="develop" RUN \ - if [ -z ${SONARR_VERSION+x} ]; then \ - SONARR_VERSION=$(curl -sX GET http://apt.sonarr.tv/dists/${SONARR_BRANCH}/main/binary-amd64/Packages \ - |grep -A 6 -m 1 "Package: nzbdrone" | awk -F ": " '/Version/{print $2;exit}'); \ - fi && \ - echo "**** add sonarr repository ****" && \ - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC && \ - echo "deb http://apt.sonarr.tv/ ${SONARR_BRANCH} main" > \ - /etc/apt/sources.list.d/sonarr.list && \ echo "**** install packages ****" && \ apt-get update && \ apt-get install -y \ - nzbdrone=${SONARR_VERSION} && \ + jq && \ + echo "**** install sonarr ****" && \ + mkdir -p /opt/NzbDrone && \ + if [ -z ${SONARR_VERSION+x} ]; then \ + SONARR_VERSION=$(curl -sX GET http://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ + | jq -r '.version'); \ + fi && \ + curl -o \ + /tmp/sonarr.tar.gz -L \ + "http://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ + tar xf \ + /tmp/sonarr.tar.gz -C \ + /opt/NzbDrone --strip-components=1 && \ echo "**** cleanup ****" && \ apt-get clean && \ rm -rf \ /tmp/* \ - /var/lib/apt/lists/* \ /var/tmp/* # add local files diff --git a/jenkins-vars.yml b/jenkins-vars.yml index 8e7aac1..db9fb79 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -3,7 +3,7 @@ # jenkins variables project_name: docker-sonarr external_type: na -custom_version_command: "curl -sX GET http://apt.sonarr.tv/dists/develop/main/binary-amd64/Packages |grep -A 6 -m 1 'Package: nzbdrone' | awk -F ': ' '/Version/{print $2;exit}'" +custom_version_command: "curl -sX GET http://services.sonarr.tv/v1/download/develop | jq -r '.version'" release_type: prerelease release_tag: develop ls_branch: develop From 081f0704b5cb92e8c06c92230d416b5e37b24b0a Mon Sep 17 00:00:00 2001 From: aptalca Date: Mon, 28 Jan 2019 15:43:40 -0500 Subject: [PATCH 20/23] update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index eb7839f..056cbf3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -96,7 +96,7 @@ pipeline { steps{ script{ env.EXT_RELEASE = sh( - script: ''' curl -sX GET http://apt.sonarr.tv/dists/develop/main/binary-amd64/Packages |grep -A 6 -m 1 'Package: nzbdrone' | awk -F ': ' '/Version/{print $2;exit}' ''', + script: ''' curl -sX GET http://services.sonarr.tv/v1/download/develop | jq -r '.version' ''', returnStdout: true).trim() env.RELEASE_LINK = 'custom_command' } From 208e435171cb77baa058b3b6c08045b2a2531131 Mon Sep 17 00:00:00 2001 From: aptalca Date: Mon, 28 Jan 2019 16:08:24 -0500 Subject: [PATCH 21/23] standardize Dockerfiles --- Dockerfile.aarch64 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index dfa8da1..358971b 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -11,10 +11,9 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA LABEL maintainer="sparklyballs" # set environment variables +ARG DEBIAN_FRONTEND="noninteractive" ENV XDG_CONFIG_HOME="/config/xdg" - -# package versions -ARG SONARR_BRANCH="develop" +ENV SONARR_BRANCH="develop" RUN \ echo "**** install packages ****" && \ From 64878b3f7bf48aac630ccabf9e2859955f74ec4f Mon Sep 17 00:00:00 2001 From: aptalca Date: Mon, 28 Jan 2019 16:43:12 -0500 Subject: [PATCH 22/23] use https for api endpoints --- Dockerfile | 4 ++-- Dockerfile.aarch64 | 4 ++-- Dockerfile.armhf | 4 ++-- Jenkinsfile | 2 +- jenkins-vars.yml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index ac01c11..b57ac1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,12 +20,12 @@ RUN \ echo "**** install sonarr ****" && \ mkdir -p /opt/NzbDrone && \ if [ -z ${SONARR_VERSION+x} ]; then \ - SONARR_VERSION=$(curl -sX GET http://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ + SONARR_VERSION=$(curl -sX GET https://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ | jq -r '.version'); \ fi && \ curl -o \ /tmp/sonarr.tar.gz -L \ - "http://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ + "https://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ tar xf \ /tmp/sonarr.tar.gz -C \ /opt/NzbDrone --strip-components=1 && \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 358971b..9a07b2d 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -23,12 +23,12 @@ RUN \ echo "**** install sonarr ****" && \ mkdir -p /opt/NzbDrone && \ if [ -z ${SONARR_VERSION+x} ]; then \ - SONARR_VERSION=$(curl -sX GET http://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ + SONARR_VERSION=$(curl -sX GET https://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ | jq -r '.version'); \ fi && \ curl -o \ /tmp/sonarr.tar.gz -L \ - "http://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ + "https://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ tar xf \ /tmp/sonarr.tar.gz -C \ /opt/NzbDrone --strip-components=1 && \ diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 11988b2..bdcba3f 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -23,12 +23,12 @@ RUN \ echo "**** install sonarr ****" && \ mkdir -p /opt/NzbDrone && \ if [ -z ${SONARR_VERSION+x} ]; then \ - SONARR_VERSION=$(curl -sX GET http://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ + SONARR_VERSION=$(curl -sX GET https://services.sonarr.tv/v1/download/${SONARR_BRANCH} \ | jq -r '.version'); \ fi && \ curl -o \ /tmp/sonarr.tar.gz -L \ - "http://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ + "https://download.sonarr.tv/v2/${SONARR_BRANCH}/mono/NzbDrone.${SONARR_BRANCH}.${SONARR_VERSION}.mono.tar.gz" && \ tar xf \ /tmp/sonarr.tar.gz -C \ /opt/NzbDrone --strip-components=1 && \ diff --git a/Jenkinsfile b/Jenkinsfile index 056cbf3..7431b54 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -96,7 +96,7 @@ pipeline { steps{ script{ env.EXT_RELEASE = sh( - script: ''' curl -sX GET http://services.sonarr.tv/v1/download/develop | jq -r '.version' ''', + script: ''' curl -sX GET https://services.sonarr.tv/v1/download/develop | jq -r '.version' ''', returnStdout: true).trim() env.RELEASE_LINK = 'custom_command' } diff --git a/jenkins-vars.yml b/jenkins-vars.yml index db9fb79..f5ae3be 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -3,7 +3,7 @@ # jenkins variables project_name: docker-sonarr external_type: na -custom_version_command: "curl -sX GET http://services.sonarr.tv/v1/download/develop | jq -r '.version'" +custom_version_command: "curl -sX GET https://services.sonarr.tv/v1/download/develop | jq -r '.version'" release_type: prerelease release_tag: develop ls_branch: develop From 5d2f12f3d6ffd9b1afee1ea920d8e933f2f79b0c Mon Sep 17 00:00:00 2001 From: aptalca Date: Fri, 1 Feb 2019 19:41:40 +0000 Subject: [PATCH 23/23] update readme, add tag info --- README.md | 15 ++++++++++----- readme-vars.yml | 17 ++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 916d3c1..c5c0af7 100644 --- a/README.md +++ b/README.md @@ -64,12 +64,15 @@ docker create \ linuxserver/sonarr ``` -You can choose between ,using tags, various branch versions of sonarr, no tag is required to remain on the main branch. +### Version Tags -Add one of the tags, if required, to the linuxserver/sonarr line of the run/create command in the following format, linuxserver/sonarr:develop -#### Tags +This image provides various versions that are available via tags. `latest` tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them. -+ **develop** +| Tag | Description | +| :----: | --- | +| latest | stable builds from the master branch of sonarr (currently v2) | +| develop | development builds from the develop branch of sonarr (currently v2) | +| preview | preview builds from the phantom-develop branch of sonarr (currently v3) | ### docker-compose @@ -129,6 +132,8 @@ In this instance `PUID=1001` and `PGID=1001`, to find yours use `id user` as bel Access the webui at `:8989`, for more information check out [Sonarr](https://sonarr.tv/). + + ## Support Info * Shell access whilst the container is running: `docker exec -it sonarr /bin/bash` @@ -140,7 +145,7 @@ Access the webui at `:8989`, for more information check out [Sonarr](ht ## Versions -* **08.09.18:** - Adding Multi arch images and pipeline build logic +* **01.02.19:** - Multi arch images and pipeline build logic * **15.12.17:** - Fix continuation lines. * **12.07.17:** - Add inspect commands to README, move to jenkins build and push. * **17.04.17:** - Switch to using inhouse mono baseimage, adds python also. diff --git a/readme-vars.yml b/readme-vars.yml index a06ee21..c3b5b2b 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -18,12 +18,15 @@ available_architectures: optional_block_1: true optional_block_1_items: - | - You can choose between ,using tags, various branch versions of sonarr, no tag is required to remain on the main branch. - - Add one of the tags, if required, to the linuxserver/sonarr line of the run/create command in the following format, linuxserver/sonarr:develop - #### Tags - - + **develop** + ### Version Tags + + This image provides various versions that are available via tags. `latest` tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them. + + | Tag | Description | + | :----: | --- | + | latest | stable builds from the master branch of sonarr (currently v2) | + | develop | development builds from the develop branch of sonarr (currently v2) | + | preview | preview builds from the phantom-develop branch of sonarr (currently v3) | # container parameters param_container_name: "{{ project_name }}" @@ -47,7 +50,7 @@ app_setup_block: | # changelog changelogs: - - { date: "08.09.18:", desc: "Adding Multi arch images and pipeline build logic" } + - { date: "01.02.19:", desc: "Multi arch images and pipeline build logic" } - { date: "15.12.17:", desc: "Fix continuation lines." } - { date: "12.07.17:", desc: "Add inspect commands to README, move to jenkins build and push." } - { date: "17.04.17:", desc: "Switch to using inhouse mono baseimage, adds python also." }