diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..734f952282b6667b5fc0f68334bd392a69cb5fb5
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,107 @@
+image: ${DEVOPS_REGISTRY}usgs/centos:latest
+
+stages:
+  - test
+  - publish
+
+variables:
+  JAVA_IMAGE: ${DEVOPS_REGISTRY}usgs/java:11-jdk
+  #CPP_IMAGE: ${DEVOPS_REGISTRY}usgs/python:3.9-obspy # gets us ubuntu
+
+  # environment variables
+  APP_NAME: hazdev-broker
+  UPSTREAM_PATH: ghsc/neic/utilities/hazdev-broker
+
+## --------------------------------------------------
+# Templates
+## --------------------------------------------------
+
+# rules to define which branches should trigger actions
+.dev-env: &dev-env
+  if: $CI_PROJECT_PATH != $UPSTREAM_PATH
+  variables:
+    ENVIRONMENT: dev
+
+.publish-env: &publish-env
+  if: $CI_PROJECT_PATH == $UPSTREAM_PATH
+  variables:
+    ENVIRONMENT: publish
+
+## --------------------------------------------------
+# Test Stage
+## --------------------------------------------------
+
+# Java
+Java Test:
+  after_script:
+    # runs before cache is saved
+    - rm -f  "${CI_PROJECT_DIR}/java/.gradle/caches/modules-2/modules-2.lock"
+    - rm -fr "${CI_PROJECT_DIR}/java/.gradle/caches/*/plugin-resolution/"
+  cache:
+    paths:
+      - java/.gradle/caches
+      - java/.gradle/wrapper
+  image: ${JAVA_IMAGE}
+  script:
+    - cd java
+    # run gradle and javadoc
+    - export GRADLE_USER_HOME="${CI_PROJECT_DIR}/.gradle"
+    - ./gradlew build javadoc
+  rules:
+      - <<: *dev-env
+        when: always
+      - <<: *publish-env
+        when: always
+  stage: test
+  tags:
+    - development
+
+# cpp
+#CPP Build:
+#  before_script:
+#    - apt update -y
+#    - apt install gcc=5:5.5.0-12ubuntu1 -y
+#    - apt install cmake -y
+#    - apt install libgtest-dev -y
+#  script:
+#    - cd cpp
+#    - mkdir build
+#    - cd build
+#    - cmake -DRUN_TESTS=1 -DRAPIDJSON_PATH=../lib/rapidjson .. && make
+#  stage: test
+#  image: ${CPP_IMAGE}
+#  variables:
+#    CXX: "g++-5"
+#    CC: "gcc-5"
+
+## --------------------------------------------------
+# Publish stage
+## --------------------------------------------------
+Java Publish:
+  after_script:
+    # runs before cache is saved 
+    - rm -f  "${CI_PROJECT_DIR}/java/.gradle/caches/modules-2/modules-2.lock"
+    - rm -fr "${CI_PROJECT_DIR}/java/.gradle/caches/*/plugin-resolution/"
+  cache:
+    paths:
+      - java/.gradle/caches
+      - java/.gradle/wrapper
+  image: ${JAVA_IMAGE}
+  script:
+    # upstream check
+    - if [ "${CI_PROJECT_PATH}" != "${UPSTREAM_PATH}" ]; then
+      echo "Skipping publish on non-upstream (${CI_PROJECT_PATH})";
+      exit 0;
+      fi  
+    - cd java
+    # use gradle to publish to our maven repository
+    - export GRADLE_USER_HOME="${CI_PROJECT_DIR}/.gradle"
+    - ./gradlew publish
+  stage: publish
+  rules:
+      - <<: *dev-env
+        when: never
+      - <<: *publish-env
+        when: manual
+  tags:
+    - development
\ No newline at end of file
diff --git a/java/build.gradle b/java/build.gradle
index 2e22178b8bbf4278b20bcce705c36a3d6de5a0ce..7795c93033f353d908bec87ea012d7e57aefce74 100644
--- a/java/build.gradle
+++ b/java/build.gradle
@@ -20,7 +20,7 @@ plugins {
 
 sourceCompatibility = '1.11'
 targetCompatibility = '1.11'
-version = '0.3.0'
+version = '0.4.0'
 group = "gov.usgs"
 
 repositories {
diff --git a/java/src/main/java/gov/usgs/hazdevbroker/ClientBase.java b/java/src/main/java/gov/usgs/hazdevbroker/ClientBase.java
index 2993b1ce45195fc6b413471af2cdd06d5e8d7030..2ac97b76ce9287729ba12e1e985fa53c14cc1191 100644
--- a/java/src/main/java/gov/usgs/hazdevbroker/ClientBase.java
+++ b/java/src/main/java/gov/usgs/hazdevbroker/ClientBase.java
@@ -29,7 +29,7 @@ public class ClientBase {
    */
   public static final Integer VERSION_MAJOR = 0;
 
-  public static final Integer VERSION_MINOR = 3;
+  public static final Integer VERSION_MINOR = 4;
   public static final Integer VERSION_PATCH = 0;
 
   /** Client Configuration ID */
diff --git a/java/src/main/java/gov/usgs/hazdevbroker/Consumer.java b/java/src/main/java/gov/usgs/hazdevbroker/Consumer.java
index 4f715dc978663d3892df87bb7b97edd2fbb68a77..353b4ad3d99c15d5003f0bd2d89d77e48eb497a2 100644
--- a/java/src/main/java/gov/usgs/hazdevbroker/Consumer.java
+++ b/java/src/main/java/gov/usgs/hazdevbroker/Consumer.java
@@ -349,6 +349,7 @@ public class Consumer extends ClientBase {
    * this function gets the partition ids for a topic
    *
    * @param topic - A string containing the topic to query
+   * @return An ArrayList of String objects containing the list of partition ids for a topic
    */
   public ArrayList<String> getPartitions(String topic) {
     ArrayList<String> partitions = new ArrayList<String>();