diff --git a/.dockerignore b/.dockerignore index 91b94d5df..e47d1e08d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,2 @@ .git -node_modules examples diff --git a/Dockerfile b/Dockerfile index e4668c195..d1713f84d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM node:alpine MAINTAINER silverwind # Copy files +COPY ["node_modules", "/droppy/node_modules"] COPY ["client", "/droppy/client"] COPY ["server", "/droppy/server"] COPY ["dist", "/droppy/dist"] @@ -9,7 +10,6 @@ COPY ["droppy.js", "docker-start.sh", "README.md", "LICENSE", "package.json", "/ # Install build dependencies and and build modules RUN cd /droppy && \ - npm install --production --no-package-lock --no-audit --no-bin-links --ignore-scripts && \ find /droppy -type d -exec chmod 0755 {} + && \ find /droppy -type f -exec chmod 0644 {} + && \ chmod 0755 /droppy/docker-start.sh && \ @@ -19,13 +19,6 @@ RUN cd /droppy && \ ln -s /files /root/.droppy/files && \ ln -s /droppy/droppy.js /usr/bin/droppy && \ rm -rf \ - /droppy/node_modules/babel-polyfill \ - /droppy/node_modules/babel-runtime \ - /droppy/node_modules/core-js \ - /droppy/node_modules/moment/min \ - /droppy/node_modules/plyr/dist/*.map \ - /droppy/node_modules/plyr/src \ - /droppy/node_modules/raven-js \ /root/.config \ /root/.node-gyp \ /root/.npm \ diff --git a/Makefile b/Makefile index 1b4e9967f..74dea9bfd 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,9 @@ JQUERY_FLAGS:=-ajax,-css,-deprecated,-effects,-event/alias,-event/focusin,-event dev: node droppy.js start --dev +run: + node droppy.js start + lint: yarn -s run eslint server client/client.js droppy.js yarn -s run stylelint client/*.css @@ -21,42 +24,19 @@ publish: npm publish docker: + @rm -rf node_modules + yarn -s --production --pure-lockfile $(eval IMAGE := silverwind/droppy) - @echo Preparing docker image $(IMAGE)... - docker pull node:alpine - sed -i "s/^FROM.\+/FROM node:alpine/g" Dockerfile - docker rm -f "$$(docker ps -a -f='ancestor=$(IMAGE)' -q)" 2>/dev/null || true - docker rmi "$$(docker images -qa $(IMAGE))" 2>/dev/null || true - docker build --no-cache=true --squash -t $(IMAGE) . - docker tag "$$(docker images -qa $(IMAGE):latest)" $(IMAGE):"$$(cat package.json | jq -r .version)" - - $(eval IMAGE := silverwind/armhf-droppy) - @echo Preparing docker image $(IMAGE)... - docker pull arm32v6/node:alpine - sed -i "s/^FROM.\+/FROM arm32v6\/node:alpine/g" Dockerfile - docker rm -f "$$(docker ps -a -f='ancestor=$(IMAGE)' -q)" 2>/dev/null || true - docker rmi "$$(docker images -qa $(IMAGE))" 2>/dev/null || true - docker build --no-cache=true --squash -t $(IMAGE) . - docker tag "$$(docker images -qa $(IMAGE):latest)" $(IMAGE):"$$(cat package.json | jq -r .version)" - - $(eval IMAGE := silverwind/arm64v8-droppy) - @echo Preparing docker image $(IMAGE)... - docker pull arm64v8/node:alpine - sed -i "s/^FROM.\+/FROM arm64v8\/node:alpine/g" Dockerfile - docker rm -f "$$(docker ps -a -f='ancestor=$(IMAGE)' -q)" 2>/dev/null || true - docker rmi "$$(docker images -qa $(IMAGE))" 2>/dev/null || true - docker build --no-cache=true --squash -t $(IMAGE) . - docker tag "$$(docker images -qa $(IMAGE):latest)" $(IMAGE):"$$(cat package.json | jq -r .version)" - - sed -i "s/^FROM.\+/FROM node:alpine/g" Dockerfile - -docker-push: - docker push silverwind/droppy:"$$(cat package.json | jq -r .version)" - docker push silverwind/droppy:latest - docker push silverwind/armhf-droppy:"$$(cat package.json | jq -r .version)" - docker push silverwind/armhf-droppy:latest - docker push silverwind/arm64v8-droppy:"$$(cat package.json | jq -r .version)" - docker push silverwind/arm64v8-droppy:latest + $(eval VERSION := $(shell cat package.json | jq -r .version)) + $(eval ARCHS := "linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6") + @docker rm -f "$$(docker ps -a -f='ancestor=$(IMAGE)' -q)" 2>/dev/null || true + @docker rmi "$$(docker images -qa $(IMAGE))" 2>/dev/null || true + @docker buildx rm builder &>/dev/null || true + @docker buildx create --name builder &>/dev/null || true + docker buildx build --pull --push --platform $(ARCHS) -t $(IMAGE):$(VERSION) . + docker buildx build --pull --push --platform $(ARCHS) -t $(IMAGE):latest . + @docker buildx rm builder &>/dev/null || true + yarn deps: rm -rf node_modules @@ -64,7 +44,7 @@ deps: update: yarn -s run updates -u - $(MAKE) deps + @$(MAKE) --no-print-directory deps @touch client/client.js jquery: @@ -83,8 +63,8 @@ ver-minor: ver-major: yarn -s run versions -C major -patch: test build ver-patch docker docker-push publish -minor: test build ver-minor docker docker-push publish -major: test build ver-major docker docker-push publish +patch: test build ver-patch docker publish +minor: test build ver-minor docker publish +major: test build ver-major docker publish -.PHONY: dev lint test publish docker docker-arm deps update jquery version-patch version-minor version-major patch minor major +.PHONY: dev run lint test publish docker deps update jquery version-patch version-minor version-major patch minor major diff --git a/README.md b/README.md index e0e6a8593..331bcd062 100644 --- a/README.md +++ b/README.md @@ -52,13 +52,7 @@ To make droppy run in the background, you can use the `--daemon` option, thought ### Docker installation :whale: -The following images are available: - -- [`silverwind/droppy`](https://hub.docker.com/r/silverwind/droppy/) for x86-64 -- [`silverwind/armhf-droppy`](https://hub.docker.com/r/silverwind/armhf-droppy/) for ARMv6 and ARMv7 -- [`silverwind/arm64v8-droppy`](https://hub.docker.com/r/silverwind/arm64v8-droppy/) for ARMv8 - -To pull and run, use: +The [`silverwind/droppy`](https://hub.docker.com/r/silverwind/droppy/) multi-arch images supports `amd64`, `arm64`, `arm/v7` and `arm/v6` architectures. To pull and run, use: ```sh $ docker run --name droppy -p 127.0.0.1:8989:8989 silverwind/droppy