image: node:14

variables:
  NODE_ENV: test

cache:
  key:
    files:
      - yarn.lock
  paths:
    - node_modules

stages:
  - lint
  - test
  - build
  - deploy

before_script:
  - env
  - yarn

lint-js:
  stage: lint
  script: yarn test:lint:js
  only:
    changes:
      - "**/*.js"
      - "**/*.jsx"
      - "**/*.ts"
      - "**/*.tsx"
      - ".eslintignore"
      - ".eslintrc.js"

lint-sass:
  stage: lint
  script: yarn test:lint:sass
  only:
    changes:
      - "**/*.scss"
      - "**/*.css"
      - ".stylelintrc.json"

jest:
  stage: test
  script: yarn test:jest
  only:
    changes:
      - "**/*.js"
      - "**/*.json"
      - "app/soapbox/**/*"
      - "webpack/**/*"
      - "jest.config.js"
      - "package.json"
      - "yarn.lock"

build-production:
  stage: build
  script: yarn build
  variables:
    NODE_ENV: production
  artifacts:
    paths:
    - static

docs-deploy:
  stage: deploy
  image: alpine:latest
  before_script:
    - apk add curl
  script:
    - curl -X POST -F"token=$CI_JOB_TOKEN" -F'ref=master' https://gitlab.com/api/v4/projects/15685485/trigger/pipeline
  only:
    refs:
      - develop
    changes:
      - "docs/**/*"

# Supposed to fail when translations are outdated, instead always passes
#
# i18n:
#   stage: build
#   script: yarn manage:translations
#   variables:
#     NODE_ENV: development
#   before_script:
#     - yarn
#     - yarn build

pages:
  stage: deploy
  before_script: []
  script:
    # artifacts are kept between jobs
    - mv static public
  variables:
    NODE_ENV: production
  artifacts:
    paths:
    - public
  only:
    refs:
      - develop
