diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..40bb3d16c --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,109 @@ +version: 2.1 +commands: + calculate-tag-name: + description: "Calculates the target tag name for Docker image" + parameters: + distro: + type: string + steps: + - run: + name: Calculate tag to set for the built Docker image + command: | + if [ "$CIRCLE_BRANCH" = "master" ]; then TAG_VERSION=latest; else TAG_VERSION=$CIRCLE_BRANCH; fi + if [ "<< parameters.distro >>" = "ubuntu" ]; then TAG_DISTRO=""; else TAG_DISTRO=-<< parameters.distro >>; fi + echo "export IMAGE_TAG=$TAG_VERSION$TAG_DISTRO" >> $BASH_ENV + +jobs: + build-ubuntu-image: + environment: + IMAGE_NAME: haugene/transmission-openvpn + docker: + - image: circleci/buildpack-deps:stretch + steps: + - checkout + - setup_remote_docker + - calculate-tag-name: + distro: ubuntu + - run: + name: Build Docker image + command: docker build -t $IMAGE_NAME:$IMAGE_TAG . + - run: + name: Login to Docker Hub + command: echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin + - run: + name: Push image + command: docker push $IMAGE_NAME:$IMAGE_TAG + + build-armhf-image: + environment: + IMAGE_NAME: haugene/transmission-openvpn + docker: + - image: circleci/buildpack-deps:stretch + steps: + - checkout + - setup_remote_docker + - calculate-tag-name: + distro: armhf + - run: + name: Build Docker image + command: | + echo "Un-commenting cross-build instructions in Dockerfile.armhf" + sed -i 's/^#\(.*cross-build.*\)/\1/' Dockerfile.armhf + docker build -t $IMAGE_NAME:$IMAGE_TAG -f Dockerfile.armhf . + - run: + name: Login to Docker Hub + command: echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin + - run: + name: Push image + command: docker push $IMAGE_NAME:$IMAGE_TAG + + build-arm64-image: + environment: + IMAGE_NAME: haugene/transmission-openvpn + docker: + - image: circleci/buildpack-deps:stretch + steps: + - checkout + - setup_remote_docker + - calculate-tag-name: + distro: arm64 + - run: + name: Build Docker image + command: | + echo "Un-commenting cross-build instructions in Dockerfile.armhf" + sed -i 's/^#\(.*cross-build.*\)/\1/' Dockerfile.armhf + docker build \ + -t $IMAGE_NAME:$IMAGE_TAG \ + -f Dockerfile.armhf \ + --build-arg base_image=balenalib/raspberrypi3-64:stretch . + - run: + name: Login to Docker Hub + command: echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin + - run: + name: Push image + command: docker push $IMAGE_NAME:$IMAGE_TAG + +workflows: + version: 2 + build-images: + jobs: + - build-ubuntu-image: + context: dockerhub + filters: + branches: + only: + - beta + - build-armhf-image: + context: dockerhub + filters: + branches: + only: + - master + - dev + - build-arm64-image: + context: dockerhub + filters: + branches: + only: + - master + - dev diff --git a/Dockerfile b/Dockerfile index c7f7ebdef..559032c98 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ FROM ubuntu:16.04 -MAINTAINER Kristian Haugene VOLUME /data VOLUME /config diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 153046b89..f1d009f29 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -1,5 +1,4 @@ FROM alpine:3.8 -# MAINTAINER Kristian Haugene VOLUME /data VOLUME /config diff --git a/Dockerfile.armhf b/Dockerfile.armhf index adcb40385..0f9558891 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -1,11 +1,15 @@ -FROM balenalib/raspberry-pi:stretch -MAINTAINER Kristian Haugene +ARG base_image=balenalib/raspberry-pi:stretch +FROM $base_image + +# For building on x86 machines. CircleCI un-comments before building +#RUN [ "cross-build-start" ] VOLUME /data VOLUME /config # Update packages and install software RUN apt-get update \ + && apt-get -y install apt-utils \ && apt-get -y install transmission-cli transmission-common transmission-daemon \ && apt-get install -y dumb-init unzip openvpn curl ufw git tinyproxy jq \ && curl -L -o /tmp/release.zip https://github.com/Secretmapper/combustion/archive/release.zip \ @@ -126,3 +130,6 @@ ENV OPENVPN_USERNAME=**None** \ # Expose port and run EXPOSE 9091 CMD ["dumb-init", "/etc/openvpn/start.sh"] + +# For building on x86 machines. CircleCI un-comments before building +#RUN [ "cross-build-end" ] \ No newline at end of file diff --git a/DockerfileCrossBuild.armhf b/DockerfileCrossBuild.armhf deleted file mode 100644 index a721f3628..000000000 --- a/DockerfileCrossBuild.armhf +++ /dev/null @@ -1,130 +0,0 @@ -# This Dockerfile is for building ARM images on x64 machine like Docker Hub - -FROM balenalib/raspberry-pi:stretch -MAINTAINER Kristian Haugene - -RUN [ "cross-build-start" ] - -VOLUME /data -VOLUME /config - -# Update packages and install software -RUN apt-get update \ - && apt-get -y install transmission-cli transmission-common transmission-daemon \ - && apt-get install -y dumb-init unzip openvpn curl ufw git tinyproxy jq \ - && curl -L -o /tmp/release.zip https://github.com/Secretmapper/combustion/archive/release.zip \ - && unzip /tmp/release.zip -d /opt/transmission-ui/ \ - && rm /tmp/release.zip \ - && git clone git://github.com/endor/kettu.git /opt/transmission-ui/kettu \ - && mkdir /opt/transmission-ui/transmission-web-control \ - && curl -sL `curl -s https://api.github.com/repos/ronggang/transmission-web-control/releases/latest | jq --raw-output '.tarball_url'` | tar -C /opt/transmission-ui/transmission-web-control/ --strip-components=2 -xz \ - && apt-get purge git unzip \ - && apt-get autoremove --purge \ - && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ - && curl -L https://github.com/jwilder/dockerize/releases/download/v0.6.0/dockerize-linux-armhf-v0.6.0.tar.gz \ - | tar -C /usr/local/bin -xzv \ - && groupmod -g 1000 users \ - && useradd -u 911 -U -d /config -s /bin/false abc \ - && usermod -G users abc - -# Add configuration and scripts -ADD openvpn/ /etc/openvpn/ -ADD transmission/ /etc/transmission/ -ADD tinyproxy /opt/tinyproxy/ - -ENV OPENVPN_USERNAME=**None** \ - OPENVPN_PASSWORD=**None** \ - OPENVPN_PROVIDER=**None** \ - GLOBAL_APPLY_PERMISSIONS=true \ - TRANSMISSION_ALT_SPEED_DOWN=50 \ - TRANSMISSION_ALT_SPEED_ENABLED=false \ - TRANSMISSION_ALT_SPEED_TIME_BEGIN=540 \ - TRANSMISSION_ALT_SPEED_TIME_DAY=127 \ - TRANSMISSION_ALT_SPEED_TIME_ENABLED=false \ - TRANSMISSION_ALT_SPEED_TIME_END=1020 \ - TRANSMISSION_ALT_SPEED_UP=50 \ - TRANSMISSION_BIND_ADDRESS_IPV4=0.0.0.0 \ - TRANSMISSION_BIND_ADDRESS_IPV6=:: \ - TRANSMISSION_BLOCKLIST_ENABLED=false \ - TRANSMISSION_BLOCKLIST_URL=http://www.example.com/blocklist \ - TRANSMISSION_CACHE_SIZE_MB=4 \ - TRANSMISSION_DHT_ENABLED=true \ - TRANSMISSION_DOWNLOAD_DIR=/data/completed \ - TRANSMISSION_DOWNLOAD_LIMIT=100 \ - TRANSMISSION_DOWNLOAD_LIMIT_ENABLED=0 \ - TRANSMISSION_DOWNLOAD_QUEUE_ENABLED=true \ - TRANSMISSION_DOWNLOAD_QUEUE_SIZE=5 \ - TRANSMISSION_ENCRYPTION=1 \ - TRANSMISSION_IDLE_SEEDING_LIMIT=30 \ - TRANSMISSION_IDLE_SEEDING_LIMIT_ENABLED=false \ - TRANSMISSION_INCOMPLETE_DIR=/data/incomplete \ - TRANSMISSION_INCOMPLETE_DIR_ENABLED=true \ - TRANSMISSION_LPD_ENABLED=false \ - TRANSMISSION_MAX_PEERS_GLOBAL=200 \ - TRANSMISSION_MESSAGE_LEVEL=2 \ - TRANSMISSION_PEER_CONGESTION_ALGORITHM= \ - TRANSMISSION_PEER_ID_TTL_HOURS=6 \ - TRANSMISSION_PEER_LIMIT_GLOBAL=200 \ - TRANSMISSION_PEER_LIMIT_PER_TORRENT=50 \ - TRANSMISSION_PEER_PORT=51413 \ - TRANSMISSION_PEER_PORT_RANDOM_HIGH=65535 \ - TRANSMISSION_PEER_PORT_RANDOM_LOW=49152 \ - TRANSMISSION_PEER_PORT_RANDOM_ON_START=false \ - TRANSMISSION_PEER_SOCKET_TOS=default \ - TRANSMISSION_PEX_ENABLED=true \ - TRANSMISSION_PORT_FORWARDING_ENABLED=false \ - TRANSMISSION_PREALLOCATION=1 \ - TRANSMISSION_PREFETCH_ENABLED=1 \ - TRANSMISSION_QUEUE_STALLED_ENABLED=true \ - TRANSMISSION_QUEUE_STALLED_MINUTES=30 \ - TRANSMISSION_RATIO_LIMIT=2 \ - TRANSMISSION_RATIO_LIMIT_ENABLED=false \ - TRANSMISSION_RENAME_PARTIAL_FILES=true \ - TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=false \ - TRANSMISSION_RPC_BIND_ADDRESS=0.0.0.0 \ - TRANSMISSION_RPC_ENABLED=true \ - TRANSMISSION_RPC_HOST_WHITELIST= \ - TRANSMISSION_RPC_HOST_WHITELIST_ENABLED=false \ - TRANSMISSION_RPC_PASSWORD=password \ - TRANSMISSION_RPC_PORT=9091 \ - TRANSMISSION_RPC_URL=/transmission/ \ - TRANSMISSION_RPC_USERNAME=username \ - TRANSMISSION_RPC_WHITELIST=127.0.0.1 \ - TRANSMISSION_RPC_WHITELIST_ENABLED=false \ - TRANSMISSION_SCRAPE_PAUSED_TORRENTS_ENABLED=true \ - TRANSMISSION_SCRIPT_TORRENT_DONE_ENABLED=false \ - TRANSMISSION_SCRIPT_TORRENT_DONE_FILENAME= \ - TRANSMISSION_SEED_QUEUE_ENABLED=false \ - TRANSMISSION_SEED_QUEUE_SIZE=10 \ - TRANSMISSION_SPEED_LIMIT_DOWN=100 \ - TRANSMISSION_SPEED_LIMIT_DOWN_ENABLED=false \ - TRANSMISSION_SPEED_LIMIT_UP=100 \ - TRANSMISSION_SPEED_LIMIT_UP_ENABLED=false \ - TRANSMISSION_START_ADDED_TORRENTS=true \ - TRANSMISSION_TRASH_ORIGINAL_TORRENT_FILES=false \ - TRANSMISSION_UMASK=2 \ - TRANSMISSION_UPLOAD_LIMIT=100 \ - TRANSMISSION_UPLOAD_LIMIT_ENABLED=0 \ - TRANSMISSION_UPLOAD_SLOTS_PER_TORRENT=14 \ - TRANSMISSION_UTP_ENABLED=true \ - TRANSMISSION_WATCH_DIR=/data/watch \ - TRANSMISSION_WATCH_DIR_ENABLED=true \ - TRANSMISSION_HOME=/data/transmission-home \ - TRANSMISSION_WATCH_DIR_FORCE_GENERIC=false \ - ENABLE_UFW=false \ - UFW_ALLOW_GW_NET=false \ - UFW_EXTRA_PORTS= \ - UFW_DISABLE_IPTABLES_REJECT=false \ - TRANSMISSION_WEB_UI=\ - PUID=\ - PGID=\ - TRANSMISSION_WEB_HOME= \ - DROP_DEFAULT_ROUTE= \ - WEBPROXY_ENABLED=false \ - WEBPROXY_PORT=8888 - -# Expose port and run -EXPOSE 9091 -CMD ["dumb-init", "/etc/openvpn/start.sh"] - -RUN [ "cross-build-end" ]