diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
new file mode 100644
index 000000000..809d1a479
--- /dev/null
+++ b/.github/workflows/build.yaml
@@ -0,0 +1,50 @@
+name: flytekit-java build
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ build-snapshot:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: "0"
+ - name: Cache local Maven repository
+ uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-prepare-release-${{ hashFiles('pom.xml') }}
+ - name: Set up JDK 11
+ uses: actions/setup-java@v1
+ with:
+ java-version: 11.0
+ distribution: 'adopt'
+ - name: Log in to Docker Hub
+ if: ${{ github.ref == 'refs/heads/master' }}
+ uses: docker/login-action@v1
+ with:
+ registry: ghcr.io
+ username: ${{ secrets.FLYTE_BOT_USERNAME }}
+ password: ${{ secrets.FLYTE_BOT_PAT }}
+ - uses: s4u/maven-settings-action@v2.2.0
+ if: ${{ github.ref == 'refs/heads/master' }}
+ with:
+ servers: |
+ [{
+ "id": "flytekit-java-release",
+ "username": "${{ secrets.SONATYPE_USERNAME }}",
+ "password": "${{ secrets.SONATYPE_PASSWORD }}"
+ }]
+ - name: Verify with Maven
+ run: mvn verify
+ - name: Release snapshot with Maven
+ if: ${{ github.ref == 'refs/heads/master' }}
+ env:
+ RELEASE_REPOSITORY_URL: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
+ SNAPSHOTS_REPOSITORY_URL: "https://s01.oss.sonatype.org/content/repositories/snapshots"
+ run: mvn deploy -DpreparationGoals=clean -DskipTests=true -Ddocker.image=gcr.io/flyteorg/jflyte -Ddockerfile.push
\ No newline at end of file
diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml
index 16a6681c1..e7b45b149 100644
--- a/spotbugs-exclude.xml
+++ b/spotbugs-exclude.xml
@@ -50,4 +50,14 @@
+
+
+
+
+
+
+
+
+
+