diff --git a/.changeset/pretty-timers-complain.md b/.changeset/pretty-timers-complain.md new file mode 100644 index 00000000..c84b34fc --- /dev/null +++ b/.changeset/pretty-timers-complain.md @@ -0,0 +1,7 @@ +--- +'@openstapps/projectmanagement': major +'@openstapps/builder-image': major +'@openstapps/node-image': major +--- + +Move images to separate packages diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 494b505d..3d4d6a6c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/.gitlab/publishing.gitlab-ci.yml b/.gitlab/publishing.gitlab-ci.yml index 2a9624c8..1cc50c6d 100644 --- a/.gitlab/publishing.gitlab-ci.yml +++ b/.gitlab/publishing.gitlab-ci.yml @@ -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 diff --git a/backend/backend/.gitlab-ci.yml b/backend/backend/.gitlab-ci.yml index 57ef5b0d..8efcbd13 100644 --- a/backend/backend/.gitlab-ci.yml +++ b/backend/backend/.gitlab-ci.yml @@ -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' diff --git a/configuration/app-builder-image/Dockerfile b/configuration/app-builder-image/Dockerfile new file mode 100644 index 00000000..28750253 --- /dev/null +++ b/configuration/app-builder-image/Dockerfile @@ -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ć " + +### 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 [""] diff --git a/configuration/app-builder-image/package.json b/configuration/app-builder-image/package.json new file mode 100644 index 00000000..b3dab094 --- /dev/null +++ b/configuration/app-builder-image/package.json @@ -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 ", + "contributors": [ + "Anselm Stordeur ", + "Jovan Krunić ", + "Michel Jonathan Schmitz", + "Rainer Killinger ", + "Thea Schöbl " + ], + "files": [ + "Dockerfile", + "README.md", + "CHANGELOG.md" + ] +} diff --git a/configuration/projectmanagement/images/builder/Dockerfile b/configuration/builder-image/Dockerfile similarity index 97% rename from configuration/projectmanagement/images/builder/Dockerfile rename to configuration/builder-image/Dockerfile index f90235c4..f1cfbc54 100644 --- a/configuration/projectmanagement/images/builder/Dockerfile +++ b/configuration/builder-image/Dockerfile @@ -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 diff --git a/configuration/builder-image/package.json b/configuration/builder-image/package.json new file mode 100644 index 00000000..eb4db320 --- /dev/null +++ b/configuration/builder-image/package.json @@ -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 ", + "contributors": [ + "Anselm Stordeur ", + "Jovan Krunić ", + "Michel Jonathan Schmitz", + "Rainer Killinger ", + "Thea Schöbl " + ], + "files": [ + "Dockerfile", + "README.md", + "CHANGELOG.md" + ] +} diff --git a/configuration/projectmanagement/images/node/Dockerfile b/configuration/node-image/Dockerfile similarity index 90% rename from configuration/projectmanagement/images/node/Dockerfile rename to configuration/node-image/Dockerfile index 3f7e3a55..8201f020 100644 --- a/configuration/projectmanagement/images/node/Dockerfile +++ b/configuration/node-image/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14-alpine +FROM node:18-alpine RUN apk update && apk add git curl jq && mkdir -p /opt diff --git a/configuration/node-image/package.json b/configuration/node-image/package.json new file mode 100644 index 00000000..c44bec9c --- /dev/null +++ b/configuration/node-image/package.json @@ -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 ", + "contributors": [ + "Anselm Stordeur ", + "Jovan Krunić ", + "Michel Jonathan Schmitz", + "Rainer Killinger ", + "Thea Schöbl " + ], + "files": [ + "Dockerfile", + "README.md", + "CHANGELOG.md" + ] +} diff --git a/configuration/projectmanagement/images/node/wait-for.sh b/configuration/node-image/wait-for.sh similarity index 100% rename from configuration/projectmanagement/images/node/wait-for.sh rename to configuration/node-image/wait-for.sh diff --git a/configuration/projectmanagement/.gitlab-ci.yml b/configuration/projectmanagement/.gitlab-ci.yml index 5e72c60b..696bc24a 100644 --- a/configuration/projectmanagement/.gitlab-ci.yml +++ b/configuration/projectmanagement/.gitlab-ci.yml @@ -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: diff --git a/configuration/projectmanagement/images/cypress/Dockerfile b/configuration/projectmanagement/images/cypress/Dockerfile deleted file mode 100644 index 99df5d0d..00000000 --- a/configuration/projectmanagement/images/cypress/Dockerfile +++ /dev/null @@ -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 diff --git a/examples/minimal-connector/Dockerfile b/examples/minimal-connector/Dockerfile index d2323d11..3ed1417d 100644 --- a/examples/minimal-connector/Dockerfile +++ b/examples/minimal-connector/Dockerfile @@ -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 \ No newline at end of file +ADD . /minimal-connector diff --git a/examples/minimal-connector/package.json b/examples/minimal-connector/package.json index 6137b6bb..693218c5 100644 --- a/examples/minimal-connector/package.json +++ b/examples/minimal-connector/package.json @@ -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/", diff --git a/examples/minimal-deployment/database/.gitignore b/examples/minimal-deployment/database/.gitignore index f54b6b96..72e8ffc0 100644 --- a/examples/minimal-deployment/database/.gitignore +++ b/examples/minimal-deployment/database/.gitignore @@ -1 +1 @@ -nodes/ +* diff --git a/examples/minimal-deployment/docker-compose.yml b/examples/minimal-deployment/docker-compose.yml index 6e1630b1..960e9437 100644 --- a/examples/minimal-deployment/docker-compose.yml +++ b/examples/minimal-deployment/docker-compose.yml @@ -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" diff --git a/examples/minimal-plugin/.gitlab-ci.yml b/examples/minimal-plugin/.gitlab-ci.yml deleted file mode 100644 index b46c8046..00000000 --- a/examples/minimal-plugin/.gitlab-ci.yml +++ /dev/null @@ -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 diff --git a/examples/minimal-plugin/Dockerfile b/examples/minimal-plugin/Dockerfile index 576b6a64..974e0806 100644 --- a/examples/minimal-plugin/Dockerfile +++ b/examples/minimal-plugin/Dockerfile @@ -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"] diff --git a/examples/minimal-plugin/package.json b/examples/minimal-plugin/package.json index 4d585f6b..208f5f2f 100644 --- a/examples/minimal-plugin/package.json +++ b/examples/minimal-plugin/package.json @@ -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/", diff --git a/frontend/app/.gitlab-ci.yml b/frontend/app/.gitlab-ci.yml index 0ac751f4..a0921b10 100644 --- a/frontend/app/.gitlab-ci.yml +++ b/frontend/app/.gitlab-ci.yml @@ -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' diff --git a/frontend/app/Dockerfile b/frontend/app/Dockerfile index 28750253..615d4e66 100644 --- a/frontend/app/Dockerfile +++ b/frontend/app/Dockerfile @@ -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ć " - -### 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 diff --git a/frontend/app/Dockerfile.Executable b/frontend/app/Dockerfile.Executable deleted file mode 100644 index c38a9638..00000000 --- a/frontend/app/Dockerfile.Executable +++ /dev/null @@ -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 diff --git a/package.json b/package.json index 4ba26592..34df46b3 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/api-cli/Dockerfile b/packages/api-cli/Dockerfile new file mode 100644 index 00000000..66ce16c5 --- /dev/null +++ b/packages/api-cli/Dockerfile @@ -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"] diff --git a/packages/api-cli/package.json b/packages/api-cli/package.json index 408f991b..d9b0e1a9 100644 --- a/packages/api-cli/package.json +++ b/packages/api-cli/package.json @@ -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/",