stages:
  - prepare
  - test
  - build
  - dockerize
  - deploy

default:
  image: nikolaik/python-nodejs:python3.11-nodejs19-alpine
  cache: &cache
    key:
      files:
        - pnpm-lock.yaml
    paths:
      - .pnpm-store
      - ./node_modules/
      - ./apps/web/node_modules/
      - ./libs/shared/node_modules/
    policy: pull

before_script:
  - npm i -g pnpm
  - pnpm config set store-dir .pnpm-store
  - apk add --no-cache --virtual .build-deps build-base g++ cairo-dev jpeg-dev pango-dev giflib-dev
  - apk add --no-cache --virtual .runtime-deps cairo jpeg pango giflib

install:js:
  stage: prepare
  interruptible: true
  cache:
    <<: *cache
    policy: push
  script:
    - pnpm install
#  only:
#    changes:
#      - pnpm-lock.yaml
#      - .gitlab-ci.yml
#      - apps/**/*
#      - libs/**/*
    # refs:
    #   - main
    #   - merge_requests

.distributed:
  interruptible: true
  cache:
    <<: *cache
  before_script:
    - npm i -g pnpm
    - apk add --update git
  artifacts:
      paths:
      - .pnpm-store
  rules:
    # - if: $CI_COMMIT_BRANCH == "main"
    # - if: $CI_COMMIT_BRANCH == "merge_requests"
    - changes:
        - apps/**/*
        - libs/**/*
        - .gitlab-ci.yml

lint:
  stage: test
  extends: .distributed
  script:
    - pnpm lint

test:
  stage: test
  extends: .distributed
  script:
    - pnpm test

build-prod:
  stage: build
  extends: .distributed
  rules:
    # - if: $CI_COMMIT_BRANCH == "main"
    - changes:
        - apps/**/*
        - libs/**/*
        - .gitlab-ci.yml
  artifacts:
    paths:
      - .pnpm-store
      - dist/apps/web
  script:
    - pnpm build

build-docker:
  image: docker:latest
  services:
   - name: docker:dind
     alias: dockerdaemon
  before_script:
   - ''
  stage: dockerize
  tags:
    - docker
  # only:
  #   - main
  script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login https://$CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin
    - cd ./apps/web
    - docker build --progress plain -t $CI_REGISTRY/graphpolaris/frontend:latest .
    - docker push $CI_REGISTRY/graphpolaris/frontend:latest
  dependencies:
    - build-prod
  variables:
    # Tell docker CLI how to talk to Docker daemon.
    DOCKER_HOST: tcp://dockerdaemon:2375/
    # Use the overlayfs driver for improved performance.
    DOCKER_DRIVER: overlay2
    # Disable TLS since we're running inside local network.
    DOCKER_TLS_CERTDIR: ""

# deploy:
#   stage: deploy
#   script:
#     - ./deploy.sh
#   # only:
#   #   - main
#   environment: production