diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..6847749
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,8 @@
+.git
+.github
+
+.dockerignore
+.gitignore
+Dockerfile
+Jenkinsfile
+README.md
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..b232c0c
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,92 @@
+name: release-update-dois ci
+
+on:
+ workflow_dispatch:
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ push:
+ branches:
+ - main
+
+permissions:
+ id-token: write
+ contents: read
+
+jobs:
+ lint:
+ if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
+ runs-on: ubuntu-latest
+ env:
+ REPO_DIR: /opt/release-update-dois
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Run lint
+ run: |
+ docker build --build-arg REPO_DIR="$REPO_DIR" --target setup-env -t lint-image .
+ docker run --name lint-container lint-image
+
+ - name: Display lint errors
+ if: failure()
+ run: |
+ docker cp lint-container:"$REPO_DIR"/lint.log .
+ while IFS= read -r LINT_MSG; do echo "::warning::${LINT_MSG}"; done < lint.log
+ exit 1
+
+ docker-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: docker/setup-buildx-action@v3
+
+ - uses: docker/build-push-action@v5
+ with:
+ context: .
+ file: Dockerfile
+ tags: tmp-tag
+ outputs: type=docker,dest=/tmp/image.tar
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: image-artifact
+ path: /tmp/image.tar
+
+ docker-push:
+ if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
+ needs: docker-build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/download-artifact@v4
+ with:
+ name: image-artifact
+ path: /tmp
+
+ - id: get-hash
+ run: |
+ FULL_SHA=${{ github.sha }}
+ echo "SHORT_SHA=${FULL_SHA:0:7}" >> $GITHUB_OUTPUT
+
+ - env:
+ AWS_REGION: us-east-1
+ uses: aws-actions/configure-aws-credentials@v4
+ with:
+ role-to-assume: ${{ vars.AWS_ROLE }}
+ aws-region: ${{ env.AWS_REGION }}
+
+ - id: login-ecr
+ uses: aws-actions/amazon-ecr-login@v2
+ with:
+ registry-type: public
+
+ - env:
+ AWS_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
+ AWS_REGISTRY_ALIAS: k2y5k6e2
+ AWS_REPO: release-update-dois
+ IMG_TAG: ${{ steps.get-hash.outputs.SHORT_SHA }}
+ run: |
+ docker load --input /tmp/image.tar
+ docker image tag tmp-tag $AWS_REGISTRY/$AWS_REGISTRY_ALIAS/$AWS_REPO:$IMG_TAG
+ docker push $AWS_REGISTRY/$AWS_REGISTRY_ALIAS/$AWS_REPO:$IMG_TAG
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..672619d
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,39 @@
+ARG REPO_DIR=/opt/release-update-dois
+
+
+# ===== stage 1 =====
+FROM maven:3.9.6-eclipse-temurin-11-focal AS setup-env
+
+ARG REPO_DIR
+
+WORKDIR ${REPO_DIR}
+
+COPY . .
+
+SHELL ["/bin/bash", "-c"]
+
+# run lint if container started
+ENTRYPOINT []
+
+CMD mvn -B -q checkstyle:check | \
+ grep -i --color=never '\.java\|failed to execute goal' > lint.log && \
+ exit 1 || \
+ exit 0
+
+
+# ===== stage 2 =====
+FROM setup-env AS build-jar
+
+RUN mvn clean compile assembly:single
+
+
+# ===== stage 3 =====
+FROM eclipse-temurin:11-jre-focal
+
+ARG REPO_DIR
+
+ARG JAR_FILE=target/update-dois-*-jar-with-dependencies.jar
+
+WORKDIR ${REPO_DIR}
+
+COPY --from=build-jar ${REPO_DIR}/${JAR_FILE} ./target/
diff --git a/checkstyle.xml b/checkstyle.xml
new file mode 100644
index 0000000..8506a80
--- /dev/null
+++ b/checkstyle.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 3c62f96..37713c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@
org.reactome.release
release-common-lib
- 1.2.0
+ 2.0.0-SNAPSHOT
@@ -76,6 +76,13 @@
+
+
+ ossrh
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+
@@ -84,8 +91,8 @@
maven-compiler-plugin
3.8.1
-
- 1.8
+
+ 11
@@ -155,6 +162,33 @@
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.1.1
+
+
+
+ com.puppycrawl.tools
+ checkstyle
+ 8.44
+
+
+
+
+ checkstyle-check
+
+ check
+
+
+
+
+ checkstyle.xml
+
+ UTF-8
+
+