Compare commits

...

7 Commits

Author SHA1 Message Date
David Bomba
1a1cea632b Merge pull request #568 from turbo124/master
Refactor build steps
2024-04-04 20:05:01 +11:00
David Bomba
5609b988f3 Refactor build steps 2024-04-04 20:04:13 +11:00
David Bomba
0f9d39998f Merge pull request #561 from anojht/patch-1
Fix Docker builds for circular dependency in project
2024-01-21 21:27:02 +11:00
Anojh Thayaparan
fd01abb0a0 set workdir to fix npm install step 2024-01-20 23:55:07 -08:00
Anojh Thayaparan
6887e2b30a Revert old approach 2024-01-20 21:09:28 -08:00
Anojh Thayaparan
6faf1dc135 Rename final build stage to prod for CI/CD pipeline setup 2024-01-20 21:00:49 -08:00
Anojh Thayaparan
d7cd59c80f Fix Docker builds for circular dependency in project
Due to the circular dependency of livewire JS module from composer, without intermediate build stages the Docker build fails during the vite build stage due to missing module.

The changes here allow composer install to run then copies the vendor folder to an intermediate stage in order to complete the vite build with the livewire dependency being present.

Then the contents are copied back in another intermediate stage to the php environment to complete the build.

Signed-off-by: Anojh Thayaparan <anojh@hotmail.com>
2024-01-20 20:55:41 -08:00
2 changed files with 55 additions and 27 deletions

View File

@@ -44,7 +44,7 @@ jobs:
with: with:
builder: ${{ steps.buildx.outputs.name }} builder: ${{ steps.buildx.outputs.name }}
context: ./alpine/5/ context: ./alpine/5/
build-args: INVOICENINJA_VERSION=5-stable build-args: INVOICENINJA_VERSION=5-develop
target: prod target: prod
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
tags: invoiceninja/invoiceninja:cache tags: invoiceninja/invoiceninja:cache

View File

