# CI/CD Pipeline Documentation
### Front End
```yml
image: node:13-alpine3.10
stages:
- build # Building the code dist file
- test # Running Unit Tests
- deploy # Pushing to the server and running the dockerization script. STILL UNIMPLEMENTED
# Cache modules in between jobs
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- .npm/
# This runs before all scripts
# Here we install dependencies on a clean stale
before_script:
- npm ci --cache .npm --prefer-offline
# Building code for production
build code:
stage: build
script:
- npm run build
# Running unit tests
run unit tests:
stage: test
script:
- npm run test
```
### Back End
```yml
image: node:13-alpine3.11
stages:
- build # Trying to run the server using the env of production
- test # Running Unit Tests
- deploy # Pushing to the instance and running docker scripts
# Cache modules in between jobs
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- .npm/
# Running before scripts
# Install Dependencies on clean stale
before_script:
- npm ci --cache .npm --prefer-offline
# Trying to run the server using the env of production
run in prod-like env:
image: node:13-alpine3.11
stage: build
script:
- sh
- echo "$CI_ENV" > config.env
# Install coreutils for using timeout on alpine linux
- apk add coreutils
- timeout --preserve-status 60s node .
# Run Unit Tests
run unit tests:
image: node:13-alpine3.11
only:
- master
- 2-ci-cd-pipeline
stage: test
script:
- sh
- echo "$CI_ENV" > config.env
- echo "$CI_ENV" > .test.env
- npm run test
```
### Mobile
```yml
image: openjdk:8-jdk
variables:
ANDROID_COMPILE_SDK: "29"
ANDROID_BUILD_TOOLS: "29.0.3"
ANDROID_SDK_TOOLS: "4333796"
before_script:
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
- unzip -d android-sdk-linux android-sdk.zip
- echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export ANDROID_HOME=$PWD/android-sdk-linux
- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
- chmod +x ./gradlew
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | android-sdk-linux/tools/bin/sdkmanager --licenses
- set -o pipefail
lintDebug:
stage: build
script:
- ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
assembleDebug:
stage: build
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
debugTests:
stage: test
script:
- ./gradlew -Pci --console=plain :app:testDebug
```