diff --git a/.dockerignore b/.dockerignore index 29683e292..bb2ce5fce 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,7 +9,6 @@ tests !build/dokku.deb !tests/dhparam.pem !contrib/dokku-installer.py -!contrib/dokku-update !contrib/bash-completion !contrib/docker vendor diff --git a/.gitignore b/.gitignore index 9323ab8a3..f7be175a6 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,3 @@ test-results/ stack.tgz tmp coverage.out -contrib/dokku-update-version diff --git a/contrib/build-dokku-update.Dockerfile b/contrib/build-dokku-update.Dockerfile deleted file mode 100644 index b496efbcf..000000000 --- a/contrib/build-dokku-update.Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM dokku/build-base:0.0.1 - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get update -qq && apt-get -qq -y --no-install-recommends install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db -RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc - -ARG WORKDIR=/go/src/github.com/dokku/dokku - -WORKDIR ${WORKDIR} - -COPY . ${WORKDIR} - -RUN make deb-dokku-update rpm-dokku-update - -RUN ls -lha /tmp/ diff --git a/contrib/dokku-update b/contrib/dokku-update deleted file mode 100755 index 44dfbe5d0..000000000 --- a/contrib/dokku-update +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail -shopt -s nullglob - -if [[ -r /etc/default/dokku ]]; then - # shellcheck disable=SC1091 - source /etc/default/dokku -fi - -export DOKKU_ROOT=${DOKKU_ROOT:=~dokku} -if [[ -f "$DOKKU_ROOT/dokkurc" ]]; then - if [[ -r $DOKKU_ROOT/dokkurc ]]; then - source "$DOKKU_ROOT/dokkurc" - else - echo "Unable to read $DOKKU_ROOT/dokkurc for sourcing" 1>&2 - exit 1 - fi -fi -if [[ -d $DOKKU_ROOT/.dokkurc ]]; then - for f in $DOKKU_ROOT/.dokkurc/*; do - if [[ -r "$f" ]]; then - source "$f" - else - echo "Unable to read $f for sourcing" 1>&2 - exit 1 - fi - done -fi -[[ $DOKKU_TRACE ]] && set -x - -export DOKKU_LIB_ROOT=${DOKKU_LIB_PATH:="/var/lib/dokku"} -export PLUGIN_PATH=${PLUGIN_PATH:="$DOKKU_LIB_ROOT/plugins"} -export PLUGIN_ENABLED_PATH=${PLUGIN_ENABLED_PATH:="$PLUGIN_PATH/enabled"} -export DEBIAN_FRONTEND=noninteractive - -dokku-log-info() { - declare desc="log info formatter" - echo "-----> $*" -} - -dokku-log-verbose() { - declare desc="log verbose formatter" - echo " $*" -} - -dokku-log-warn() { - declare desc="log warning formatter" - echo " ! $*" 1>&2 -} - -dokku-update-plugin() { - declare PLUGIN_NAME="$1" - if [[ -d "$PLUGIN_ENABLED_PATH/$PLUGIN_NAME/.git" ]]; then - dokku-log-verbose "Updating $PLUGIN_NAME" - dokku plugin:update "$PLUGIN_NAME" - fi -} - -main() { - declare COMMAND="$1" - local DOKKU_DISTRO PLUGIN_NAME VERSION - - if [[ -f "/etc/os-release" ]]; then - # shellcheck disable=SC1091 - DOKKU_DISTRO=$(. /etc/os-release && echo "$ID") - fi - - if [[ "$COMMAND" == "version" ]] || [[ "$COMMAND" == "-v" ]]; then - VERSION=UNRELEASED - if [[ -f "/var/lib/dokku-update/VERSION" ]]; then - VERSION="$(cat /var/lib/dokku-update/VERSION)" - fi - echo "dokku-update ${VERSION}" - exit 0 - fi - - dokku-log-info "Running system updates" - case "$DOKKU_DISTRO" in - arch) - yay -Syyua - ;; - debian | ubuntu) - apt-get update -qq >/dev/null - apt-get -qq -y dist-upgrade - ;; - centos | opensuse | rhel) - dokku-log-warn "Updating this operating system is not supported" - ;; - *) - dokku-log-warn "Updating this operating system is not supported" - exit 1 - ;; - esac - - # update all plugins - dokku-log-info "Updating all plugins" - for PLUGIN_NAME in $(dokku plugin:list | grep enabled | awk '$1=$1' | cut -d' ' -f1); do - dokku-update-plugin "$PLUGIN_NAME" - done - dokku plugin:install - - # rebuild all applications - dokku-log-info "Rebuilding all applications" - dokku ps:rebuild --all - - dokku-log-info "Waiting for old containers to stop" - sleep 120 - dokku-log-info "Cleaning up" - dokku cleanup --global -} - -main "$@" diff --git a/contrib/release-dokku-update b/contrib/release-dokku-update deleted file mode 100755 index 72471a0a4..000000000 --- a/contrib/release-dokku-update +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail -[[ $TRACE ]] && set -x - -readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)" -readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXXXX")" -readonly DOKKU_GIT_REV="$(git rev-parse HEAD)" - -trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT - -log-info() { - # shellcheck disable=SC2034 - declare desc="Log info formatter" - echo "$*" -} - -log-error() { - # shellcheck disable=SC2034 - declare desc="Log error formatter" - echo "! $*" 1>&2 -} - -log-fail() { - # shellcheck disable=SC2034 - declare desc="Log fail formatter" - log-error "$*" - exit 1 -} - -fn-build-dokku() { - declare desc="Builds dokku packages within a docker container" - - pushd "$ROOT_DIR" >/dev/null - docker build \ - -f "contrib/build-dokku-update.Dockerfile" \ - -t dokku-update:build . - return "$?" -} - -fn-extract-package() { - declare desc="Extract packages from a docker container to the root directory" - declare PACKAGE_NAME="$1" - - if [[ -z "$PACKAGE_NAME" ]]; then - log-error "Invalid deb file specified" - return 1 - fi - - log-info "(extract-package) writing ${PACKAGE_NAME} to correct path" - docker run --rm --entrypoint cat dokku-update:build "/tmp/${PACKAGE_NAME}" >"${ROOT_DIR}/build/${PACKAGE_NAME}" - return "$?" -} - -fn-publish-package() { - declare desc="Publishes a package to packagecloud" - declare IS_RELEASE="$1" RELEASE_TYPE="$2" PACKAGE_NAME="$3" - local REPOSITORY=dokku/dokku-betafish DIST=ubuntu - local OS_ID ex EXIT_CODE=0 - - [[ "$IS_RELEASE" == "true" ]] && REPOSITORY=dokku/dokku - [[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7 - - if [[ "$DIST" == "ubuntu" ]]; then - OS_IDS=("xenial" "bionic" "focal") - for OS_ID in "${OS_IDS[@]}"; do - log-info "(release-dokku-update) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}" - package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME" - ex="$?" - if [[ "$ex" -ne "0" ]]; then - EXIT_CODE="$ex" - fi - done - - DIST=debian - OS_IDS=("stretch" "buster") - for OS_ID in "${OS_IDS[@]}"; do - log-info "(release-dokku-update) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}" - package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME" - ex="$?" - if [[ "$ex" -ne "0" ]]; then - EXIT_CODE="$ex" - fi - done - else - log-info "(release-dokku-update) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}" - package_cloud push "${REPOSITORY}/${DIST}" "$PACKAGE_NAME" - EXIT_CODE="$?" - fi - return "$EXIT_CODE" -} - -fn-in-array() { - declare desc="return true if value ($1) is in list (all other arguments)" - - local e - for e in "${@:2}"; do - [[ "$e" == "$1" ]] && return 0 - done - return 1 -} - -fn-is-release() { - declare desc="Checks if a given run is a release run" - declare RELEASE="$1" - local IS_RELEASE=false - if [[ "$RELEASE" == "major" ]] || [[ "$RELEASE" == "minor" ]] || [[ "$RELEASE" == "patch" ]]; then - IS_RELEASE=true - fi - - echo "$IS_RELEASE" -} - -fn-require-bin() { - declare desc="Checks that a binary exists" - declare BINARY="$1" - if ! command -v "$BINARY" &>/dev/null; then - log-fail "Missing ${BINARY}, please install it" - fi -} - -main() { - declare RELEASE="$1" - local NEXT_VERSION - local VALID_RELEASE_LEVELS=("major" "minor" "patch" "betafish" "build") - - if [[ "$RELEASE" == '--trace' ]]; then - shift 1 - RELEASE="$1" - TRACE=1 && set -x - fi - - if [[ -z "$RELEASE" ]]; then - log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], none given" - fi - - if ! fn-in-array "$RELEASE" "${VALID_RELEASE_LEVELS[@]}"; then - log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], '${RELEASE}' given" - fi - - mkdir -p "build" - fn-require-bin "docker" - if [[ "$RELEASE" != "build" ]]; then - fn-require-bin "package_cloud" - [[ -n "$PACKAGECLOUD_TOKEN" ]] || log-fail "Missing PACKAGECLOUD_TOKEN environment variable" - fi - - NEXT_VERSION="$(grep DOKKU_UPDATE_VERSION deb.mk | head -n1 | cut -d'=' -f2 | xargs)" - IS_RELEASE="$(fn-is-release "$RELEASE")" - - fn-build-dokku || log-fail "Error building package" - fn-extract-package "dokku-update_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package" - fn-extract-package "dokku-update-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package" - - if [[ "$RELEASE" != "build" ]]; then - fn-publish-package "$IS_RELEASE" "deb" "build/dokku-update_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package" - fn-publish-package "$IS_RELEASE" "rpm" "build/dokku-update-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package" - fi -} - -main "$@" diff --git a/deb.mk b/deb.mk index e4c72efc0..039d29791 100644 --- a/deb.mk +++ b/deb.mk @@ -4,18 +4,12 @@ DOKKU_DESCRIPTION = 'Docker powered PaaS that helps you build and manage the lif DOKKU_REPO_NAME ?= dokku/dokku DOKKU_ARCHITECTURE = amd64 -DOKKU_UPDATE_DESCRIPTION = 'Binary that handles updating Dokku and related systems' -DOKKU_UPDATE_REPO_NAME ?= dokku/dokku -DOKKU_UPDATE_VERSION ?= 0.2.0 -DOKKU_UPDATE_ARCHITECTURE = amd64 -DOKKU_UPDATE_PACKAGE_NAME = dokku-update_$(DOKKU_UPDATE_VERSION)_$(DOKKU_UPDATE_ARCHITECTURE).deb - ifndef IS_RELEASE IS_RELEASE = true endif -.PHONY: install-from-deb deb-all deb-dokku deb-dokku-update deb-setup +.PHONY: install-from-deb deb-all deb-dokku deb-setup install-from-deb: @echo "--> Initial apt-get update" @@ -31,7 +25,7 @@ install-from-deb: sudo apt-get update -qq >/dev/null sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get -qq -y --no-install-recommends install dokku -deb-all: deb-setup deb-dokku deb-dokku-update +deb-all: deb-setup deb-dokku mv $(BUILD_DIRECTORY)/*.deb . @echo "Done" @@ -57,16 +51,3 @@ endif dpkg-deb --build /tmp/build-dokku "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build-dokku/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb" lintian "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build-dokku/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb" -deb-dokku-update: - rm -rf /tmp/dokku-update*.deb dokku-update*.deb - echo "${DOKKU_UPDATE_VERSION}" > contrib/dokku-update-version - sudo fpm -t deb -s dir -n dokku-update \ - --version $(DOKKU_UPDATE_VERSION) \ - --architecture $(DOKKU_UPDATE_ARCHITECTURE) \ - --package $(BUILD_DIRECTORY)/$(DOKKU_UPDATE_PACKAGE_NAME) \ - --depends 'dokku' \ - --url "https://github.com/$(DOKKU_UPDATE_REPO_NAME)" \ - --description $(DOKKU_UPDATE_DESCRIPTION) \ - --license 'MIT License' \ - contrib/dokku-update=/usr/local/bin/dokku-update \ - contrib/dokku-update-version=/var/lib/dokku-update/VERSION diff --git a/rpm.mk b/rpm.mk index 5d1c636da..0fb9bbfc6 100644 --- a/rpm.mk +++ b/rpm.mk @@ -1,10 +1,9 @@ RPM_ARCHITECTURE = x86_64 DOKKU_RPM_PACKAGE_NAME = dokku-$(DOKKU_VERSION)-1.$(RPM_ARCHITECTURE).rpm -DOKKU_UPDATE_RPM_PACKAGE_NAME = dokku-update-$(DOKKU_UPDATE_VERSION)-1.$(RPM_ARCHITECTURE).rpm .PHONY: rpm-all -rpm-all: rpm-setup rpm-dokku rpm-dokku-update +rpm-all: rpm-setup rpm-dokku mv /tmp/*.rpm . @echo "Done" @@ -54,16 +53,3 @@ endif --license 'MIT License' \ . -rpm-dokku-update: - rm -rf $(BUILD_DIRECTORY)/$(DOKKU_UPDATE_RPM_PACKAGE_NAME) - echo "${DOKKU_UPDATE_VERSION}" > contrib/dokku-update-version - sudo fpm -t rpm -s dir -n dokku-update \ - --version $(DOKKU_UPDATE_VERSION) \ - --architecture $(RPM_ARCHITECTURE) \ - --package $(BUILD_DIRECTORY)/$(DOKKU_UPDATE_RPM_PACKAGE_NAME) \ - --depends 'dokku' \ - --url "https://github.com/$(DOKKU_UPDATE_REPO_NAME)" \ - --description $(DOKKU_UPDATE_DESCRIPTION) \ - --license 'MIT License' \ - contrib/dokku-update=/usr/local/bin/dokku-update \ - contrib/dokku-update-version=/var/lib/dokku-update/VERSION