diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 8814157..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,166 +0,0 @@ -version: '2' -services: - apache: - image: "symbiote/apache2:latest" - depends_on: - - mysql - ports: - - "80:80" - - "443:443" - links: - - php:php - working_dir: /var/www/html - volumes: - - .:/var/www/html - - ${DOCKER_PROJECT_PATH}/logs:/var/log/apache2 - php: - image: "symbiote/php-fpm:${DOCKER_PHP_VERSION}" - links: - - mysql:mysql - volumes: - - '.:/var/www/html' - - ${DOCKER_PROJECT_PATH}/logs:/var/log/php - - ${DOCKER_PROJECT_PATH}/logs:/var/log/silverstripe - # Enable xdebug via the env var DOCKER_PHP_COMMAND. - # Note: there needs to be an '&&' at the end. - command: bash -c "${DOCKER_PHP_COMMAND} php-fpm" - - node: - image: "symbiote/node:${DOCKER_NODE_VERSION}" - tty: true - working_dir: /tmp - volumes: - - '.:/tmp' - command: ["/bin/bash"] - - # Uses the same image as php, but executes as a separate container - # to enable tty, and allow for SSH access which we will keep separate - # from the web container. Will revisit this at some point as it's - # more efficient to use the same container for both - phpcli: - image: "symbiote/php-cli:${DOCKER_PHP_VERSION}" - links: - - mysql:mysql - tty: true - working_dir: /var/www/html - environment: - SSH_AUTH_SOCK: "/tmp/ssh_agent_socket" - GIT_COMMIT: ${CI_COMMIT_SHA} - GIT_BRANCH: ${CI_COMMIT_REF_SLUG} - COMPOSER_PROCESS_TIMEOUT: ${DOCKER_COMPOSER_TIMEOUT} - volumes: - - '.:/var/www/html' - - ${DOCKER_SHARED_PATH}/composer-cache:/usr/local/composer/cache - - ${DOCKER_PROJECT_PATH}/logs:/var/log/php - - ${DOCKER_PROJECT_PATH}/logs:/var/log/silverstripe - - $SSH_AUTH_SOCK:/tmp/ssh_agent_socket - - ${DOCKER_SSH_VOLUME} - command: ["/bin/bash"] - - sqsrunner: - image: "symbiote/php-cli:${DOCKER_PHP_VERSION}" - links: - - mysql:mysql - tty: false - working_dir: /var/www/html - volumes: - - '.:/var/www/html' - - ${DOCKER_PROJECT_PATH}/logs:/var/log/php - - ${DOCKER_PROJECT_PATH}/logs:/var/log/silverstripe - command: [ - "php", - "sqs-jobqueue/central-runner.php", - ] - - queuedjobs: - image: "symbiote/php-cli:${DOCKER_PHP_VERSION}" - links: - - mysql:mysql - tty: false - working_dir: /var/www/html - volumes: - - '.:/var/www/html' - - ${DOCKER_PROJECT_PATH}/logs:/var/log/php - - ${DOCKER_PROJECT_PATH}/logs:/var/log/silverstripe - command: [ - "/bin/bash", - "-c", - "while :; do php /var/www/html/${DOCKER_CLISCRIPT_PATH} dev/tasks/ProcessJobQueueTask queue=2 >> /var/log/php/queuedjob.log; php /var/www/html/${DOCKER_CLISCRIPT_PATH} dev/tasks/ProcessJobQueueTask queue=3 >> /var/log/php/queuedjob.log; sleep 30; done" - ] - - adminer: - image: "adminer:4.6-standalone" - environment: - ADMINER_DESIGN: nette - ADMINER_DEFAULT_SERVER: mysql - depends_on: - - mysql - links: - - mysql:mysql - ports: - - "8080:8080" - - mysql: - image: "mysql:${DOCKER_MYSQL_VERSION}" - ports: - - "3306:3306" - volumes: - - "${DOCKER_PROJECT_PATH}/mysql-data:/var/lib/mysql" - environment: - MYSQL_ROOT_PASSWORD: "password" - MYSQL_ROOT_HOST: "%" - # Fixes MySQL has gone away issues with small default packet size, also fixes BLOB/TEXT exceeding 10% of log size issue - command: mysqld --max_allowed_packet=64M --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb-log-file-size=64M - - redis: - image: "redis:3.2-alpine" - ports: - - "6379:6379" - volumes: - - ${DOCKER_PROJECT_PATH}/redis-data:/data - - elastic: - image: "docker.elastic.co/elasticsearch/elasticsearch:5.3.3" - ports: - - "9200:9200" - environment: - - "http.host=0.0.0.0" - - "transport.host=127.0.0.1" - - "xpack.security.enabled=false" - - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - volumes: - - ${DOCKER_PROJECT_PATH}/elastic-data:/usr/share/elasticsearch/data - - # NOTE: This expects the solr module to have been downloaded _first_ - # before you run this container! Otherwise you _will_ get permission - # issues - solr: - image: solr:5.5 - ports: - - "8983:8983" - volumes: - - ${DOCKER_PROJECT_PATH}/solr-logs:/opt/solr/server/logs - - ${DOCKER_PROJECT_PATH}/solr-data:/opt/solr/server/solr/mycores/ - - ./solr/docker-configs/conf-5.5:/myconfig - entrypoint: - - docker-entrypoint.sh - - solr-precreate - - project - - /myconfig - - selenium: - image: symbiote/selenium-chrome:2.53.1 - depends_on: - - apache - environment: - WEB_NAME: apache - ports: - - "4444:4444" - volumes: - - /dev/shm:/dev/shm - - mailhog: - image: "mailhog/mailhog:v1.0.0" - ports: - - "1025:1025" - - "8025:8025" diff --git a/docker.env.sample b/docker.env.sample deleted file mode 100644 index c10f945..0000000 --- a/docker.env.sample +++ /dev/null @@ -1,7 +0,0 @@ -DOCKER_SHARED_PATH="~/docker-data" -DOCKER_CONTAINERS="apache php phpcli elastic adminer mysql selenium mailhog node" -DOCKER_PHP_VERSION="7.1" -DOCKER_MYSQL_VERSION="5.7" -DOCKER_NODE_VERSION="8.11" -DOCKER_YARN_PATH="themes/project" -DOCKER_CLISCRIPT_PATH="vendor/silverstripe/framework/cli-script.php" diff --git a/dr.sh b/dr.sh deleted file mode 100755 index 82320ac..0000000 --- a/dr.sh +++ /dev/null @@ -1,194 +0,0 @@ -#!/bin/sh - -#loads docker env vars into this process -DENV="./docker.env" -if [ -e $DENV ]; then - . $DENV -fi - -#loads user env vars into this process -ENV="./.env" -if [ -e $ENV ]; then - . $ENV -fi - -#handle env vars -if [ -z "$DOCKER_YARN_PATH" ]; then - DOCKER_YARN_PATH="themes/" -fi -if [ -z "$DOCKER_CLISCRIPT_PATH" ]; then - DOCKER_CLISCRIPT_PATH="framework/cli-script.php" -fi -if [ -z "$DOCKER_EXEC_IDS" ]; then - DOCKER_EXEC_IDS="`id -u`:`id -g`" -fi -if [ -z "$DOCKER_SHARED_PATH" ]; then - DOCKER_SHARED_PATH="~/docker-data" -fi - -CMD=$1 -CONTAINER="none" -ACTION="pass" -RUN_OPTS="-it" -CONTAINER_PREFIX=$(basename "$(pwd)") - -case "$CMD" -in - php) - CONTAINER="phpcli" - ACTION="php" - ;; - composer) - CONTAINER="phpcli" - ACTION="composer" - ;; - sspak) - CONTAINER="phpcli" - ACTION="sspak" - ;; - phing) - CONTAINER="phpcli" - ACTION="phing" - ;; - codecept) - CONTAINER="phpcli" - ACTION="vendor/bin/codecept" - ;; - task) - CONTAINER="phpcli" - ACTION="task" - ;; - fpm) - CONTAINER="php" - ACTION="bash" - ;; - fpmreload) - CONTAINER="php" - ACTION="reload" - ;; - mysql) - CONTAINER="mysql" - ACTION="mysql" - ;; - mysqlimport) - CONTAINER="mysql" - ACTION="mysql" - RUN_OPTS="-i" - ;; - sel) - CONTAINER="selenium" - ;; - node) - CONTAINER="node" - ACTION="bash" - ;; - yarn) - CONTAINER="node" - ACTION="yarn" - ;; - fixperms) - ACTION="fixperms" - ;; - help) - ACTION="help" - ;; -esac - -case "$2" -in - cli) - ACTION="cli" - ;; - exec) - ACTION="exec" - ;; -esac - -# help action -if [ $ACTION = "help" ]; then - echo "Usage: ./dr.sh [args]" - echo " ./dr.sh [args]" - echo "" - echo " : { apache | adminer | php | phpcli | mysql | node | sel }" - echo " : { cli | exec [args] | [args] }" - echo "" - echo "[args] : free-form - will be passed as-is to the container" - echo "" - echo "commands : { composer | sspak | phing | codecept | task | fpm" - echo " | fpmreload | mysqlimport | yarn | fixperms | help }" - echo "" - echo "See the readme for more information:" - echo " - https://github.com/symbiote/docker-project/blob/master/readme.md" - exit 1; -fi - -# fix perms action -if [ $ACTION = "fixperms" ]; then - #get sudo perms - sudo echo "" > /dev/null - # set perms for project directory - echo "Fixing $PWD" - sudo chown -Rf `id -u`:1000 . - # get shared root (expanding '~') - SHARED=$(eval ls -d -- "$DOCKER_SHARED_PATH") - # shared perms are OS specific (to work around silly mac) - NOT_MAC=$(echo `uname -a` | grep "Darwin") - if [ -z "$NOT_MAC" ]; then - PERMS="775" - else - PERMS="777" - fi - # set blanket perms everything in shared - sudo chown -Rf 1000:33 $SHARED - sudo chmod -Rf $PERMS $SHARED - # loop all dirs in shared - for DIR in $SHARED/*/; do - echo "Fixing $DIR" - # into dir - cd $DIR - # set perms for snowflake dirs - sudo chown -Rf 999:999 mysql-data - sudo chown -Rf 8983:8983 solr-data solr-logs - sudo chmod -Rf 777 logs solr-logs - sudo chmod -Rf 100:101 redis-data - # back out - cd .. - done - exit 1; -fi - -# check for container -if [ $CONTAINER = "none" ]; then - echo "Please provide a container or a command to be run. Use the 'dr.sh help' for more information." - exit 1; -fi - -# check whether we're running in CI on gitlab -if [ ! -z "${CI}" ]; then - # noop - RUN_OPTS="-i" - echo "Executing in CI, setting to no TTY" -fi - -CONTAINER_NAME=${CONTAINER_PREFIX}_${CONTAINER}_1 - -if [ $ACTION = "cli" ]; then - echo "Dropping to shell in $CONTAINER" - docker exec ${RUN_OPTS} -u ${DOCKER_EXEC_IDS} ${CONTAINER_NAME} /bin/bash -elif [ $ACTION = "exec" ]; then - echo "Execute bash wrapped command on $CONTAINER" && shift && shift - docker exec ${RUN_OPTS} -u ${DOCKER_EXEC_IDS} ${CONTAINER_NAME} bash -c "$@" -else - echo "Running command $ACTION in $CONTAINER" && shift - if [ "yarn" = $CMD ]; then - docker exec ${RUN_OPTS} -u ${DOCKER_EXEC_IDS} ${CONTAINER_NAME} bash -c "cd $DOCKER_YARN_PATH; yarn $*" - elif [ "task" = $CMD ]; then - docker exec ${RUN_OPTS} -u ${DOCKER_EXEC_IDS} ${CONTAINER_NAME} bash -c "php $DOCKER_CLISCRIPT_PATH dev/tasks/$@" - elif [ "mysqlimport" = $CMD ]; then - docker exec ${RUN_OPTS} -u ${DOCKER_EXEC_IDS} ${CONTAINER_NAME} ${ACTION} "$@" < /proc/$$/fd/0 - elif [ "fpmreload" = $CMD ]; then - docker exec ${RUN_OPTS} -u ${DOCKER_EXEC_IDS} ${CONTAINER_NAME} ${ACTION} bash -c kill -USR2 1 - else - docker exec ${RUN_OPTS} -u ${DOCKER_EXEC_IDS} ${CONTAINER_NAME} ${ACTION} "$@" - fi -fi diff --git a/du.sh b/du.sh deleted file mode 100755 index 3e1e3a7..0000000 --- a/du.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -PULL="FALSE" -CANCEL="FALSE" - -#handle cmd flags -while getopts 'skrpc' flag; do - case "${flag}" in - s) - echo "Stopping all containers:" - docker stop $(docker ps -q) - ;; - k) - echo "Killing all containers:" - docker kill $(docker ps -q) - ;; - r) - echo "Removing all containers:" - docker rm $(docker ps -aq --filter "status=exited") - ;; - p) - PULL="TRUE" - ;; - c) - CANCEL="TRUE" - ;; - esac -done - -#loads docker env vars into this process -DENV="./docker.env" -if [ -e $DENV ]; then - . $DENV -fi - -#loads user env vars into this process -ENV="./.env" -if [ -e $ENV ]; then - . $ENV -fi - -#set default for undefined vars -if [ -z "$DOCKER_CONTAINERS" ]; then - DOCKER_CONTAINERS="apache php phpcli adminer mysql node" - echo "Setting DOCKER_CONTAINERS to $DOCKER_CONTAINERS" -fi -if [ -z "$DOCKER_SHARED_PATH" ]; then - DOCKER_SHARED_PATH="~/docker-data" - echo "Setting DOCKER_SHARED_PATH to $DOCKER_SHARED_PATH" -fi -if [ -z "$DOCKER_PROJECT_PATH" ]; then - DOCKER_PROJECT_PATH=${DOCKER_SHARED_PATH}/$(basename $(pwd)) - echo "Setting DOCKER_PROJECT_PATH to $DOCKER_PROJECT_PATH" -fi -if [ -z "$DOCKER_PHP_VERSION" ]; then - DOCKER_PHP_VERSION="7.1" - echo "Setting DOCKER_PHP_VERSION to $DOCKER_PHP_VERSION" -fi -if [ -z "$DOCKER_MYSQL_VERSION" ]; then - DOCKER_MYSQL_VERSION="5.6" - echo "Setting DOCKER_MYSQL_VERSION to $DOCKER_MYSQL_VERSION" -fi -if [ -z "$DOCKER_NODE_VERSION" ]; then - DOCKER_NODE_VERSION="8.11" - echo "Setting DOCKER_NODE_VERSION to $DOCKER_NODE_VERSION" -fi -if [ -z "$DOCKER_CLISCRIPT_PATH" ]; then - DOCKER_CLISCRIPT_PATH="framework\cli-script.php" - echo "Setting DOCKER_CLISCRIPT_PATH to $DOCKER_CLISCRIPT_PATH" -fi -if [ -z "$DOCKER_SSH_VOLUME" ]; then - DOCKER_SSH_VOLUME="/dev/null:/dev/null" - echo "Setting DOCKER_SSH_VOLUME to null" -fi -if [ -z "$DOCKER_COMPOSER_TIMEOUT" ]; then - DOCKER_COMPOSER_TIMEOUT="300" - echo "Setting DOCKER_COMPOSER_TIMEOUT to 300" -fi - -#handle solr dir/perms -case "$CONTAINERS" in - *solr*) - if [ -d ${DOCKER_PROJECT_PATH}/solr-data ]; then - echo "Solr data dir found, if solr does _NOT_ start, please sudo chown 8983:8983 ${DOCKER_SHARED_PATH}/solr-data" - else - echo "Creating solr data-dir, sudo chown'd as the solr user (8983)" - mkdir ${DOCKER_PROJECT_PATH}/solr-data - sudo chown 8983:8983 ${DOCKER_PROJECT_PATH}/solr-data - fi - ;; -esac - -#export all docker vars -export DOCKER_SHARED_PATH="$DOCKER_SHARED_PATH" -export DOCKER_PROJECT_PATH="$DOCKER_PROJECT_PATH" -export DOCKER_CLISCRIPT_PATH="$DOCKER_CLISCRIPT_PATH" -export DOCKER_PHP_VERSION="$DOCKER_PHP_VERSION" -export DOCKER_MYSQL_VERSION="$DOCKER_MYSQL_VERSION" -export DOCKER_NODE_VERSION="$DOCKER_NODE_VERSION" -export DOCKER_PHP_COMMAND="$DOCKER_PHP_COMMAND" -export DOCKER_SSH_VOLUME="$DOCKER_SSH_VOLUME" -export DOCKER_COMPOSER_TIMEOUT="$DOCKER_COMPOSER_TIMEOUT" - -#docker pull -if [ "$PULL" = "TRUE" ]; then - echo "Pulling latest images:" - docker-compose pull ${DOCKER_CONTAINERS} -fi - -#run containers -if [ "$CANCEL" = "TRUE" ]; then - echo "Cancel starting containers" -elif [ -z "$DOCKER_ATTACHED_MODE" ]; then - echo "Starting detached containers:" - docker-compose up -d ${DOCKER_CONTAINERS} -else - echo "Starting attached containers:" - docker-compose up ${DOCKER_CONTAINERS} -fi diff --git a/gitlab-ci.sample.yml b/gitlab-ci.sample.yml deleted file mode 100644 index 7a72fb1..0000000 --- a/gitlab-ci.sample.yml +++ /dev/null @@ -1,211 +0,0 @@ -# .gitlab-ci.yml - -image: docker - -services: - - docker:dind - -stages: - - build - - distribute - -before_script: - - docker info - - docker --version - ## https://docs.gitlab.com/ee/ci/ssh_keys/ - - 'which ssh-agent || (apk update && apk add --no-cache openssh-client )' - - apk add gettext - - eval $(ssh-agent -s) - - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - - chmod +x dr.sh - - chmod +x du.sh - # Needed for envsubst support with yml config files - - export DOLLAR=$ - - export GIT_COMMIT=${CI_COMMIT_SHA} - - export GIT_BRANCH=${CI_COMMIT_REF_SLUG} - - 'export DOCKER_SHARED_PATH="$(dirname ${CI_PROJECT_DIR})/${CI_COMMIT_REF_SLUG}-shared"' - - export DOCKER_PROJECT_PATH=${DOCKER_SHARED_PATH}/$(basename $(pwd)) - # Clear data from previous build - - rm -rf ${DOCKER_PROJECT_PATH}/mysql-data/* && rm -rf ${DOCKER_PROJECT_PATH}/elastic-data/* && rm -rf ${DOCKER_PROJECT_PATH}/logs/* - # - # CI Config - # - Configure everything here - # - # @CONFIG - - export CI_CONFIG_SS_VERSION=4 - - export CI_CONFIG_CONTAINERS="apache php phpcli mysql selenium mailhog node elastic redis" - - export CI_CONFIG_SS_PROJECT_DIR="EDIT_THIS_PLEASE_eg_mysite" - - export CI_CONFIG_YARN_BUILD_ENABLED=1 - - export CI_CONFIG_YARN_BUILD_DIR="themes/EDIT_THIS_PLEASE" - - export CI_CONFIG_TYPESCRIPT_COMPILE_CHECK=1 - - export CI_CONFIG_TYPESCRIPT_FORMAT_CHECK=1 - - export CI_CONFIG_TARBALL_TARGET=AWS_BUCKET - # NOTE(Jake): 2018-08-21 - # - # Waiting on Marcus to get "sspak" to work then - # we can re-enable CI_CONFIG_CODECEPTION_ENABLED - # - - export CI_CONFIG_CODECEPTION_ENABLED=0 - - export CI_CONFIG_SOLR_ENABLED=0 - - export CI_CONFIG_ELASTIC_ENABLED=1 - - export CI_CONFIG_SEARCH_INDEX_ENABLED=1 - - export CI_CONFIG_PHPSTAN_ENABLED=0 - - apk add --no-cache libxml2-utils - - export CI_CONFIG_BUILD_PROJECT=$(xmllint --xpath 'string(/project/@name)' build.xml) - - # NOTE(Jake): 2018-08-06 - # - # Related PR: - # - https://github.com/symbiote/silverstripe-base/pull/29 - # - # This should be enabled if your projects "build.xml" file uses the - # following arguments when it does a `composer install`: - # - "composer install --prefer-dist --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile" - # - # If you set this to 1 and the --prefer-dist updates haven't been made to your build.xml file - # then `composer install` will use --prefer-source and be a lot slower. (as its cloning the entire repo, not the commit it needs) - # - # If you are unsure, the legacy/safe setting is to make this 0. - # - - export CI_CONFIG_BUILD_XML_DOES_COMPOSER_OPTIMIZE_AUTOLOADER=0 - # Config error checking - - if [ ! -d "$CI_CONFIG_SS_PROJECT_DIR" ]; then echo "Cannot find CI_CONFIG_SS_PROJECT_DIR folder \"${CI_CONFIG_SS_PROJECT_DIR}\", You need to configure $CI_CONFIG_SS_PROJECT_DIR in .gitlab-ci.yml. ie. mysite"; exit 100; fi - - if [[ $CI_CONFIG_YARN_BUILD_ENABLED == 1 ] && [ ! -d "$CI_CONFIG_YARN_BUILD_DIR" ]]; then echo "Cannot find CI_CONFIG_YARN_BUILD_DIR folder \"${CI_CONFIG_YARN_BUILD_DIR}\", ie. themes/simple"; exit 101; fi - # For SOLR based projects - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then mkdir -p ${DOCKER_SHARED_PATH}/solr-data; fi - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then chown -R 8983:8983 ${DOCKER_SHARED_PATH}/solr-data; fi - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then mkdir -p ${DOCKER_SHARED_PATH}/solr-logs; fi - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then chown -R 8983:8983 ${DOCKER_SHARED_PATH}/solr-logs; fi - # For Elastic projects - - if [[ $CI_CONFIG_ELASTIC_ENABLED == 1 ]]; then mkdir -p ${DOCKER_SHARED_PATH}/elastic-data/nodes; chown -R 1000:1000 ${DOCKER_SHARED_PATH}/elastic-data/; fi - - # Cleanup logging - - mkdir -p ${DOCKER_SHARED_PATH}/logs - - chown -R 1000:1000 ${DOCKER_SHARED_PATH}/logs - - rm -f mysite/*.log - - apk add --no-cache py-pip - # Setup directories - - mkdir -p silverstripe-cache/log - - if [[ $CI_CONFIG_CODECEPTION_ENABLED == 1 ]]; then mkdir silverstripe-cache/codecept_output; fi - - chown -R 1000:1000 silverstripe-cache - -Build project: - stage: build - artifacts: - when: always - name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" - paths: - - build/*deploy*.tar.gz - - silverstripe-cache/log/ - # we copy the raw codeception dir because that's where failed tests end up - # @CONFIG - - EDIT_THIS_PLEASE/codeception/tests/_output/ - expire_in: 1 week - cache: - key: "$CI_COMMIT_REF_SLUG" - paths: - - vendor/ - # @CONFIG - - EDIT_THIS_PLEASE/node_modules/ - script: - - pip install docker-compose==1.22.0 - - ./du.sh - #- docker-compose up -d ${CI_CONFIG_CONTAINERS} - - ./dr.sh php exec "mkdir ~/.ssh; echo '$SSH_KNOWN_HOSTS' > ~/.ssh/known_hosts" - - ./dr.sh php exec "echo '$SSH_PRIVATE_KEY' > ~/.ssh/id_rsa; chmod 600 ~/.ssh/id_rsa" - - ./dr.sh php exec 'ssh-keyscan -t RSA github.com >> ~/.ssh/known_hosts' - - if [[ $CI_CONFIG_BUILD_XML_DOES_COMPOSER_OPTIMIZE_AUTOLOADER == 0 ]]; then ./dr.sh phing -Dcomposer_dist=True composer-install; fi - - if [[ $CI_CONFIG_BUILD_XML_DOES_COMPOSER_OPTIMIZE_AUTOLOADER == 1 ]]; then ./dr.sh phing -Dni_build=True composer-install; fi - - if [[ $CI_CONFIG_SS_VERSION == 4 ]]; then ./dr.sh composer vendor-expose; fi - # Start Solr _after_ the configs have been pulled in by Composer - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then docker-compose up -d solr; fi - - if [[ $CI_CONFIG_YARN_BUILD_ENABLED == 1 ]]; then ./dr.sh yarn install; fi - - if [[ $CI_CONFIG_YARN_BUILD_ENABLED == 1 ]]; then ./dr.sh yarn build; fi - # NOTE(Jake): 2018-08-21 - # To make sure this works as expected, ensure that no "scripts" are defined in themes/**/pacakge.json that are called "tsc" or "tsfmt". - # I had to rename a script for PTV-MPW from "tsc" to "tsc-watch". - - if [ "$CI_CONFIG_YARN_BUILD_ENABLED" -eq 1 ] && [ "$CI_CONFIG_TYPESCRIPT_COMPILE_CHECK" -eq 1 ]; then ./dr.sh yarn "run tsc --noEmit"; fi - - if [ "$CI_CONFIG_YARN_BUILD_ENABLED" -eq 1 ] && [ "$CI_CONFIG_TYPESCRIPT_FORMAT_CHECK" -eq 1 ]; then ./dr.sh yarn "run tsfmt --verify"; fi - # Run phing build - - ./dr.sh phing -Ddb.host="$(basename $(pwd))_mysql_1.$(basename $(pwd))_default" -Ddb.type="MySQLPDODatabase" -Ddb.user="root" -Ddb.pass="password" -Ddb.name="$(basename $(pwd))" -Dtesting.db.name="$(basename $(pwd))" build - - if [[ $CI_CONFIG_SS_VERSION == 3 ]]; then echo "increase_memory_limit_to('384M');" >> mysite/local.conf.php; fi - # Config updates steps if needed - - if [[ -f mysite/build/default_configs.sh ]]; then sh mysite/build/default_configs.sh; fi - - # We kill cache regardless because the build below is done with all the test classes - # too - - rm -rf silverstripe-cache/* - - # PHPStan - Static analysis of PHP files - # - # NOTE(Jake): 2018-08-23 - # This was getting PHPStan errors that didn't line up with local/Jenkins, the solution - # was to clear/flush the silverstripe-cache before executing it. - # - - if [[ $CI_CONFIG_PHPSTAN_ENABLED == 1 ]]; then ./dr.sh phing phpstan; fi - - # NOTE(Jake): 2018-08-06 - # - # Legacy SilverStripe 3 needs to make "sake" executable as it's committed direct to the repo. - # In SilverStripe 4, sake is installed via composer and it's permissions are automatically corrected by Composer, AFAIK. - # - - if [[ $CI_CONFIG_SS_VERSION == 3 ]]; then chmod +x "framework/sake"; fi - - if [[ $CI_CONFIG_SS_VERSION == 3 ]]; then ./dr.sh php exec "framework/sake dev/tests/module/${CI_CONFIG_SS_PROJECT_DIR} flush=0 build=0 reporter=PHPUnit_Util_Log_JUnit"; fi - - if [[ $CI_CONFIG_SS_VERSION == 4 ]]; then ./dr.sh php vendor/bin/phpunit --log-junit test-assist/logs/testsuite.xml --testdox-html test-assist/logs/testsuite.html; fi - - # Clear cache before next steps - - rm -rf silverstripe-cache/* - - # SSPak'd projects - - if [[ -f mysite/build/site.sspak ]]; then ./dr.sh sspak load ./mysite/build/site.sspak; fi - - # Another SOLR specific config - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then echo "SolrSearchService::\$solr_details = array('host' => 'solr','port' => '8983','context' => '/solr/project','data_dir' => null);" >> mysite/local.conf.php; fi - - # SilverStripe - # - Run dev/build?flush=all, this will update the DB tables based on PHP code and generate the `silverstripe-cache` manifest. - - if [[ $CI_CONFIG_SS_VERSION == 3 ]]; then ./dr.sh php exec "framework/sake dev/build flush=1"; fi - - if [[ $CI_CONFIG_SS_VERSION == 4 ]]; then ./dr.sh php exec "vendor/bin/sake dev/build flush=1"; fi - - # Another SOLR or ELASTIC step; expects your project to have one - # defined specifically to index just the things for testing - - if [ "$CI_CONFIG_SS_VERSION" -eq 3 ] && [ "$CI_CONFIG_SEARCH_INDEX_ENABLED" -eq 1 ]; then ./dr.sh php exec "framework/sake dev/tasks/IndexForTestTask"; fi - - if [ "$CI_CONFIG_SS_VERSION" -eq 4 ] && [ "$CI_CONFIG_SEARCH_INDEX_ENABLED" -eq 1 ]; then ./dr.sh php exec "vendor/bin/sake dev/tasks/IndexForTestTask"; fi - - # Run Codeception - - if [[ $CI_CONFIG_CODECEPTION_ENABLED == 1 ]]; then ./dr.sh codecept --debug run --xml --html; fi - - # More SOLR specific steps; prune solr package as it's not needed for deployments - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then rm -rf solr/solr; fi - # this may be needed at the end of the line below?; mv build/*deploy*.tar.gz /tmp/build - - # this may be needed at the end of the line below?; mv build/*deploy*.tar.gz /tmp/build - - ./dr.sh php exec "mkdir -p ~/.ssh; echo '$SSH_PRIVATE_KEY' > ~/.ssh/id_rsa; chmod 600 ~/.ssh/id_rsa; phing package" - -Distribute Packages: - stage: distribute - dependencies: - - Build project - script: - - pip install awscli - - export AWS_DEFAULT_REGION="ap-southeast-2" - - if [[ $CI_CONFIG_TARBALL_TARGET != "AWS_BUCKET" ]]; then aws s3 cp build/*.tar.gz s3://${CI_CONFIG_TARBALL_TARGET}/${CI_CONFIG_BUILD_PROJECT}/ ; fi - - if [[ $CI_CONFIG_TARBALL_TARGET != "AWS_BUCKET" ]]; then aws s3 rm s3://${CI_CONFIG_TARBALL_TARGET}/ --exclude "*" --include '${PROJECT_NAME}/${CI_CONFIG_BUILD_PROJECT}-*.${CI_COMMIT_REF_SLUG}.*' --recursive ; fi - - if [[ $CI_CONFIG_TARBALL_TARGET != "AWS_BUCKET" ]]; then aws s3 cp build/*.tar.gz s3://${CI_CONFIG_TARBALL_TARGET}/${CI_CONFIG_BUILD_PROJECT}/ ; fi - -after_script: - - export DOCKER_SHARED_PATH="$(dirname ${CI_PROJECT_DIR})/${CI_COMMIT_REF_SLUG}-shared" - - mkdir -p silverstripe-cache/log - # PHPUnit - If all files exist in these test-assist/logs, move them to "silverstripe-cache/log" - - find test-assist/logs/ -name \*.* -exec cp {} silverstripe-cache/log \; - # If *.log files exist in these directories, move them to "silverstripe-cache/log" - - find $DOCKER_SHARED_PATH/logs/ -name \*.log -exec cp {} silverstripe-cache/log \; - - find mysite/ -name \*.log -exec cp {} silverstripe-cache/log \; - - docker logs $(basename $(pwd))_php_1 > silverstripe-cache/log/phpfpm.log - # More SOLR settings - - if [[ $CI_CONFIG_SOLR_ENABLED == 1 ]]; then docker logs $(basename $(pwd))_solr_1 > silverstripe-cache/log/solr.log; fi - - ./dr.sh php exec "[ -e ~/.ssh/id_rsa ] && rm ~/.ssh/id_rsa"