diff --git a/.github/workflows/build-and-push-docker-base-image.yaml b/.github/workflows/build-and-push-docker-base-image.yaml new file mode 100644 index 00000000..895171ea --- /dev/null +++ b/.github/workflows/build-and-push-docker-base-image.yaml @@ -0,0 +1,44 @@ +name: Build and push Docker base image + +on: + push: + paths: + - ./Dockerfile.base + branches: + - master + +env: + ALPINE_VERSION: 3.15 + +jobs: + build-and-push-docker-base-image: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/amd64,linux/arm64,linux/arm/v7 + file: Dockerfile.base + build_args: + - ALPINE_VERSION=${{ env.ALPINE_VERSION }} + push: true + tags: | + ghcr.io/plankanban/planka:base-latest + ghcr.io/plankanban/planka:base-${{ env.ALPINE_VERSION }} diff --git a/.gitignore b/.gitignore index b962ee73..f1f0dc3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules docker-compose.override.yml +.idea .vscode .DS_Store diff --git a/Dockerfile b/Dockerfile index f6e6520f..d36074a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,47 +10,19 @@ RUN npm install npm@latest --global \ COPY client . RUN npm run build -FROM node:lts-alpine +FROM ghcr.io/plankanban/planka:base-latest WORKDIR /app COPY server/.npmrc server/package.json server/package-lock.json ./ -ARG ALPINE_VERSION=3.15 -ARG VIPS_VERSION=8.12.2 - -RUN apk -U upgrade \ - && apk add \ - bash giflib glib lcms2 libexif \ - libgsf libjpeg-turbo libpng librsvg libwebp \ - orc pango tiff \ - --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/community/ \ - --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/main/ \ - --no-cache \ - && apk add \ - build-base giflib-dev glib-dev lcms2-dev libexif-dev \ - libgsf-dev libjpeg-turbo-dev libpng-dev librsvg-dev libwebp-dev \ - orc-dev pango-dev tiff-dev \ - --virtual vips-dependencies \ - --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/community/ \ - --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/main/ \ - --no-cache \ - && wget -O- https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.gz | tar xzC /tmp \ - && cd /tmp/vips-${VIPS_VERSION} \ - && ./configure \ - && make \ - && make install-strip \ - && cd $OLDPWD \ - && rm -rf /tmp/vips-${VIPS_VERSION} \ - && npm install npm@latest --global \ - && npm install --production \ - && apk del vips-dependencies --purge +RUN npm install npm@latest --global \ + && npm install --production COPY docker-start.sh start.sh COPY server . -RUN chmod +x start.sh \ - && cp .env.sample .env +RUN cp .env.sample .env COPY --from=client-builder /app/build public COPY --from=client-builder /app/build/index.html views diff --git a/Dockerfile.base b/Dockerfile.base new file mode 100644 index 00000000..1ef6b440 --- /dev/null +++ b/Dockerfile.base @@ -0,0 +1,28 @@ +FROM node:lts-alpine + +ARG ALPINE_VERSION=3.15 +ARG VIPS_VERSION=8.12.2 + +RUN apk -U upgrade \ + && apk add \ + bash giflib glib lcms2 libexif \ + libgsf libjpeg-turbo libpng librsvg libwebp \ + orc pango tiff \ + --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/community/ \ + --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/main/ \ + --no-cache \ + && apk add \ + build-base giflib-dev glib-dev lcms2-dev libexif-dev \ + libgsf-dev libjpeg-turbo-dev libpng-dev librsvg-dev libwebp-dev \ + orc-dev pango-dev tiff-dev \ + --virtual vips-dependencies \ + --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/community/ \ + --repository https://alpine.global.ssl.fastly.net/alpine/v${ALPINE_VERSION}/main/ \ + --no-cache \ + && wget -O- https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.gz | tar xzC /tmp \ + && cd /tmp/vips-${VIPS_VERSION} \ + && ./configure \ + && make \ + && make install-strip \ + && rm -rf /tmp/vips-${VIPS_VERSION} \ + && apk del vips-dependencies --purge diff --git a/package.json b/package.json index 8c1fe5d8..adbbbc5f 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,11 @@ "client:lint": "npm run lint --prefix client", "client:start": "npm start --prefix client", "client:test": "npm test --prefix client", + "docker:build": "docker build -t ghcr.io/plankanban/planka:local -f Dockerfile .", + "docker:build:base": "docker build -t ghcr.io/plankanban/planka:base-local -f Dockerfile.base .", "postinstall": "npm i --prefix server && npm i --prefix client", - "prepare": "husky install", "lint": "npm run server:lint && npm run client:lint", + "prepare": "husky install", "server:console": "npm run console --prefix server", "server:db:init": "npm run db:init --prefix server", "server:db:migrate": "npm run db:migrate --prefix server",