refactor: move node and builder images

This commit is contained in:
2023-07-03 14:36:47 +02:00
parent 4e4c7b5cc9
commit 11c9d742cd
26 changed files with 239 additions and 448 deletions

View File

@@ -0,0 +1,7 @@
---
'@openstapps/projectmanagement': major
'@openstapps/builder-image': major
'@openstapps/node-image': major
---
Move images to separate packages

View File

@@ -12,7 +12,7 @@ include:
- local: /frontend/app/.gitlab-ci.yml
- local: /.gitlab/publishing.gitlab-ci.yml
rules:
- if: $CI_COMMIT_TAG
- if: '$CI_COMMIT_MESSAGE =~ /ci: publish release$/'
when: always
variables:
@@ -76,10 +76,10 @@ build:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
variables:
DEPLOY_ID: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
- if: $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_TAG =~ /\d+\.\d+\.\d+$/
- if: $CI_COMMIT_BRANCH == 'main'
variables:
DEPLOY_ID: production
- if: $CI_COMMIT_BRANCH == 'develop' || $CI_COMMIT_TAG =~ /-next\.\d+$/
- if: $CI_COMMIT_BRANCH == 'develop'
variables:
DEPLOY_ID: staging
@@ -116,7 +116,7 @@ unit:
coverage_format: cobertura
path: coverage.xml
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop' || $CI_COMMIT_TAG
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop'
audit:
stage: audit
@@ -124,7 +124,7 @@ audit:
script:
- pnpm audit --prod
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'develop' || $CI_COMMIT_TAG
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'develop'
allow_failure: true
- if: $CI_COMMIT_BRANCH == 'main'
allow_failure: false

View File

@@ -35,6 +35,20 @@ publish image:
DEPLOY_DIR: .deploy/backend
- IMAGE_NAME: proxy
DEPLOY_DIR: .deploy/proxy
- IMAGE_NAME: api
DEPLOY_DIR: .deploy/api-cli
- IMAGE_NAME: minimal-connector
DEPLOY_DIR: .deploy/minimal-connector
- IMAGE_NAME: minimal-plugin
DEPLOY_DIR: .deploy/minimal-plugin
- IMAGE_NAME: node
DEPLOY_DIR: configuration/node-image
- IMAGE_NAME: builder
DEPLOY_DIR: configuration/builder-image
- IMAGE_NAME: app-builder
DEPLOY_DIR: configuration/app-builder-image
- IMAGE_NAME: app
DEPLOY_DIR: frontend/app
publish packages:
stage: publish

View File

@@ -19,4 +19,4 @@ integration:
junit:
- backend/backend/coverage/integration-report-junit.xml
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop' || $CI_COMMIT_TAG
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop'

View File

