version: 2.0 jobs: build-deploy: # build for the master branch machine: true working_directory: ~/addons-server steps: - checkout - run: > printf '{"commit":"%s","version":"%s","source":"https://github.com/%s/%s","build":"%s"}\n' "$CIRCLE_SHA1" "$CIRCLE_TAG" "$CIRCLE_PROJECT_USERNAME" "$CIRCLE_PROJECT_REPONAME" "$CIRCLE_BUILD_URL" > version.json - run: name: Build docker image and push to repo command: | docker version docker build -t app:build -f Dockerfile.deploy . docker tag app:build ${DOCKERHUB_REPO}:latest docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS docker push ${DOCKERHUB_REPO}:latest build-release: # build for releases (tags) machine: true working_directory: ~/addons-server steps: - checkout - run: > printf '{"commit":"%s","version":"%s","source":"https://github.com/%s/%s","build":"%s"}\n' "$CIRCLE_SHA1" "$CIRCLE_TAG" "$CIRCLE_PROJECT_USERNAME" "$CIRCLE_PROJECT_REPONAME" "$CIRCLE_BUILD_URL" > version.json - run: name: Build docker image and push to repo command: | docker version docker build -t app:build -f Dockerfile.deploy . docker tag app:build ${DOCKERHUB_REPO}:${CIRCLE_TAG} docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS docker push ${DOCKERHUB_REPO}:${CIRCLE_TAG} integration_test: working_directory: ~/addons-server machine: true steps: - run: name: Checkout git repository command: | if [ -n "$CIRCLE_PR_NUMBER" ] then git clone --depth 1 https://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git ~/addons-server git fetch origin "+refs/pull/$CIRCLE_PR_NUMBER/merge:" git checkout -f FETCH_HEAD else git clone --depth 1 --branch $CIRCLE_BRANCH https://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git ~/addons-server if [ -n "$CIRCLE_TAG" ] then git fetch --force origin "refs/tags/${CIRCLE_TAG}" fi if [ -n "$CIRCLE_TAG" ] then git checkout --force "$CIRCLE_TAG" else git checkout --force "$CIRCLE_SHA1" fi fi - restore_cache: keys: - uitest-cache-{{ checksum "requirements/docs.txt" }} - uitest-cache-{{ checksum "requirements/prod.txt" }} - uitest-cache-{{ checksum "requirements/dev.txt" }} - uitest-cache-{{ checksum "requirements/uitests.txt" }} - uitest-cache- - run: name: Install Docker Compose command: | # using curl to install for better ci -> local compatibility set -x curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose chmod +x ~/docker-compose sudo mv ~/docker-compose /usr/local/bin/docker-compose docker-compose --version - run: name: Start container, verify it's running and start tests command: | set -x sudo sysctl -w vm.max_map_count=262144 docker-compose pull --quiet docker-compose up -d sleep 20 docker-compose ps scripts/ui-test-hostname-setup.sh # Make sure dependencies get updated in worker and web container docker-compose exec worker make -f Makefile-docker update_deps docker-compose restart worker docker-compose exec web make -f Makefile-docker update_deps docker-compose restart web # chown to change permissions of olympia.egg* and all folders/file # This is done because cirlceci has permissions do not allow the user `circleci` to remove or add files create by the root, even if it is part of the root group. sudo chown -R circleci:circleci . # Delete any existing uitest users within restmail. TEMP FIX: https://github.com/mozilla/addons-server/issues/8980 wget --method=DELETE http://restmail.net/mail/uitest # Start Test in Firefox docker container docker-compose exec --user circleci selenium-firefox tox -e ui-tests - store_artifacts: path: ui-test.html - save_cache: key: uitest-cache-{{ checksum "requirements/docs.txt" }} paths: - .tox - save_cache: key: uitest-cache-{{ checksum "requirements/prod.txt" }} paths: - .tox - save_cache: key: uitest-cache-{{ checksum "requirements/dev.txt" }} paths: - .tox - save_cache: key: uitest-cache-{{ checksum "requirements/uitests.txt" }} paths: - .tox - save_cache: key: uitest-cache- paths: - .tox workflows: version: 2 build_test_deploy_release: jobs: - build-deploy: filters: branches: only: master - build-release: filters: tags: only: /.*/ branches: ignore: /.*/ # Temporarily disable integration tests because they have been failing # for a long time and are hard to fix. # Since we kinda rely on a proper CI-status and ignoring CircleCI # failures is bad we disable them temporarily until # we figure out a better solution. # https://github.com/mozilla/addons-server/issues/9062 # - integration_test