variables:
  WPDESK_CI_VERSION: 1.10.18
  MYSQL_ROOT_PASSWORD: mysql
  MYSQL_DATABASE: wptest
  MYSQL_USER: mysql
  MYSQL_PASSWORD: mysql
  MYSQL_INNODB_LOG_BUFFER_SIZE: 32M
  PHP_ERROR_REPORTING: E_ALL
  COMPOSER_ALLOW_SUPERUSER: 1
  GIT_STRATEGY: fetch
  ACCEPTANCE_ERROR_PATH: ${CI_PROJECT_DIR}/acceptance

stages:
  - tools
  - tests
  - pre-deploy
  - deploy

.template: &job-test-template
  stage: tests
  coverage: '/^\s*Lines:\s*\d+.\d+\%/'

.template: &job-test-integration-template
  <<: *job-test-template
  services:
    - mysql:5.6
  script:
    - echo ${WPDESK_CI_VERSION}
    - ls -l
    - php --version
    - cat /tmp/wordpress-develop/src/wp-includes/version.php
    - cat /tmp/woocommerce/woocommerce.php
    - composer update --no-progress
    - if [[ -f tests/integration/prepare.sh ]]; then sh tests/integration/prepare.sh; fi
    - vendor/bin/phpunit --configuration phpunit-integration.xml --coverage-text --colors=never
  only:
    - tags

.template: &job-test-integration-template-fast
  <<: *job-test-integration-template
  script:
    - echo ${WPDESK_CI_VERSION}
    - ls -l
    - php --version
    - cat /tmp/wordpress-develop/src/wp-includes/version.php
    - cat /tmp/woocommerce/woocommerce.php
    - composer update --no-progress
    - if [[ -f tests/integration/prepare.sh ]]; then sh tests/integration/prepare.sh; fi
    - vendor/bin/phpunit --configuration phpunit-integration.xml --no-coverage
  except:
    - tags
  only:

.template: &job-test-unit-template
  <<: *job-test-template
  script:
    - echo ${WPDESK_CI_VERSION}
    - ls -l
    - php --version
    - cat /tmp/wordpress-develop/src/wp-includes/version.php
    - cat /tmp/woocommerce/woocommerce.php
    - composer update --no-progress
    - vendor/bin/phpunit --configuration phpunit-unit.xml --coverage-text --colors=never
  only:
    - tags

.template: &job-test-unit-template-fast
  <<: *job-test-unit-template
  script:
    - echo ${WPDESK_CI_VERSION}
    - ls -l
    - php --version
    - cat /tmp/wordpress-develop/src/wp-includes/version.php
    - cat /tmp/woocommerce/woocommerce.php
    - composer update --no-progress
    - vendor/bin/phpunit --configuration phpunit-unit.xml --no-coverage
  except:
    - tags
  only:

.template: &job-deploy-template
  image: wpdesknet/amazon-svn-deploy
  stage: deploy
  dependencies:
    - build to deploy
    - unit test lastest coverage
    - integration test lastest coverage
  retry: 2
  when: manual
  only:
    - tags

before_script:
  - cd ${CI_PROJECT_DIR}

phpmetric metrics:
  stage: tools
  image: wpdesknet/phpunit-woocommerce:0-0
  allow_failure: true
  when: manual
  artifacts:
    when: always
    expire_in: 1 month
    name: "metrics"
    paths:
      - ${CI_PROJECT_DIR}/phpmetric
  script:
    - echo ${WPDESK_CI_VERSION}
    - composer require phpmetrics/phpmetrics
    - composer update --no-progress
    - php ./vendor/bin/phpmetrics --report-html=phpmetric .

churn metrics:
  stage: tools
  image: wpdesknet/phpunit-woocommerce:0-0
  allow_failure: true
  when: manual
  script:
    - echo ${WPDESK_CI_VERSION}
    - composer require bmitch/churn-php
    - composer update --no-progress
    - vendor/bin/churn run classes inc

code style test:
  stage: tests
  image: wpdesknet/phpunit-woocommerce:0-0
  allow_failure: true
  script:
    - echo ${WPDESK_CI_VERSION}
    - composer update --no-progress
    - vendor/bin/phpcs

unit test lastest:
  <<: *job-test-unit-template-fast
  image: wpdesknet/phpunit-woocommerce:0-0

integration test lastest:
  <<: *job-test-integration-template-fast
  image: wpdesknet/phpunit-woocommerce:0-0

unit test lastest coverage:
  <<: *job-test-unit-template
  image: wpdesknet/phpunit-woocommerce:0-0

integration test lastest coverage:
  <<: *job-test-integration-template
  image: wpdesknet/phpunit-woocommerce:0-0

integration test php7-1 wc-1:
  <<: *job-test-integration-template-fast
  image: wpdesknet/phpunit-woocommerce:1-1

integration test php7 wc-2:
  <<: *job-test-integration-template-fast
  image: wpdesknet/phpunit-woocommerce:2-2

integration test php-7 wc-3:
  <<: *job-test-integration-template-fast
  image: wpdesknet/phpunit-woocommerce:2-3

integration test php5-6:
  <<: *job-test-integration-template-fast
  image: wpdesknet/phpunit-woocommerce:3-0

integration test php5-5:
  <<: *job-test-integration-template-fast
  image: wpdesknet/phpunit-woocommerce:4-0

integration test current woocommerce:
  <<: *job-test-integration-template-fast
  image: wpdesknet/phpunit-woocommerce:0-0
  allow_failure: true
  before_script:
    - cd /tmp
    - rm -rf woocommerce
    - git clone https://github.com/woocommerce/woocommerce.git
    - cd ${CI_PROJECT_DIR}

