diff --git a/.circleci/config.yml b/.circleci/config.yml index 7960506d9..4defc3b87 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,112 +1,77 @@ -# This configuration was automatically generated from a CircleCI 1.0 config. -# It should include any build commands you had along with commands that CircleCI -# inferred from your project structure. We strongly recommend you read all the -# comments in this file to understand the structure of CircleCI 2.0, as the idiom -# for configuration has changed substantially in 2.0 to allow arbitrary jobs rather -# than the prescribed lifecycle of 1.0. In general, we recommend using this generated -# configuration as a reference rather than using it in production, though in most -# cases it should duplicate the execution of your original 1.0 config. +# This file was generated by the excavator check 'excavator/manage-circleci' as specified in .circleci/template.sh. +# To request a modification to the general template, file an issue on Excavator. +# To manually manage the CircleCI configuration for this project, remove the .circleci/template.sh file. + version: 2 jobs: build: - working_directory: ~/palantir/tritium - parallelism: 1 - shell: /bin/bash --login - # CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did. - # If any of these refer to each other, rewrite them so that they don't or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables . - environment: - CIRCLE_ARTIFACTS: /tmp/circleci-artifacts - CIRCLE_TEST_REPORTS: /tmp/circleci-test-results - TERM: dumb - _JAVA_OPTIONS: -Xmx512M -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:-TraceClassUnloading -Xloggc:build-%t-%p.gc.log - # In CircleCI 1.0 we used a pre-configured image with a large number of languages and other packages. - # In CircleCI 2.0 you can now specify your own image, or use one of our pre-configured images. - # The following configuration line tells CircleCI to use the specified docker image as the runtime environment for you job. - # We have selected a pre-built image that mirrors the build environment we use on - # the 1.0 platform, but we recommend you choose an image more tailored to the needs - # of each job. For more information on choosing an image (or alternatively using a - # VM instead of a container) see https://circleci.com/docs/2.0/executor-types/ - # To see the list of pre-built images that CircleCI provides for most common languages see - # https://circleci.com/docs/2.0/circleci-images/ docker: - - image: circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37 - command: /sbin/init + - image: circleci/openjdk:8u171-jdk-node-browsers + resource_class: xlarge + environment: + GRADLE_OPTS: -Dorg.gradle.console=plain -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false + steps: - # Machine Setup - # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each - # The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out. - - checkout - # Prepare for artifact and test results collection equivalent to how it was done on 1.0. - # In many cases you can simplify this from what is generated here. - # 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/' - - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS - # This is based on your 1.0 configuration file or project settings - - run: - working_directory: ~/palantir/tritium - command: mkdir -p ~/.gradle && echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties - # This is based on your 1.0 configuration file or project settings - - run: - working_directory: ~/palantir/tritium - command: sudo update-alternatives --set java /usr/lib/jvm/jdk1.8.0/bin/java; sudo update-alternatives --set javac /usr/lib/jvm/jdk1.8.0/bin/javac; echo -e "export JAVA_HOME=/usr/lib/jvm/jdk1.8.0" >> $BASH_ENV - - run: - working_directory: ~/palantir/tritium - command: echo -e "export TERM=dumb\nexport _JAVA_OPTIONS=-Xmx512M -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:-TraceClassUnloading -Xloggc:build-%t-%p.gc.log" >> $BASH_ENV - # Checkout - # This would typically go in either a build or a build-and-test job when using workflows - # This is based on your 1.0 configuration file or project settings - - run: git tag --list | xargs git tag --delete - - run: git fetch --tags - - run: git describe --tags --always - # Dependencies - # This would typically go in either a build or a build-and-test job when using workflows - # Restore the dependency cache - - restore_cache: - keys: - # This branch if available - - v1-dep-{{ .Branch }}- - # Default branch if not - - v1-dep-develop- - # Any branch if there are none on the default branch - this should be unnecessary if you have your default branch configured correctly - - v1-dep- - # This is based on your 1.0 configuration file or project settings - - run: ./gradlew assemble compileTestJava --console=plain --stacktrace - # Save dependency cache - - save_cache: - key: v1-dep-{{ .Branch }}-{{ epoch }} - paths: - # This is a broad list of cache paths to include many possible development environments - # You can probably delete some of these entries - - vendor/bundle - - ~/virtualenvs - - ~/.m2 - - ~/.ivy2 - - ~/.bundle - - ~/.go_workspace - - ~/.gradle - - ~/.cache/bower - # Test - # This would typically be a build job when using workflows, possibly combined with build - # This is based on your 1.0 configuration file or project settings - - run: ./gradlew check --parallel --continue - # This is based on your 1.0 configuration file or project settings - - run: mkdir -p $CIRCLE_TEST_REPORTS/junit/ - - run: find . -type f -regex ".*/build/test-results/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \; - - run: mkdir -p $CIRCLE_TEST_REPORTS/reports/ - - run: find . -type f -regex ".*/build/reports/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/reports/ \; - - run: mkdir -p $CIRCLE_ARTIFACTS/heapdumps - - run: find . -type f -name "*.hprof" -o -name "*.gc.log" -exec cp {} $CIRCLE_ARTIFACTS/heapdumps \; - # Deployment - # Your existing circle.yml file contains deployment steps. - # The config translation tool does not support translating deployment steps - # since deployment in CircleCI 2.0 are better handled through workflows. - # See the documentation for more information https://circleci.com/docs/2.0/workflows/ - # Teardown - # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each - # Save test results - - store_test_results: - path: /tmp/circleci-test-results - # Save artifacts - - store_artifacts: - path: /tmp/circleci-artifacts - - store_artifacts: - path: /tmp/circleci-test-results + - checkout + - restore_cache: + key: gradle-wrapper-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }} + - restore_cache: + key: gradle-cache-{{ checksum "versions.props" }}-{{ checksum "build.gradle" }} + + - run: ./gradlew --parallel resolveConfigurations + + - save_cache: + key: gradle-wrapper-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }} + paths: + - ~/.gradle/wrapper + - save_cache: + key: gradle-cache-{{ checksum "versions.props" }}-{{ checksum "build.gradle" }} + paths: + - ~/.gradle/caches + + - run: ./gradlew --parallel --continue build + + - run: + command: | + mkdir -p ~/junit + find . -type f -regex ".*/build/.*TEST.*xml" -exec cp --parents {} ~/junit/ \; + when: always + - store_test_results: + path: ~/junit + - store_artifacts: + path: ~/junit + + - run: + command: | + mkdir -p ~/reports + find . -type f -regex ".*/build/reports/.*" -exec cp --parents {} ~/reports/ \; + when: always + - store_test_results: + path: ~/reports + - store_artifacts: + path: ~/reports + + - deploy: + command: | + # publishing snapshots to bintray does not work, so we only publish from tag builds (not develop) + if [[ "${CIRCLE_TAG}" =~ [0-9]+(\.[0-9]+)+(-[a-zA-Z]+[0-9]*)* ]]; then + ./gradlew --stacktrace --continue publish + else + ./gradlew --parallel --continue publishToMavenLocal + mkdir -p ~/poms + find . -name 'pom-default.xml' -exec cp --parents {} ~/poms \; + fi + + - store_artifacts: + path: ~/poms + +workflows: + version: 2 + build: + jobs: + - build: + filters: + # CircleCI2 will ignore tags without this. https://circleci.com/docs/2.0/workflows/#git-tag-job-execution + tags: + only: /.*/ +