diff --git a/gitlab-ci.yml b/gitlab-ci.yml index 946bf0a308a70b149f651c5a50dbac65084944b7..7ffc945d5fb18c271dacfd15a96c3d91ab45337d 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -2,59 +2,108 @@ variables: PHP_ERROR_REPORTING: E_ALL COMPOSER_ALLOW_SUPERUSER: 1 GIT_STRATEGY: fetch - PRODUCTION_SHOPIFY_API_KEY: "" - PRODUCTION_DEPLOY_HOST: s125.cyber-folks.pl - PRODUCTION_DEPLOY_PORT: 222 - PRODUCTION_DEPLOY_USER: wlgmnfabmq - PRODUCTION_DEPLOY_DIR: "" - STAGE_SHOPIFY_API_KEY: "" - STAGE_DEPLOY_HOST: s125.cyber-folks.pl - STAGE_DEPLOY_PORT: 222 - STAGE_DEPLOY_USER: wlgmnfabmq - STAGE_DEPLOY_DIR: "" RUN_AFTER_DEPLOY: "pwd" DEPLOY_AFTER_SCRIPT: "" PREDATORS_GROUP_ID: 788 stages: - - build - tests + - build - deploy - - purge_cache -.template: &prepare-assets - tags: - - vendor +.template: &build-rules + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_REF_NAME == "devel"' + when: always + variables: + APP_ENV: "staging" + SHOPIFY_APP_CLIENT_ID: $STAGING_SHOPIFY_APP_CLIENT_ID + MANTLE_PIXEL_TOKEN: $STAGING_MANTLE_PIXEL_TOKEN + - if: '$CI_COMMIT_TAG' + when: always + variables: + APP_ENV: "production" + SHOPIFY_APP_CLIENT_ID: $PRODUCTION_SHOPIFY_APP_CLIENT_ID + MANTLE_PIXEL_TOKEN: $PRODUCTION_MANTLE_PIXEL_TOKEN + +.template: &deploy-rules + variables: + RELEASE_VERSION: $CI_JOB_ID + SHOPIFY_APP_CONFIG: "staging" + SHOPIFY_CLI_PARTNERS_TOKEN: $STAGING_SHOPIFY_CLI_PARTNERS_TOKEN + DEPLOY_DIR: $STAGING_DEPLOY_DIR + DEPLOY_USER: $STAGING_DEPLOY_USER + DEPLOY_PORT: $STAGING_DEPLOY_PORT + DEPLOY_HOST: $STAGING_DEPLOY_HOST + before_script: + - if [ "$RELEASE_VERSION" == "" ]; then echo "RELEASE_VERSION is empty" ; exit 1; fi + - if [ "$SHOPIFY_APP_CONFIG" == "" ]; then echo "SHOPIFY_APP_CONFIG is empty" ; exit 1; fi + - if [ "$SHOPIFY_CLI_PARTNERS_TOKEN" == "" ]; then echo "SHOPIFY_CLI_PARTNERS_TOKEN is empty" ; exit 1; fi + - if [ "$DEPLOY_DIR" == "" ]; then echo "DEPLOY_DIR is empty" ; exit 1; fi + - if [ "$DEPLOY_USER" == "" ]; then echo "DEPLOY_USER is empty" ; exit 1; fi + - if [ "$DEPLOY_PORT" == "" ]; then echo "DEPLOY_PORT is empty" ; exit 1; fi + - if [ "$DEPLOY_HOST" == "" ]; then echo "DEPLOY_HOST is empty" ; exit 1; fi + - echo $RELEASE_VERSION; + - echo $SHOPIFY_APP_CONFIG; + - echo $DEPLOY_DIR; + rules: + - if: '$CI_COMMIT_REF_NAME == "devel"' # Automatyczne na branchu `devel` + when: always + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' # Manualne w kontekście Merge Request + when: manual + - if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_TAG == ""' # Manualne na innych branchach (bez `master` i tagów) + when: manual + - if: '$CI_COMMIT_TAG' # Automatyczne na tagu (produkcja) + when: always + variables: + RELEASE_VERSION: $CI_COMMIT_TAG + SHOPIFY_APP_CONFIG: "production" + SHOPIFY_CLI_PARTNERS_TOKEN: $PRODUCTION_SHOPIFY_CLI_PARTNERS_TOKEN + DEPLOY_DIR: $PRODUCTION_DEPLOY_DIR + DEPLOY_USER: $PRODUCTION_DEPLOY_USER + DEPLOY_PORT: $PRODUCTION_DEPLOY_PORT + DEPLOY_HOST: $PRODUCTION_DEPLOY_HOST + +build web frontend: + <<: *build-rules + image: node:latest artifacts: - name: "assets" paths: - web/frontend/dist - image: node:latest stage: build - interruptible: true - script: - - if [ "$SHOPIFY_API_KEY" == "" ]; then echo "SHOPIFY_API_KEY is empty" ; exit 1; fi + before_script: + - if [ "$APP_ENV" == "" ]; then echo "APP_ENV is empty" ; exit 1; fi + - if [ "$SHOPIFY_APP_CLIENT_ID" == "" ]; then echo "SHOPIFY_APP_CLIENT_ID is empty" ; exit 1; fi + - echo $APP_ENV; + - node -v - cd web/frontend - npm config set -- //${CI_SERVER_HOST}/:_authToken=${PREDATORS_DEPLOY_TOKEN} - npm config set @octolize:registry=https://${CI_SERVER_HOST}/api/v4/packages/npm/ - - npm config list - - npm ci + script: + - npm ci --prefer-offline --no-audit - npm run build -.template: &deploy-template +build web backend: + <<: *build-rules + image: composer:latest + artifacts: + paths: + - web/backend/vendor + stage: build + script: + - php -v + - cd web/backend + - composer config gitlab-token.gitlab.wpdesk.dev gitlab-ci-token ${CI_JOB_TOKEN} + - composer install --optimize-autoloader --no-dev --no-scripts + +deploy web: + <<: *deploy-rules image: wpdesknet/amazon-svn-deploy stage: deploy - tags: - - vendor - before_script: + script: - echo "$DEMO_FS_SSH_KEY" | tr -d '\r' > ~/.ssh/id_rsa_demo_fs - chmod 0600 ~/.ssh/id_rsa_demo_fs - echo "$SSH_KNOWN_HOSTS" | tr -d '\r' > ~/.ssh/known_hosts - script: - - if [ "$DEPLOY_HOST" ] == "" ]; then echo "DEPLOY_HOST is empty" ; exit 1; fi - - if [ "$DEPLOY_USER" ] == "" ]; then echo "DEPLOY_USER is empty" ; exit 1; fi - - if [ "$DEPLOY_DIR" ] == "" ]; then echo "DEPLOY_DIR is empty" ; exit 1; fi - - if [ "$DEPLOY_PORT" ] == "" ]; then echo "DEPLOY_PORT is empty" ; exit 1; fi - ls -al - ssh-keyscan -H -p $DEPLOY_PORT $DEPLOY_HOST >> ~/.ssh/known_hosts - export RSYNC_RSH="ssh -p $DEPLOY_PORT -v -i ~/.ssh/id_rsa_demo_fs" @@ -63,80 +112,14 @@ stages: - ssh -p $DEPLOY_PORT -i ~/.ssh/id_rsa_demo_fs $DEPLOY_USER@$DEPLOY_HOST "cd $DEPLOY_DIR && php bin/console doctrine:migrations:migrate --no-interaction && php bin/console cache:clear && $RUN_AFTER_DEPLOY" after_script: - $DEPLOY_AFTER_SCRIPT - -.template: &deploy-to-stage - <<: *deploy-template - variables: - DEPLOY_HOST: $STAGE_DEPLOY_HOST - DEPLOY_PORT: $STAGE_DEPLOY_PORT - DEPLOY_USER: $STAGE_DEPLOY_USER - DEPLOY_DIR: $STAGE_DEPLOY_DIR dependencies: - - composer install - - prepare assets stage + - build web backend + - build web frontend -.template: &deploy-to-production - <<: *deploy-template - variables: - DEPLOY_HOST: $PRODUCTION_DEPLOY_HOST - DEPLOY_PORT: $PRODUCTION_DEPLOY_PORT - DEPLOY_USER: $PRODUCTION_DEPLOY_USER - DEPLOY_DIR: $PRODUCTION_DEPLOY_DIR - dependencies: - - composer install - - prepare assets production - -composer install: - artifacts: - name: "vendor" - paths: - - web/backend/vendor - image: composer:latest - tags: - - vendor - stage: build - interruptible: true +deploy app: + <<: *deploy-rules + image: node:latest + stage: deploy script: - - php -v - - cd web/backend - - composer config gitlab-token.gitlab.wpdesk.dev gitlab-ci-token ${CI_JOB_TOKEN} - - composer install --optimize-autoloader --no-dev --no-scripts - -prepare assets stage: - <<: *prepare-assets - except: - - master - - tags - variables: - SHOPIFY_API_KEY: $STAGE_SHOPIFY_API_KEY - MANTLE_APP_TOKEN: $STAGE_MANTLE_APP_TOKEN - -prepare assets production: - <<: *prepare-assets - only: - - master - - tags - variables: - SHOPIFY_API_KEY: $PRODUCTION_SHOPIFY_API_KEY - MANTLE_APP_TOKEN: $PRODUCTION_MANTLE_APP_TOKEN - -deploy to stage: - <<: *deploy-to-stage - only: - - devel - -deploy to stage manual: - <<: *deploy-to-stage - when: manual - -deploy to production: - <<: *deploy-to-production - only: - - tags - -deploy to production manual: - <<: *deploy-to-production - only: - - master - - tags - when: manual + - npm ci + - npm run deploy -- --force --version=$RELEASE_VERSION --config=$SHOPIFY_APP_CONFIG \ No newline at end of file