diff --git a/.github/workflows/Docker.build.yaml b/.github/workflows/Docker.build.yaml new file mode 100644 index 00000000..cc287013 --- /dev/null +++ b/.github/workflows/Docker.build.yaml @@ -0,0 +1,37 @@ +name: Docker Build and Deploy + +on: + push: + branches: + - fix/postgresql-array-handling #branch name which is used for image building + +jobs: + build: + runs-on: self-hosted + permissions: + contents: read + packages: read + + env: + ECR_REPOSITORY: atomhopper + AWS_REGION: us-east-1 + + steps: + - name: checkout code + uses: actions/checkout@v3 + + - name: Set Short commit SHA as image tag + run: echo "IMAGE_TAG=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV + + - name: AWS ECR login + run: | + aws ecr get-login-password --region ${{ env.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com + - name: Build docker image + run: | + docker build -f docker/Dockerfile \ + --build-arg GITHUB_TOKEN=${{ secrets.PAT_FOR_DOCKER }} \ + --build-arg GITHUB_ACTOR=${{ secrets.USER_ID }} \ + -t ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} . + - name: Push docker image to registry + run: | + docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} \ No newline at end of file diff --git a/adapters/dynamoDB_adapters/pom.xml b/adapters/dynamoDB_adapters/pom.xml index af7b89b4..8bd636f1 100644 --- a/adapters/dynamoDB_adapters/pom.xml +++ b/adapters/dynamoDB_adapters/pom.xml @@ -5,7 +5,7 @@ parent org.atomhopper - 1.2.35-SNAPSHOT + 1.2.35 ../../pom.xml 4.0.0 diff --git a/adapters/hibernate/pom.xml b/adapters/hibernate/pom.xml index eaf139ca..c272806e 100644 --- a/adapters/hibernate/pom.xml +++ b/adapters/hibernate/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 ./../../pom.xml diff --git a/adapters/jdbc/pom.xml b/adapters/jdbc/pom.xml index 3c00eb0e..dc04674b 100644 --- a/adapters/jdbc/pom.xml +++ b/adapters/jdbc/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 ./../../pom.xml diff --git a/adapters/jdbc/src/main/java/org/atomhopper/jdbc/adapter/JdbcFeedSource.java b/adapters/jdbc/src/main/java/org/atomhopper/jdbc/adapter/JdbcFeedSource.java index 5ec48eb2..2f2af058 100644 --- a/adapters/jdbc/src/main/java/org/atomhopper/jdbc/adapter/JdbcFeedSource.java +++ b/adapters/jdbc/src/main/java/org/atomhopper/jdbc/adapter/JdbcFeedSource.java @@ -28,6 +28,8 @@ import org.atomhopper.util.uri.template.URITemplate; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormatter; + +import java.sql.Array; import org.joda.time.format.ISODateTimeFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -826,7 +828,14 @@ public Object extractData( ResultSet rs ) throws SQLException, DataAccessExcepti entry.setEntryId(rs.getString("entryid")); - List cats = new ArrayList( Arrays.asList( (String[])rs.getArray( "categories" ).getArray() ) ); + List cats = new ArrayList(); + Array categoriesArray = rs.getArray("categories"); + if (categoriesArray != null) { + String[] categoryStrings = (String[]) categoriesArray.getArray(); + if (categoryStrings != null) { + cats.addAll(Arrays.asList(categoryStrings)); + } + } for( String column : mapColumn.keySet() ) { diff --git a/adapters/migration/pom.xml b/adapters/migration/pom.xml index 83e2f4fd..291e1350 100644 --- a/adapters/migration/pom.xml +++ b/adapters/migration/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 ./../../pom.xml diff --git a/adapters/mongodb/pom.xml b/adapters/mongodb/pom.xml index 35436835..2eebe3f8 100644 --- a/adapters/mongodb/pom.xml +++ b/adapters/mongodb/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 ./../../pom.xml diff --git a/adapters/postgres-adapter/pom.xml b/adapters/postgres-adapter/pom.xml index a62cf3d2..b36a0f78 100644 --- a/adapters/postgres-adapter/pom.xml +++ b/adapters/postgres-adapter/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 ./../../pom.xml diff --git a/atomhopper/pom.xml b/atomhopper/pom.xml index 747ae115..4e2c06b0 100644 --- a/atomhopper/pom.xml +++ b/atomhopper/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 org.atomhopper @@ -65,7 +65,7 @@ org.atomhopper.adapter dynamoDB_adapters - 1.2.35-SNAPSHOT + 1.2.35 @@ -104,11 +104,7 @@ 4.2.5.RELEASE - - org.atomhopper.adapter - dynamoDB_adapters - 1.2.35-SNAPSHOT - + jakarta.xml.bind diff --git a/docker/Dockerfile b/docker/Dockerfile index dfee6f62..c257b449 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,9 +3,19 @@ FROM tomcat:9.0.41-jdk8 as tomcat FROM adoptopenjdk/openjdk8:alpine-slim +# Build arguments for GitHub authentication +ARG GITHUB_TOKEN +ARG GITHUB_ACTOR + +# Validate that authentication arguments are provided +RUN if [ -z "$GITHUB_TOKEN" ] || [ -z "$GITHUB_ACTOR" ]; then \ + echo "ERROR: GITHUB_TOKEN and GITHUB_ACTOR build arguments are required for GitHub Packages authentication"; \ + exit 1; \ + fi + LABEL maintainer="AtomHopperTeam@rackspace.com" \ #Atom Hopper version - version="1.2.33" \ + version="1.2.35" \ description="Docker image for Atom Hopper" #The database type @@ -16,28 +26,38 @@ ENV DB_TYPE=H2 \ DB_PASSWORD= \ #Database Host:Port DB_HOST=h2 \ - AH_VERSION=1.2.33 \ + AH_VERSION=1.2.35 \ CATALINA_HOME=/opt/tomcat \ AH_HOME=/opt/atomhopper \ PATH=${PATH}:${CATALINA_HOME}/bin:${AH_HOME} -RUN mkdir -p "${CATALINA_HOME}" "${AH_HOME}" /etc/atomhopper/ /var/log/atomhopper/ +RUN mkdir -p "${CATALINA_HOME}" "${AH_HOME}" /etc/atomhopper/ /var/log/atomhopper/ WORKDIR ${AH_HOME} COPY --from=tomcat /usr/local/tomcat ${CATALINA_HOME} -COPY start.sh . - -RUN apk --no-cache add curl \ - && curl -o atomhopper.war https://maven.research.rackspacecloud.com/content/repositories/releases/org/atomhopper/atomhopper/${AH_VERSION}/atomhopper-${AH_VERSION}.war \ +COPY docker/start.sh . + +RUN apk --no-cache add curl unzip file \ + && echo "Downloading AtomHopper ${AH_VERSION} from GitHub Packages..." \ + && echo "URL: https://maven.pkg.github.com/rackerlabs/atom-hopper/org/atomhopper/atomhopper/${AH_VERSION}/atomhopper-${AH_VERSION}.war" \ + && curl -L -v -u ${GITHUB_ACTOR}:${GITHUB_TOKEN} -o atomhopper.war \ + "https://maven.pkg.github.com/rackerlabs/atom-hopper/org/atomhopper/atomhopper/${AH_VERSION}/atomhopper-${AH_VERSION}.war" \ + && echo "Download completed. Verifying WAR file..." \ + && ls -la atomhopper.war \ + && file atomhopper.war \ + && unzip -t atomhopper.war > /dev/null \ + && echo "Extracting configuration files..." \ && unzip atomhopper.war META-INF/application-context.xml META-INF/template-logback.xml WEB-INF/classes/META-INF/atom-server.cfg.xml -d . \ && mv META-INF/application-context.xml WEB-INF/classes/META-INF/atom-server.cfg.xml /etc/atomhopper/ \ && mv META-INF/template-logback.xml /etc/atomhopper/logback.xml \ && mv atomhopper.war ${CATALINA_HOME}/webapps/ROOT.war \ && rm -rf META-INF WEB-INF \ - && chmod +x ${AH_HOME}/start.sh + && chmod +x ${AH_HOME}/start.sh \ + && echo "Verifying start.sh file..." \ + && ls -la ${AH_HOME}/start.sh \ + && echo "AtomHopper ${AH_VERSION} setup completed successfully" EXPOSE 8080 -CMD ["start.sh"] - +CMD ["/opt/atomhopper/start.sh"] diff --git a/docker/README.md b/docker/README.md index 52746488..9fb7472c 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,5 +1,5 @@ # docker build image and run the conatiner -Your current direcotry should be pointing to ***atom-hopper/docker***. +Your current direcotry should be pointing to ***atom-hopper/docker***. Run the following command to build an image. ``` $docker build -t atomhopper:latest-alpine . @@ -17,7 +17,7 @@ Test the sample feed at http://localhost:8080/namespace/feed H2 is the default databse configured to be used. The databse file for this is present under */opt/atomhopper* -Following environment variables are set by default +Following environment variables are set by default ``` JAVA_HOME "/opt/java/openjdk8/jre" CATALINA_HOME "/opt/tomcat" @@ -26,10 +26,7 @@ AH_VERSION "1.2.33" ``` For specific databse configuration of your choice (PostgreSQL,MySQL) provide values for the variables DB_TYPE, DB_USER, DB_PASSWORD and DB_HOST -Example of running with a PostgreSQL databse hosted externally. +Example of running with a PostgreSQL databse hosted externally. ``` $docker run -d --name atomhopper -p 8080:8080 -e DB_TYPE=PostgreSQL -e DB_USER=postgresql -e DB_PASSWORD=postgresql -e DB_HOST=10.0.0.1:5432 atomhopper:latest-alpine -``` - - - +``` \ No newline at end of file diff --git a/documentation/pom.xml b/documentation/pom.xml index 9a9da839..863fd974 100644 --- a/documentation/pom.xml +++ b/documentation/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 org.atomhopper diff --git a/hopper/pom.xml b/hopper/pom.xml index 5a09096c..3b6b754b 100644 --- a/hopper/pom.xml +++ b/hopper/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.36-SNAPSHOT + 1.2.35 org.atomhopper diff --git a/pom.xml b/pom.xml index a5bb315e..318fea7f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent pom - 1.2.36-SNAPSHOT + 1.2.35 ATOM Hopper - ATOMpub Server Collection http://atomhopper.org/ @@ -398,12 +398,12 @@ github GitHub Packages - https://maven.pkg.github.com/rackerlabs/atom-hopper.git + https://maven.pkg.github.com/rackerlabs/atom-hopper - snapshots + github GitHub Packages - https://maven.pkg.github.com/rackerlabs/atom-hopper.git + https://maven.pkg.github.com/rackerlabs/atom-hopper diff --git a/server/pom.xml b/server/pom.xml index 5d19438e..87d4e58e 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 org.atomhopper diff --git a/test-suite/pom.xml b/test-suite/pom.xml index 0d4af7d1..224b6a76 100644 --- a/test-suite/pom.xml +++ b/test-suite/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 org.atomhopper diff --git a/test-util/pom.xml b/test-util/pom.xml index 4526ead6..65fb42eb 100644 --- a/test-util/pom.xml +++ b/test-util/pom.xml @@ -5,7 +5,7 @@ org.atomhopper parent - 1.2.35-SNAPSHOT + 1.2.35 org.atomhopper