acceptance test:
  image: wpdesknet/node
  variables:
    CI_DEBUG_SERVICES: trace
  services:
    - name: mysql:5.6
      alias: mysqltests
    - name: wpdesknet/apache-woocommerce:latest
      alias: wootests
    - name: selenium/standalone-chrome
      alias: selenium
  artifacts:
    when: always
    expire_in: 1 day
    name: "error logs"
    paths:
      - ${CI_PROJECT_DIR}/acceptance
  stage: tests
  allow_failure: true
  script:
    - cd ${CI_PROJECT_DIR}
    - composer update --no-progress --no-dev
    - if [[ -f ${CI_PROJECT_DIR}/tests/acceptance/prepare.sh ]]; then sh ${CI_PROJECT_DIR}/tests/acceptance/prepare.sh; fi

    - export MYSQL_IP=$(awk '/^[[:space:]]*($|#)/{next} /mysqltests/{print $1; exit}' /etc/hosts)
    - export WOOTESTS_IP=$(awk '/^[[:space:]]*($|#)/{next} /wootests/{print $1; exit}' /etc/hosts)
    - echo "http://wootests/wpdesk_init.php?mysql_ip=${MYSQL_IP}&wootests_ip=${WOOTESTS_IP}"
    - wget -O /tmp/wpdesk_init.txt "http://wootests/wpdesk_init.php?mysql_ip=${MYSQL_IP}&wootests_ip=${WOOTESTS_IP}"
    - tail -50 /tmp/wpdesk_init.txt

    - sh /tmp/clone.sh git@gitlab.com:wpdesk/plugins-tests.git /tmp/tests headless
    - cd /tmp/tests
    - npm install
    - npm install -g grunt-cli
    - cd node_modules/.bin
    - ./webdriver-manager update
    - cd ../
    - mkdir -p ${CI_PROJECT_DIR}/acceptance/reports/html/screenshot
    - grunt chrome-${CI_PROJECT_NAME}


apigen docs:
  image:
    name: wpdesknet/apigen
  stage: pre-deploy
  artifacts:
    expire_in: 1 day
    name: "docs"
    paths:
      - docs/
  script:
    - echo ${WPDESK_CI_VERSION}
    - ls -l
    - /app/vendor/bin/apigen generate
    - php /app/hooks-docs.php ${CI_PROJECT_DIR}
  only:
    - tags

pages:
  stage: deploy
  dependencies:
    - apigen docs
  script:
    - rm -rf public
    - mv docs/ public/
    - 'curl -X POST --data-urlencode "payload={\"text\": \"Dokumentacja projektu ${CI_PROJECT_NAME} w wersji ${CI_COMMIT_REF_NAME} umieszczona w <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}/pages|pages> \", }" https://hooks.slack.com/services/${SLACK_AUTH}'
  artifacts:
    expire_in: 1 day
    paths:
      - public
  only:
    - tags

build to deploy:
  image: wpdesknet/phpunit-woocommerce:4-0
  stage: pre-deploy
  artifacts:
    expire_in: 1 month
    name: "production release"
    paths:
      - release
      - release.zip
  script:
    - echo ${WPDESK_CI_VERSION}
    - php --version
    - ls -l
    - /tmp/set_version.sh ${CI_COMMIT_REF_NAME}
    - rm -rf ${CI_PROJECT_DIR}/release ${CI_PROJECT_DIR}/release.zip /tmp/release
    - mkdir /tmp/release
    - mkdir -p ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME}
    - cp -rf ${CI_PROJECT_DIR}/* /tmp/release
    - cp -rf /tmp/release/* ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME}
    - cd ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME}
    - composer install --no-dev --no-progress --optimize-autoloader
    - rm -rf build-coverage release tests docs .git .editorconfig .gitignore .gitlab-ci.yml apigen.neon
    - rm -rf composer.json composer.lock phpcs.xml.dist phpunit-integration.xml phpunit-unit.xml composer.phar wp-cli.phar
    - cd ../
    - zip -r -q ../release.zip ./
  only:
    - tags

deploy to shop:
  <<: *job-deploy-template
  script:
    - echo ${WPDESK_CI_VERSION}
    - /tmp/deploy_shop.sh ${CI_PROJECT_NAME} release.zip ${CI_PROJECT_NAME}.zip
    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}|${CI_PROJECT_NAME}> zdeployowany do sklepu w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
  environment:
    name: wpdesk shop
    url: https://wpdeskplugin.s3.amazonaws.com/${CI_PROJECT_NAME}.zip

deploy to demo:
  <<: *job-deploy-template
  script:
    - echo ${WPDESK_CI_VERSION}
    - /tmp/deploy_demo.sh release/${CI_PROJECT_NAME} ${CI_PROJECT_NAME}
    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}|${CI_PROJECT_NAME}> zdeployowany do demo w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
  environment:
    name: wpdesk demo
    url: https://demo.wpdesk.org

deploy to repository:
  <<: *job-deploy-template
  script:
    - echo ${WPDESK_CI_VERSION}
    - rm -rf /tmp/svn-repository
    - mkdir /tmp/svn-repository
    - /tmp/deploy_repository.sh ${CI_PROJECT_NAME} ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME} /tmp/svn-repository
    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}|${CI_PROJECT_NAME}> zdeployowany do repozytorium WP w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
  environment:
    name: wordpress repository
    url: https://downloads.wordpress.org/plugin/${CI_PROJECT_NAME}.${CI_COMMIT_REF_NAME}.zip