diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5479770 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +chart +dev +examples +node_modules diff --git a/.travis.yml b/.travis.yml index 3ee8da5..1b64f30 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,30 @@ -# if: tag IS present -language: node_js -node_js: -- "12" +dist: bionic sudo: required -services: -- docker -install: true + +before_install: + - curl -fsSL https://get.docker.com | sh + - echo '{"experimental":"enabled"}' | sudo tee /etc/docker/daemon.json + - mkdir -p $HOME/.docker + - echo '{"experimental":"enabled"}' | sudo tee $HOME/.docker/config.json + - sudo service docker start + - docker info +install: + - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - docker buildx create --name xbuilder --use + - docker buildx inspect --bootstrap + script: true deploy: -- provider: script - script: bash .travis/docker-release.sh - skip_cleanup: true - on: - repo: democratic-csi/democratic-csi - all_branches: true - condition: $TRAVIS_BRANCH =~ ^master|next$ -- provider: script - script: bash .travis/docker-release.sh - skip_cleanup: true - on: - repo: democratic-csi/democratic-csi - tags: true + - provider: script + script: bash .travis/docker-release.sh + skip_cleanup: true + on: + repo: democratic-csi/democratic-csi + all_branches: true + condition: $TRAVIS_BRANCH =~ ^master|next$ + - provider: script + script: bash .travis/docker-release.sh + skip_cleanup: true + on: + repo: democratic-csi/democratic-csi + tags: true diff --git a/.travis/docker-release.sh b/.travis/docker-release.sh index 1c36991..15ec6bf 100755 --- a/.travis/docker-release.sh +++ b/.travis/docker-release.sh @@ -6,17 +6,17 @@ export DOCKER_ORG="democraticcsi" export DOCKER_PROJECT="democratic-csi" export DOCKER_REPO="${DOCKER_ORG}/${DOCKER_PROJECT}" -if [[ -n "${TRAVIS_TAG}" ]];then - docker build --pull -t ${DOCKER_REPO}:${TRAVIS_TAG} . - docker push ${DOCKER_REPO}:${TRAVIS_TAG} -elif [[ -n "${TRAVIS_BRANCH}" ]];then - if [[ "${TRAVIS_BRANCH}" == "master" ]];then - docker build --pull -t ${DOCKER_REPO}:latest . - docker push ${DOCKER_REPO}:latest - else - docker build --pull -t ${DOCKER_REPO}:${TRAVIS_BRANCH} . - docker push ${DOCKER_REPO}:${TRAVIS_BRANCH} - fi +if [[ -n "${TRAVIS_TAG}" ]]; then + docker buildx build --progress plain --pull --push --platform linux/amd64,linux/arm/v7,linux/arm64 -t ${DOCKER_REPO}:${TRAVIS_TAG} . + docker push ${DOCKER_REPO}:${TRAVIS_TAG} +elif [[ -n "${TRAVIS_BRANCH}" ]]; then + if [[ "${TRAVIS_BRANCH}" == "master" ]]; then + docker buildx build --progress plain --pull --push --platform linux/amd64,linux/arm/v7,linux/arm64 -t ${DOCKER_REPO}:latest . + docker push ${DOCKER_REPO}:latest + else + docker buildx build --progress plain --pull --push --platform linux/amd64,linux/arm/v7,linux/arm64 -t ${DOCKER_REPO}:${TRAVIS_BRANCH} . + docker push ${DOCKER_REPO}:${TRAVIS_BRANCH} + fi else - : + : fi diff --git a/Dockerfile b/Dockerfile index 8e12803..48b651f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,20 @@ FROM debian:10-slim +ARG TARGETPLATFORM +ARG BUILDPLATFORM + RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \ && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 -ENV LANG en_US.utf8 +ENV LANG=en_US.utf8 NODE_VERSION=v12.15.0 + +RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM" # install node -ENV NODE_VERSION=v12.13.1 -ENV NODE_DISTRO=linux-x64 - -RUN apt-get update && \ - apt-get install -y wget xz-utils && \ - wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz > /dev/null 2>&1 && \ - mkdir -p /usr/local/lib/nodejs && \ - tar -xJf node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz -C /usr/local/lib/nodejs && \ - rm node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz && \ - rm -rf /var/lib/apt/lists/* - -ENV PATH=/usr/local/lib/nodejs/node-${NODE_VERSION}-${NODE_DISTRO}/bin:$PATH +RUN apt-get update && apt-get install -y wget xz-utils +ADD docker/node-installer.sh /usr/local/sbin +RUN chmod +x /usr/local/sbin/node-installer.sh && node-installer.sh +ENV PATH=/usr/local/lib/nodejs/bin:$PATH # node service requirements RUN apt-get update && \ diff --git a/docker/node-installer.sh b/docker/node-installer.sh new file mode 100644 index 0000000..f7e34dd --- /dev/null +++ b/docker/node-installer.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e +set -x + +PLATFORM_TYPE=${1} + +if [[ "${PLATFORM_TYPE}" == "build" ]]; then + PLATFORM=$BUILDPLATFORM +else + PLATFORM=$TARGETPLATFORM +fi + +if [[ "x${PLATFORM}" == "x" ]]; then + PLATFORM="linux/amd64" +fi + +if [ "$PLATFORM" = "linux/amd64" ]; then + export NODE_DISTRO="linux-x64" +elif [ "$PLATFORM" = "linux/arm64" ]; then + export NODE_DISTRO="linux-arm64" +elif [ "$PLATFORM" = "linux/arm/v7" ]; then + export NODE_DISTRO="linux-armv7l" +else + echo "unsupported/unknown PLATFORM ${PLATFORM}" + exit 1 +fi + +echo "I am installing node $NODE_VERSION $NODE_DISTRO" + +wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz >/dev/null 2>&1 +mkdir -p /usr/local/lib/nodejs +tar -xJf node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz -C /usr/local/lib/nodejs --strip-components=1 +rm node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz +rm -rf /var/lib/apt/lists/* diff --git a/docker/npm-install-wrapper.sh b/docker/npm-install-wrapper.sh new file mode 100644 index 0000000..4279e48 --- /dev/null +++ b/docker/npm-install-wrapper.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e +set -x + +PLATFORM=$TARGETPLATFORM + +if [[ "x${PLATFORM}" == "x" ]]; then + PLATFORM="linux/amd64" +fi + +if [ "$PLATFORM" = "linux/amd64" ]; then + export NODE_ARCH="x64" +elif [ "$PLATFORM" = "linux/arm64" ]; then + export NODE_ARCH="arm64" +elif [ "$PLATFORM" = "linux/arm/v7" ]; then + export NODE_ARCH="armv7l" +else + echo "unsupported/unknown PLATFORM ${PLATFORM}" + exit 1 +fi + +npm install --target_arch="${NODE_ARCH}"