---
# System prepended metadata

title: CI/CD Pipeline Documentation

---

# 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

```