@@ -0,0 +1,114 @@
### Set base image
FROM ubuntu:20.04
LABEL version="2.0.0" \
description="Build environment for the StApps app." \
maintainer="Jovan Krunić <krunic@uni-frankfurt.de>"
### Configure versions to install
ENV ANDROID_APIS="android-30" \
ANDROID_BUILD_TOOLS_VERSION="30.0.2" \
NPM_VERSION="^6.0.0" \
IONIC_VERSION="^6.0.0" \
CORDOVA_RES_VERSION="latest" \
### Configure download URLs
ANDROID_SDK_TOOLS_DOWNLOAD_URL="https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip" \
GOOGLE_SIGNING_KEY_URL="https://dl-ssl.google.com/linux/linux_signing_key.pub" \
GOOGLE_CHROME_REPOSITORY_URL="http://dl.google.com/linux/chrome/deb/" \
### Android SDK path
ANDROID_SDK_ROOT="/opt/android-sdk" \
### Installation files
SCRIPTS_DIRECTORY="scripts" \
NODE_SETUP_SCRIPT="node_setup.sh" \
TMP_PROJECT_NAME="tmp-project"
### Set $PATH
#ENV PATH=$ANDROID_SDK_ROOT/cmdline-tools/:$ANDROID_SDK_ROOT/cmdline-tools/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS_VERSION:$PATH
ENV PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS_VERSION:$PATH
### Replace shell with bash
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \
### Set debconf to run non-interactively
echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
### Install locales and base dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
locales \
apt-transport-https \
build-essential \
ca-certificates \
curl \
libssl-dev \
git \
gradle \
ca-certificates-java \
python \
python3-pip \
software-properties-common \
ssh \
unzip \
wget \
gpg-agent \
jq \
&& rm -rf /var/lib/apt/lists/*
### Install Java Development Kit 11
RUN add-apt-repository -y ppa:openjdk-r/ppa && apt-get update && \
apt-get install --no-install-recommends -y openjdk-11-jdk \
&& rm -rf /var/lib/apt/lists/*
### Setup the locale
RUN sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US \
LC_ALL=en_US.UTF-8
RUN dpkg-reconfigure --frontend noninteractive locales
### add chrome repository
RUN wget -q -O - $GOOGLE_SIGNING_KEY_URL | apt-key add -
RUN echo "deb $GOOGLE_CHROME_REPOSITORY_URL stable main" >> /etc/apt/sources.list.d/google.list
### Install Chrome
RUN apt-get update -y && \
apt-get install -y --no-install-recommends \
### Install chrome and virtual frame buffer
google-chrome-stable xvfb && \
### Clear apt cache
apt-get clean && \
rm -rf /var/lib/apt/lists/*
### Workaround to fix cacerts problem (Ubuntu):
### https://stackoverflow.com/questions/6784463/error-trustanchors-parameter-must-be-non-empty
RUN rm /etc/ssl/certs/java/cacerts && \
update-ca-certificates -f
### Install android
RUN curl $ANDROID_SDK_TOOLS_DOWNLOAD_URL > /tmp/android-sdk.zip && \
unzip /tmp/android-sdk.zip && \
mkdir -p $ANDROID_SDK_ROOT/cmdline-tools && \
mv cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/tools && \
### Add licences (for "auto-accept licenses")
yes | sdkmanager --licenses && \
### Install platform tools
sdkmanager "platforms;$ANDROID_APIS" "build-tools;$ANDROID_BUILD_TOOLS_VERSION"
### Copy scripts directory into the tmp folder, so it's available to the following commands
COPY $SCRIPTS_DIRECTORY/$NODE_SETUP_SCRIPT /tmp/
RUN bash /tmp/$NODE_SETUP_SCRIPT && apt-get install -y nodejs && \
### Install wanted npm version
npm install -g --unsafe-perm npm@$NPM_VERSION && \
### Install needed global npm packages
npm install -g --unsafe-perm @ionic/cli@$IONIC_VERSION cordova-res@$CORDOVA_RES_VERSION
RUN cd / && ionic start $TMP_PROJECT_NAME blank --type=angular --capacitor --no-git --no-interactive && \
cd $TMP_PROJECT_NAME && ionic capacitor add android && export NG_CLI_ANALYTICS=ci && ionic capacitor build android --no-open && \
cd android && ./gradlew assembleDebug && \
cd / && rm -rf $TMP_PROJECT_NAME
### Set working directory
WORKDIR /app
CMD [""]

View File

@@ -0,0 +1,20 @@
{
"name": "@openstapps/app-builder-image",
"version": "3.0.0-next.3",
"private": true,
"type": "module",
"license": "GPL-3.0-only",
"author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
"contributors": [
"Anselm Stordeur <anselmstordeur@gmail.com>",
"Jovan Krunić <jovan.krunic@gmail.com>",
"Michel Jonathan Schmitz",
"Rainer Killinger <mail-openstapps@killinger.co>",
"Thea Schöbl <dev@theaninova.de>"
],
"files": [
"Dockerfile",
"README.md",
"CHANGELOG.md"
]
}

View File

@@ -1,6 +1,6 @@
FROM docker/compose
ARG NODE_VERSION="14"
ARG NODE_VERSION="18"
RUN apk update && apk add nodejs npm git jq curl

View File

@@ -0,0 +1,20 @@
{
"name": "@openstapps/builder-image",
"version": "3.0.0-next.3",
"private": true,
"type": "module",
"license": "GPL-3.0-only",
"author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
"contributors": [
"Anselm Stordeur <anselmstordeur@gmail.com>",
"Jovan Krunić <jovan.krunic@gmail.com>",
"Michel Jonathan Schmitz",
"Rainer Killinger <mail-openstapps@killinger.co>",
"Thea Schöbl <dev@theaninova.de>"
],
"files": [
"Dockerfile",
"README.md",
"CHANGELOG.md"
]
}

View File

@@ -1,4 +1,4 @@
FROM node:14-alpine
FROM node:18-alpine
RUN apk update && apk add git curl jq && mkdir -p /opt

View File

@@ -0,0 +1,20 @@
{
"name": "@openstapps/node-image",
"version": "3.0.0-next.3",
"private": true,
"type": "module",
"license": "GPL-3.0-only",
"author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
"contributors": [
"Anselm Stordeur <anselmstordeur@gmail.com>",
"Jovan Krunić <jovan.krunic@gmail.com>",
"Michel Jonathan Schmitz",
"Rainer Killinger <mail-openstapps@killinger.co>",
"Thea Schöbl <dev@theaninova.de>"
],
"files": [
"Dockerfile",
"README.md",
"CHANGELOG.md"
]
}

View File

@@ -1,105 +1,3 @@
image: registry.gitlab.com/openstapps/projectmanagement/node
before_script:
- npm ci
default:
tags:
- performance
stages:
- build
- test
- maintenance
- audit
- publish
- deploy
npm build:
stage: build
script:
- npm run build
artifacts:
paths:
- lib
npm test:
script:
- npm run test
stage: test
docker image builder:
image: registry.gitlab.com/openstapps/projectmanagement/builder
stage: build
only:
variables:
- $BUILD_IMAGES == "true"
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
- docker build -t registry.gitlab.com/openstapps/projectmanagement/builder -f images/builder/Dockerfile .
- docker push registry.gitlab.com/openstapps/projectmanagement/builder
tags:
- secrecy
docker image node:
image: registry.gitlab.com/openstapps/projectmanagement/builder
stage: build
only:
variables:
- $BUILD_IMAGES == "true"
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com/openstapps/projectmanagement/
- docker build -t registry.gitlab.com/openstapps/projectmanagement/node -f images/node/Dockerfile images/node
- docker push registry.gitlab.com/openstapps/projectmanagement/node
tags:
- secrecy
docker image cypress:
image: registry.gitlab.com/openstapps/projectmanagement/builder
stage: build
only:
variables:
- $BUILD_IMAGES == "true"
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
script:
- export CHROME_VERSION=$(curl -fsSL https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/stable/versions | jq -r '.versions[0].version')
- export FIREFOX_VERSION=$(curl -fsSL https://product-details.mozilla.org/1.0/firefox_versions.json | jq -r '.LATEST_FIREFOX_VERSION')
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com/openstapps/projectmanagement/
- docker build --build-arg CHROME_VERSION=$CHROME_VERSION --build-arg FIREFOX_VERSION=$FIREFOX_VERSION -t registry.gitlab.com/openstapps/projectmanagement/cypress -f images/cypress/Dockerfile images/cypress
- docker push registry.gitlab.com/openstapps/projectmanagement/cypress
tags:
- secrecy
npm audit:
allow_failure: true
except:
- schedules
script:
- npm audit
stage: audit
scheduled npm audit:
only:
- schedules
except:
variables:
- $MAINTENANCE_MODE
- $RENOVATE
script:
- npm audit --production
stage: audit
tidy:
script:
- node lib/cli tidy
@@ -131,32 +29,6 @@ unlabel:
tags:
- secrecy
pages:
stage: deploy
script:
- npm run documentation
- mv docs public
only:
- /^v[0-9]+\.[0-9]+\.[0-9]+$/
artifacts:
paths:
- public
npm package:
dependencies:
- npm build
tags:
- secrecy
stage: publish
script:
- echo "//registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN" > ~/.npmrc
- npm publish
only:
- /^v[0-9]+.[0-9]+.[0-9]+$/
artifacts:
paths:
- lib
renovate:
image: renovate/renovate:slim
services:

View File

@@ -1,101 +0,0 @@
# WARNING: this file was autogenerated by generate-browser-image.js
# using
# yarn add:browser -- 14.19.0 --chrome=100.0.4896.88 --firefox=99.0.1 --edge
#
# build args added afterwards
#
FROM cypress/base:14.21.1
ARG CHROME_VERSION="unknown"
ARG FIREFOX_VERSION="unknown"
USER root
RUN node --version
# Install dependencies
RUN apt-get update && \
apt-get install -y \
fonts-liberation \
git \
libcurl4 \
libcurl3-gnutls \
libcurl3-nss \
xdg-utils \
wget \
curl \
# firefox dependencies
bzip2 \
# add codecs needed for video playback in firefox
# https://github.com/cypress-io/cypress-docker-images/issues/150
mplayer \
# edge dependencies
gnupg \
dirmngr \
# clean up
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# install libappindicator3-1 - not included with Debian 11
RUN wget --no-verbose -O /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \
dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \
apt update && \
apt --fix-broken install -y && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean && \
rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb
# install Chrome browser
RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" && \
dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \
apt update && \
apt --fix-broken install -y && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean && \
rm -f /usr/src/google-chrome-stable_current_amd64.deb
# "fake" dbus address to prevent errors
# https://github.com/SeleniumHQ/docker-selenium/issues/87
ENV DBUS_SESSION_BUS_ADDRESS=/dev/null
# install Firefox browser
RUN wget --no-verbose -O /tmp/firefox.tar.bz2 "https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2" && \
tar -C /opt -xjf /tmp/firefox.tar.bz2 && \
rm /tmp/firefox.tar.bz2 && \
ln -fs /opt/firefox/firefox /usr/bin/firefox
RUN echo "Downloading Latest Edge version..."
## Setup Edge
RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
RUN rm microsoft.gpg
## Install Edge
RUN apt-get update && \
apt-get install -y microsoft-edge-dev \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# Add a link to the browser that allows Cypress to find it
RUN ln -s /usr/bin/microsoft-edge /usr/bin/edge
# versions of local tools
RUN echo " node version: $(node -v) \n" \
"npm version: $(npm -v) \n" \
"yarn version: $(yarn -v) \n" \
"debian version: $(cat /etc/debian_version) \n" \
"Chrome version: $(google-chrome --version) \n" \
"Firefox version: $(firefox --version) \n" \
"Edge version: $(edge --version) \n" \
"git version: $(git --version) \n" \
"whoami: $(whoami) \n"
# a few environment variables to make NPM installs easier
# good colors for most applications
ENV TERM=xterm
# avoid million NPM install messages
ENV npm_config_loglevel=warn
# allow installing when the main user is root
ENV npm_config_unsafe_perm=true

View File

@@ -1,8 +1,8 @@
FROM registry.gitlab.com/openstapps/projectmanagement/node
FROM registry.gitlab.com/openstapps/projectmanagement/node:v18
WORKDIR /minimal-connector
ENTRYPOINT ["node", "lib/cli.js", "run", "--"]
CMD [""]
# Add connector as last step to reuse layers effectively
ADD . /minimal-connector
ADD . /minimal-connector

View File

@@ -24,6 +24,7 @@
],
"scripts": {
"build": "tsup-node --dts",
"deploy": "pnpm --prod --filter=@openstapps/minimal-connector deploy ../../.deploy/minimal-connector",
"format": "prettier . -c --ignore-path ../../.gitignore",
"format:fix": "prettier --write . --ignore-path ../../.gitignore",
"lint": "eslint --ext .ts src/",

View File

@@ -1 +1 @@
nodes/
*

View File

@@ -1,7 +1,7 @@
version: '3.7'
services:
database:
image: registry.gitlab.com/openstapps/database:master
image: registry.gitlab.com/openstapps/openstapps/database:2.0.0
volumes:
- ./database:/usr/share/elasticsearch/data
expose:
@@ -9,12 +9,12 @@ services:
restart: unless-stopped
backend:
image: registry.gitlab.com/openstapps/backend/default:core-0.31
image: registry.gitlab.com/openstapps/openstapps/backend:3.0.0-next.0
environment:
ES_ADDR: "http://database:9200"
NODE_CONFIG_ENV: "elasticsearch"
ALLOW_NO_TRANSPORT: "true"
expose:
expose:
- 3000
ports:
- 3000:3000
@@ -27,7 +27,7 @@ services:
- database
api:
image: registry.gitlab.com/openstapps/api/copy:core-0.23
image: registry.gitlab.com/openstapps/openstapps/api:3.0.0-next.0
links:
- "backend"

View File

@@ -1,70 +0,0 @@
image: registry.gitlab.com/openstapps/projectmanagement/node
stages:
- build
- audit
- publish
- deploy
before_script:
- npm ci
npm build:
stage: build
script:
- npm run build
artifacts:
paths:
- lib
audit:
allow_failure: true
except:
- schedules
script:
- npm audit
stage: audit
scheduled-audit:
only:
- schedules
script:
- npm audit --audit-level=high
stage: audit
docker image:
image: registry.gitlab.com/openstapps/projectmanagement/builder:latest
dependencies:
- npm build
stage: publish
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
script:
- export CORE_VERSION=$(openstapps-projectmanagement get-used-version @openstapps/core)
- export VERSION=$(echo -n "$CI_BUILD_REF_NAME" | cut -c 2-)
- export IMAGETAG_BASE=$CI_REGISTRY_IMAGE
- export IMAGETAG_CORE_VERSION=$IMAGETAG_BASE:core-$CORE_VERSION
- export IMAGETAG_VERSION=$IMAGETAG_BASE:$VERSION
- export IMAGETAG_LATEST=$IMAGETAG_BASE:latest
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker build -t $IMAGETAG_LATEST -t $IMAGETAG_VERSION -t $IMAGETAG_CORE_VERSION .
- docker push $IMAGETAG_BASE
only:
- /^v[0-9]+\.[0-9]+\.[0-9]+$/
except:
- branches
tags:
- docker
pages:
artifacts:
paths:
- public
only:
- /^v[0-9]+\.[0-9]+\.[0-9]+$/
script:
- npm run documentation
- mv docs public
stage: deploy

View File

@@ -1,4 +1,4 @@
FROM registry.gitlab.com/openstapps/projectmanagement/node
FROM registry.gitlab.com/openstapps/projectmanagement/node:v18
WORKDIR /app
ENTRYPOINT ["node", "lib/cli.js"]

View File

@@ -20,6 +20,7 @@
],
"scripts": {
"build": "tsup-node --dts",
"deploy": "pnpm --prod --filter=@openstapps/minimal-plugin deploy ../../.deploy/minimal-plugin",
"format": "prettier . -c --ignore-path ../../.gitignore",
"format:fix": "prettier --write . --ignore-path ../../.gitignore",
"lint": "eslint --ext .ts src/",

View File

@@ -19,4 +19,4 @@ e2e:
- BROWSER: chrome
- BROWSER: firefox
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop' || $CI_COMMIT_TAG
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop'

View File

@@ -1,114 +1,13 @@
### Set base image
FROM ubuntu:20.04
# Creates a docker image with only the app as an executable unit
# Dependencies need to be installed beforehand
# Needs to be build beforehand
FROM node:18-alpine
LABEL version="2.0.0" \
description="Build environment for the StApps app." \
maintainer="Jovan Krunić <krunic@uni-frankfurt.de>"
### Configure versions to install
ENV ANDROID_APIS="android-30" \
ANDROID_BUILD_TOOLS_VERSION="30.0.2" \
NPM_VERSION="^6.0.0" \
IONIC_VERSION="^6.0.0" \
CORDOVA_RES_VERSION="latest" \
### Configure download URLs
ANDROID_SDK_TOOLS_DOWNLOAD_URL="https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip" \
GOOGLE_SIGNING_KEY_URL="https://dl-ssl.google.com/linux/linux_signing_key.pub" \
GOOGLE_CHROME_REPOSITORY_URL="http://dl.google.com/linux/chrome/deb/" \
### Android SDK path
ANDROID_SDK_ROOT="/opt/android-sdk" \
### Installation files
SCRIPTS_DIRECTORY="scripts" \
NODE_SETUP_SCRIPT="node_setup.sh" \
TMP_PROJECT_NAME="tmp-project"
### Set $PATH
#ENV PATH=$ANDROID_SDK_ROOT/cmdline-tools/:$ANDROID_SDK_ROOT/cmdline-tools/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS_VERSION:$PATH
ENV PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS_VERSION:$PATH
### Replace shell with bash
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \
### Set debconf to run non-interactively
echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
### Install locales and base dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
locales \
apt-transport-https \
build-essential \
ca-certificates \
curl \
libssl-dev \
git \
gradle \
ca-certificates-java \
python \
python3-pip \
software-properties-common \
ssh \
unzip \
wget \
gpg-agent \
jq \
&& rm -rf /var/lib/apt/lists/*
### Install Java Development Kit 11
RUN add-apt-repository -y ppa:openjdk-r/ppa && apt-get update && \
apt-get install --no-install-recommends -y openjdk-11-jdk \
&& rm -rf /var/lib/apt/lists/*
### Setup the locale
RUN sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US \
LC_ALL=en_US.UTF-8
RUN dpkg-reconfigure --frontend noninteractive locales
### add chrome repository
RUN wget -q -O - $GOOGLE_SIGNING_KEY_URL | apt-key add -
RUN echo "deb $GOOGLE_CHROME_REPOSITORY_URL stable main" >> /etc/apt/sources.list.d/google.list
### Install Chrome
RUN apt-get update -y && \
apt-get install -y --no-install-recommends \
### Install chrome and virtual frame buffer
google-chrome-stable xvfb && \
### Clear apt cache
apt-get clean && \
rm -rf /var/lib/apt/lists/*
### Workaround to fix cacerts problem (Ubuntu):
### https://stackoverflow.com/questions/6784463/error-trustanchors-parameter-must-be-non-empty
RUN rm /etc/ssl/certs/java/cacerts && \
update-ca-certificates -f
### Install android
RUN curl $ANDROID_SDK_TOOLS_DOWNLOAD_URL > /tmp/android-sdk.zip && \
unzip /tmp/android-sdk.zip && \
mkdir -p $ANDROID_SDK_ROOT/cmdline-tools && \
mv cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/tools && \
### Add licences (for "auto-accept licenses")
yes | sdkmanager --licenses && \
### Install platform tools
sdkmanager "platforms;$ANDROID_APIS" "build-tools;$ANDROID_BUILD_TOOLS_VERSION"
### Copy scripts directory into the tmp folder, so it's available to the following commands
COPY $SCRIPTS_DIRECTORY/$NODE_SETUP_SCRIPT /tmp/
RUN bash /tmp/$NODE_SETUP_SCRIPT && apt-get install -y nodejs && \
### Install wanted npm version
npm install -g --unsafe-perm npm@$NPM_VERSION && \
### Install needed global npm packages
npm install -g --unsafe-perm @ionic/cli@$IONIC_VERSION cordova-res@$CORDOVA_RES_VERSION
RUN cd / && ionic start $TMP_PROJECT_NAME blank --type=angular --capacitor --no-git --no-interactive && \
cd $TMP_PROJECT_NAME && ionic capacitor add android && export NG_CLI_ANALYTICS=ci && ionic capacitor build android --no-open && \
cd android && ./gradlew assembleDebug && \
cd / && rm -rf $TMP_PROJECT_NAME
### Set working directory
WORKDIR /app
COPY www/ /app/www
COPY package.json /app
CMD [""]
EXPOSE 8100
RUN npm install -g http-server
CMD http-server www --p 8100

View File

@@ -1,20 +0,0 @@
# Creates a docker image with only the app as an executable unit
# Dependencies need to be installed beforehand
# Needs to be build beforehand
# docker build -t registry.gitlab.com/openstapps/app/executable:core-x.y -f Dockerfile.Executable .
FROM node:14-alpine
WORKDIR /app
COPY . /app
# To use ng directly
ENV PATH /app/node_modules/.bin:$PATH
EXPOSE 8100
# Because the dependencies were installed from the builder-Image,
# or locally, we need to rebuild node-sass library
RUN npm rebuild node-sass
# Starts the app
CMD ng run app:serve --host=0.0.0.0 --port=8100

View File

@@ -17,7 +17,7 @@
"format:fix": "dotenv -c -- turbo run format:fix",
"lint": "dotenv -c -- turbo run lint",
"lint:fix": "dotenv -c -- turbo run lint:fix",
"publish-packages": "pnpm changeset version && pnpm syncpack:fix && pnpm install && git add . && git commit -m \"refactor: update changelog\" && git push && pnpm changeset tag && git push --follow-tags",
"publish-packages": "pnpm changeset version && pnpm syncpack:fix && pnpm install && git add . && git commit -m \"refactor: update changelog\n\nci: publish release\" && git push && pnpm changeset tag && git push --follow-tags",
"syncpack": "syncpack list-mismatches && syncpack lint-semver-ranges --types dev,peer,prod",
"syncpack:fix": "syncpack format && syncpack fix-mismatches",
"test": "trap 'node coverage.mjs' EXIT && dotenv -c -- turbo run test --filter=!@openstapps/app",

View File

@@ -0,0 +1,12 @@
FROM registry.gitlab.com/openstapps/projectmanagement/node:v18
USER root
RUN apk add --update python3 py3-pip make g++ gcompat
USER node
ADD --chown=node:node . /app
ENV NODE_ENV=production
WORKDIR /app
EXPOSE 3000
ENTRYPOINT ["node", "app.js"]

View File

@@ -21,11 +21,13 @@
"files": [
"app.js",
"lib",
"Dockerfile",
"README.md",
"CHANGELOG.md"
],
"scripts": {
"build": "tsup-node",
"deploy": "pnpm --prod --filter=@openstapps/api-cli deploy ../../.deploy/api-cli",
"format": "prettier . -c --ignore-path ../../.gitignore",
"format:fix": "prettier --write . --ignore-path ../../.gitignore",
"lint": "tsc --noEmit && eslint --ext .ts src/",