Setup Github Workflow

Signed-off-by: Puneet Behl <behlp@objectcomputing.com>
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..9b2d7bf
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,10 @@
+version: 2
+updates:
+- package-ecosystem: gradle
+  directory: "/"
+  schedule:
+    interval: daily
+  open-pull-requests-limit: 10
+  target-branch: main
+  labels:
+  - "type: dependency upgrade"
diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
new file mode 100644
index 0000000..c049edc
--- /dev/null
+++ b/.github/release-drafter.yml
@@ -0,0 +1,37 @@
+name-template: $NEXT_PATCH_VERSION
+tag-template: v$NEXT_PATCH_VERSION
+version-resolver:
+  major:
+    labels:
+      - 'type: major'
+  minor:
+    labels:
+      - 'type: minor'
+  patch:
+    labels:
+      - 'type: patch'
+  default: patch
+categories:
+  - title: 🚀 Features
+    labels:
+      - "type: enhancement"
+      - "type: new feature"
+      - "type: major"
+  - title: 🚀 Bug Fixes/Improvements
+    labels:
+      - "type: improvement"
+      - "type: bug"
+      - "type: minor"
+  - title: 🛠 Dependency upgrades
+    labels:
+      - "type: dependency upgrade"
+      - "dependencies"
+change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
+template: |
+  ## Changes
+
+  $CHANGES
+
+  ## Contributors
+
+  $CONTRIBUTORS
diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
new file mode 100644
index 0000000..6757df9
--- /dev/null
+++ b/.github/workflows/gradle.yml
@@ -0,0 +1,41 @@
+name: Java CI
+on:
+  push:
+    branches:
+      - 2.0.x
+      - main
+  pull_request:
+    branches:
+      - 2.0.x
+      - main
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        java: ['8']
+    env:
+      WORKSPACE: ${{ github.workspace }}
+      GRADLE_OPTS: -Xmx1500m -Dfile.encoding=UTF-8
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions/cache@v2
+        with:
+          path: ~/.gradle/caches
+          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
+          restore-keys: |
+            ${{ runner.os }}-gradle-
+      - name: Set up JDK
+        uses: actions/setup-java@v1
+        with:
+          java-version: ${{ matrix.java }}
+      - name: Run Assemble
+        if: success() && github.event_name == 'push' && matrix.java == '8'
+        run: ./gradlew assemble
+      - name: Publish to repo.grails.org
+        if: success() && github.event_name == 'push' && matrix.java == '8'
+        env:
+          ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
+          ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
+        run: |
+          ./gradlew publish
diff --git a/.github/workflows/release-notes.yml b/.github/workflows/release-notes.yml
new file mode 100644
index 0000000..f762177
--- /dev/null
+++ b/.github/workflows/release-notes.yml
@@ -0,0 +1,46 @@
+name: Changelog
+on:
+  issues:
+    types: [closed,reopened]
+  push:
+    branches:
+      - main
+  workflow_dispatch:
+jobs:
+  release_notes:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Check if it has release drafter config file
+        id: check_release_drafter
+        run: |
+          has_release_drafter=$([ -f .github/release-drafter.yml ] && echo "true" || echo "false")
+          echo ::set-output name=has_release_drafter::${has_release_drafter}
+
+      # If it has release drafter:
+      - uses: release-drafter/release-drafter@v5.15.0
+        if: steps.check_release_drafter.outputs.has_release_drafter == 'true'
+        env:
+          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
+        with:
+          prerelease: false
+          commitish: main
+      # Otherwise:
+      - name: Export Gradle Properties
+        if: steps.check_release_drafter.outputs.has_release_drafter == 'false'
+        uses: micronaut-projects/github-actions/export-gradle-properties@master
+      - uses: micronaut-projects/github-actions/release-notes@master
+        if: steps.check_release_drafter.outputs.has_release_drafter == 'false'
+        id: release_notes
+        with:
+          token: ${{ secrets.GH_TOKEN }}
+      - uses: ncipollo/release-action@v1
+        if: steps.check_release_drafter.outputs.has_release_drafter == 'false' && steps.release_notes.outputs.generated_changelog == 'true'
+        with:
+          allowUpdates: true
+          commit: ${{ steps.release_notes.outputs.current_branch }}
+          draft: true
+          name: ${{ env.title }} ${{ steps.release_notes.outputs.next_version }}
+          tag: v${{ steps.release_notes.outputs.next_version }}
+          bodyFile: CHANGELOG.md
+          token: ${{ secrets.GH_TOKEN }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..53d68bc
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,72 @@
+name: Release
+on:
+  release:
+    types: [published]
+jobs:
+  release:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        java: ['8']
+    env:
+      GIT_USER_NAME: puneetbehl
+      GIT_USER_EMAIL: behlp@objectcomputing.com
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v2
+        with:
+          token: ${{ secrets.GH_TOKEN }}
+      - uses: gradle/wrapper-validation-action@v1
+      - name: Set up JDK
+        uses: actions/setup-java@v1
+        with:
+          java-version: ${{ matrix.java }}
+      - name: Extract Target Branch
+        id: extract_branch
+        run: |
+          echo "Determining Target Branch"
+          TARGET_BRANCH=`cat $GITHUB_EVENT_PATH | jq '.release.target_commitish' | sed -e 's/^"\(.*\)"$/\1/g'`
+          echo $TARGET_BRANCH
+          echo ::set-output name=value::${TARGET_BRANCH}
+      - name: Set the current release version
+        id: release_version
+        run: echo ::set-output name=release_version::${GITHUB_REF:11}
+      - name: Run pre-release
+        uses: micronaut-projects/github-actions/pre-release@master
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+      - name: Publish to Sonatype OSSRH
+        env:
+          SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
+          SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
+          SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }}
+          SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
+          SIGNING_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }}
+          SECRING_FILE: ${{ secrets.SECRING_FILE }}
+        run: |
+          echo $SECRING_FILE | base64 -d > secring.gpg
+          echo "Publishing Artifacts"
+          (set -x; ./gradlew -Psigning.secretKeyRingFile="${GITHUB_WORKSPACE}/secring.gpg" publishToSonatype closeAndReleaseSonatypeStagingRepository --no-daemon)
+          (set -x; ./gradlew assemble --no-daemon)
+      - name: Export Gradle Properties
+        uses: micronaut-projects/github-actions/export-gradle-properties@master
+      - name: Publish to Github Pages
+        if: success()
+        uses: micronaut-projects/github-pages-deploy-action@master
+        env:
+          BETA: ${{ contains(steps.release_version.outputs.release_version, 'M') || contains(steps.release_version.outputs.release_version, 'RC') }}
+          TARGET_REPOSITORY: ${{ github.repository }}
+          GH_TOKEN: ${{ secrets.GH_TOKEN }}
+          BRANCH: gh-pages
+          FOLDER: build/docs
+          DOC_FOLDER: gh-pages
+          COMMIT_EMAIL: behlp@objectcomputing.com
+          COMMIT_NAME: Puneet Behl
+          VERSION: ${{ steps.release_version.outputs.release_version }}
+      - name: Run post-release
+        if: success()
+        uses: micronaut-projects/github-actions/post-release@master
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+        env:
+          SNAPSHOT_SUFFIX: -SNAPSHOT