Skip to content
Snippets Groups Projects
.gitlab-ci.yml 3.15 KiB
Newer Older
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
variables:
  IMAGE_ORG: xpub
  IMAGE_NAME: xpub-elife
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  BASE_DOMAIN: gateway.xpub.semioticsquares.com
  CONFIGURATION_REPOSITORY: https://gitlab.coko.foundation/yld/xpub-deployment-config-postgres.git
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed

stages:
  - build
  - test
  - review
  - staging
  - production
  - demo

build:
  image: docker:latest
  stage: build
  script:
    - docker version
    - docker build -t $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA .
    - if [ -z "$DOCKERHUB_USERNAME" ] || [ -z "$DOCKERHUB_PASSWORD" ]; then echo "Not pushing" && exit 0; fi
    - docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
    - echo "Ignore warning! Cannot perform an interactive login from a non TTY device"
    - docker push $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA

lint:
  image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA
  stage: test
  variables:
    GIT_STRATEGY: none
  script:
    - cd ${HOME}
    - npm run lint

test:
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA
  stage: test
  variables:
    GIT_STRATEGY: none
    # setup data for postgres image
    POSTGRES_USER: test
    POSTGRES_PASSWORD: pw
    # connection details for tests
    PGUSER: test
    PGPASSWORD: pw
    NODE_ENV: test
  services:
    - postgres
  script:
    - cd ${HOME}
    # specify host here else it confuses the linked postgres image
    - PGHOST=postgres npx testcafe 'chrome:headless --no-sandbox'
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed

push:latest:
  image: docker:latest
  stage: staging
  script:
    - if [ -z "$DOCKERHUB_USERNAME" ] || [ -z "$DOCKERHUB_PASSWORD" ]; then echo "Not pushing" && exit 0; fi
    - docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
    - echo "Ignore warning! Cannot perform an interactive login from a non TTY device"
    - docker build -t $IMAGE_ORG/$IMAGE_NAME:latest --label COMMIT_SHA=$CI_COMMIT_SHA .
    - docker push $IMAGE_ORG/$IMAGE_NAME:latest
  only:
  - master

review:
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  image: pubsweet/deployer:latest
  stage: review
  variables:
    PACKAGE_NAME: xpub-elife
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
    FORCE_FRESH_DB: "yes"
    REQUIRES_PROVISIONING: "yes"
  environment:
    name: review/$CI_COMMIT_REF_NAME
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
    # !! kube-lego will fail if domain > 64 chars
    url: "http://${CI_ENVIRONMENT_SLUG}.${BASE_DOMAIN}"
    on_stop: stop_review
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  except:
  - master
  script:
    - source deploy.sh
    - create_deployment

stop_review:
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  image: pubsweet/deployer:latest
  stage: review
  variables:
    PACKAGE_NAME: xpub-elife
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
    REQUIRES_PROVISIONING: "yes"
    GIT_STRATEGY: none
  environment:
    name: review/$CI_COMMIT_REF_NAME
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
    action: stop
  when: manual
  except:
  - master
  script:
    - source deploy.sh
    - delete_deployment
    - delete_objects_in_environment pvc

staging:
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  image: pubsweet/deployer:latest
  stage: staging
  variables:
    PACKAGE_NAME: xpub-elife
    REQUIRES_PROVISIONING: "yes"
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  environment:
    name: xpub-elife-staging
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
    url: "https://${CI_ENVIRONMENT_SLUG}.${BASE_DOMAIN}"
  only:
  - master
  script:
    - source deploy.sh
    - create_deployment

Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  image: pubsweet/deployer:latest
  stage: demo
  variables:
    PACKAGE_NAME: xpub-elife
    REQUIRES_PROVISIONING: "yes"
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
  environment:
    name: xpub-elife-demo
Tamlyn Rhodes's avatar
Tamlyn Rhodes committed
    url: "https://${CI_ENVIRONMENT_SLUG}.${BASE_DOMAIN}"
  when: manual
  script:
    - source deploy.sh
    - create_deployment