stages: - build - lint - deploy variables: CONTAINERS_NAME: sst_postamates IMAGE_NAME: $CI_REGISTRY_IMAGE default: tags: - deploy-remote .use_cached_requirements: &use_cached_requirements variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" cache: key: $CI_COMMIT_REF_SLUG paths: - .cache/pip policy: pull-push build-job: stage: build before_script: - sudo docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY - ls script: - sudo docker pull $IMAGE_NAME:latest || true - sudo docker build --cache-from $IMAGE_NAME:latest --tag $IMAGE_NAME:$CI_COMMIT_SHORT_SHA --tag $IMAGE_NAME:latest . - sudo docker push $IMAGE_NAME:$CI_COMMIT_SHORT_SHA - sudo docker push $IMAGE_NAME:latest rules: - if: $CI_COMMIT_BRANCH == 'sst_main' .deploy: &deploy-common stage: deploy before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan $REMOTE_HOST >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - ssh $REMOTE_USER docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY script: - cd $CI_PROJECT_DIR - ssh $REMOTE_USER docker pull $IMAGE_NAME:$CI_COMMIT_SHORT_SHA - DOCKER_HOST="ssh://$REMOTE_USER" docker-compose -f $COMPOSE up -d - DOCKER_HOST="ssh://$REMOTE_USER" docker-compose restart martin deploy-test-job: <<: *deploy-common variables: REMOTE_HOST: $REMOTE_HOST_TEST REMOTE_USER: $REMOTE_USER_TEST COMPOSE: docker-compose.test.yml rules: - if: $CI_COMMIT_BRANCH == 'sst_main' pylint: <<: *use_cached_requirements stage: lint before_script: - pip install flake8-codeclimate script: - set -x - FLIST=$(git --no-pager diff --diff-filter=d --name-only $(git merge-base --fork-point origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME) $CI_COMMIT_SHA | egrep ".py$" | grep -v ".docker/"|| true) - > if [ ! -z "$FLIST" ]; then mkdir -p build/reports; flake8 --format junit-xml $FLIST > build/reports/flake8-junit.xml || flake8 $FLIST; else echo "No files to lint" true; fi only: refs: - merge_requests artifacts: reports: junit: ./build/reports/flake8-junit.xml expire_in: 7 days allow_failure: false notify success: stage: .post script: curl -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=-1001855628208&reply_to_message_id=98&parse_mode=markdown&text=*[$CI_PROJECT_NAME]* updated with [MR $CI_MERGE_REQUEST_TITLE]($CI_MERGE_REQUEST_PROJECT_URL/-/merge_requests/$CI_MERGE_REQUEST_IID) by $GITLAB_USER_NAME" rules: - if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME !~ /^silent/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'sst_main' when: on_success notify failure: stage: .post script: curl -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=-1001855628208&reply_to_message_id=98&text=*[$CI_PROJECT_NAME]* Oops failed pipeline in [MR $CI_MERGE_REQUEST_TITLE]($CI_MERGE_REQUEST_PROJECT_URL/-/merge_requests/$CI_MERGE_REQUEST_IID) by $GITLAB_USER_NAME" rules: - if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME !~ /^silent/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'sst_main' when: on_failure