@@ -3,36 +3,53 @@ ARG BAK_STORAGE_PATH=/var/www/app/docker-backup-storage/
ARG BAK_PUBLIC_PATH=/var/www/app/docker-backup-public/ ARG BAK_PUBLIC_PATH=/var/www/app/docker-backup-public/
# Get Invoice Ninja and install nodejs packages # Get Invoice Ninja and install nodejs packages
FROM --platform=$BUILDPLATFORM node:lts-alpine as build FROM --platform=$BUILDPLATFORM node:lts-alpine as nodebuild
# Download Invoice Ninja # Download Invoice Ninja
ARG INVOICENINJA_VERSION ARG INVOICENINJA_VERSION
ADD https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION /tmp/ninja.tar.gz # ADD https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION /tmp/ninja.tar.gz
ADD https://github.com/invoiceninja/invoiceninja/releases/download/v$INVOICENINJA_VERSION/react-invoiceninja.tar /tmp/ninja.tar
RUN set -eux; apk add curl unzip RUN set -eux; apk add curl unzip
# Extract Invoice Ninja # Extract Invoice Ninja
RUN mkdir -p /var/www/app \ RUN mkdir -p /var/www/app \
&& tar --strip-components=1 -xf /tmp/ninja.tar.gz -C /var/www/app/ \ && tar -xvf /tmp/ninja.tar -C /var/www/app/ \
&& mkdir -p /var/www/app/public/logo /var/www/app/storage && mkdir -p /var/www/app/public/logo /var/www/app/storage
RUN rm -f /var/www/app/public/main.*
RUN rm -f /var/www/app/public/flutter*
# Download and extract the latest react application # Download and extract the latest react application
RUN curl -LGO $(curl https://api.github.com/repos/invoiceninja/ui/releases/latest | grep "browser_download_url" | awk '{ print $2 }' | sed 's/,$//' | sed 's/"//g'); # RUN curl -LGO $(curl https://api.github.com/repos/invoiceninja/ui/releases/latest | grep "browser_download_url" | awk '{ print $2 }' | sed 's/,$//' | sed 's/"//g');
RUN cp invoiceninja-react.zip /tmp/invoiceninja-react.zip # RUN cp invoiceninja-react.zip /tmp/invoiceninja-react.zip
RUN unzip /tmp/invoiceninja-react.zip # RUN unzip /tmp/invoiceninja-react.zip
RUN mkdir /var/www/app/public/react/v$INVOICENINJA_VERSION/ # RUN mkdir /var/www/app/public/react/v$INVOICENINJA_VERSION/
RUN cp -r dist/react/* /var/www/app/public/react/v$INVOICENINJA_VERSION/ # RUN cp -r dist/react/* /var/www/app/public/react/v$INVOICENINJA_VERSION/
RUN cp -r dist/react/* /var/www/app/public/react/ # RUN cp -r dist/react/* /var/www/app/public/react/
RUN mkdir -p /var/www/app/public/tinymce_6.4.2/tinymce/js/ # RUN mkdir -p /var/www/app/public/tinymce_6.4.2/tinymce/js/
RUN cp -r dist/tinymce_6.4.2/* /var/www/app/public/tinymce_6.4.2/ # RUN cp -r dist/tinymce_6.4.2/* /var/www/app/public/tinymce_6.4.2/
# WORKDIR /var/www/app
# RUN git clone https://github.com/invoiceninja/ui.git
# WORKDIR /var/www/app/ui
# RUN git checkout develop
# RUN npm i
# RUN npm run build
# RUN cp -r dist/* /var/www/app/public/
# WORKDIR /var/www/app
# Download and extract the latest react application # Download and extract the latest react application
# #
# Prepare php image # Prepare php image
FROM php:${PHP_VERSION}-fpm-alpine as prod FROM php:${PHP_VERSION}-fpm-alpine as phpbuild
COPY --from=build / /
LABEL maintainer="David Bomba <turbo124@gmail.com>" LABEL maintainer="David Bomba <turbo124@gmail.com>"
@@ -52,7 +69,6 @@ RUN set -eux; \
font-isas-misc \ font-isas-misc \
supervisor \ supervisor \
mysql-client \ mysql-client \
git \
chromium \ chromium \
ttf-freefont ttf-freefont
@@ -90,25 +106,37 @@ ARG BAK_PUBLIC_PATH
ENV INVOICENINJA_VERSION $INVOICENINJA_VERSION ENV INVOICENINJA_VERSION $INVOICENINJA_VERSION
ENV BAK_STORAGE_PATH $BAK_STORAGE_PATH ENV BAK_STORAGE_PATH $BAK_STORAGE_PATH
ENV BAK_PUBLIC_PATH $BAK_PUBLIC_PATH ENV BAK_PUBLIC_PATH $BAK_PUBLIC_PATH
COPY --from=build --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app COPY --from=nodebuild --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app
RUN rm -f /var/www/app/public/main.*
RUN rm -f /var/www/app/public/flutter*
USER $UID USER $UID
WORKDIR /var/www/app WORKDIR /var/www/app
# Do not remove this ENV # Do not remove this ENV
ENV IS_DOCKER true ENV IS_DOCKER true
RUN /usr/local/bin/composer install --no-dev --no-scripts --no-interaction # RUN /usr/local/bin/composer install --no-dev --no-scripts --no-interaction
RUN /usr/local/bin/composer dump-autoload --optimize --no-dev --classmap-authoritative --no-scripts --no-interaction # RUN /usr/local/bin/composer dump-autoload --optimize --no-dev --classmap-authoritative --no-scripts --no-interaction
WORKDIR /var/www/app/ # FROM --platform=$BUILDPLATFORM nodebuild AS dependencybuild
# Install node packages # WORKDIR /var/www/app
ARG BAK_STORAGE_PATH
ARG BAK_PUBLIC_PATH # COPY --from=phpbuild /var/www/app/vendor /var/www/app/vendor
RUN npm install
RUN npm run production # # Install node packages
RUN mv /var/www/app/storage $BAK_STORAGE_PATH # ARG BAK_STORAGE_PATH
RUN mv /var/www/app/public $BAK_PUBLIC_PATH # ARG BAK_PUBLIC_PATH
# RUN --mount=target=/var/www/app/node_modules,type=cache \
# npm install \
# && npm run production \
# && mv /var/www/app/storage $BAK_STORAGE_PATH \
# && mv /var/www/app/public $BAK_PUBLIC_PATH
FROM phpbuild as prod
# COPY --from=dependencybuild --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app
# Override the environment settings from projects .env file # Override the environment settings from projects .env file
ENV APP_ENV production ENV APP_ENV production