diff --git a/Dockerfile b/Dockerfile index 4b9eb39c3038c00c0e38905bfc596aa9a2ebddca..34e7229b0a0414f0d690ecf9f3b92bf696d6091b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,60 @@ -# Use a specific version of the JDK image to ensure consistency -FROM eclipse-temurin:19-jdk-alpine AS build +## Use a specific version of the JDK image to ensure consistency +#FROM eclipse-temurin:19-jdk-alpine AS build +# +## Set the working directory +#WORKDIR /app +# +## Copy the pom.xml file first, and then download dependencies separately to take advantage of Docker layer caching +#COPY pom.xml . +#RUN apk add maven +#RUN mvn dependency:go-offline +# +## Copy the source code and package the application +#COPY src ./src +#RUN mvn clean package +# +## Use a new stage to reduce the final image size +#FROM eclipse-temurin:19-jre-alpine +# +## Set the working directory +#WORKDIR /app +# +## Copy the packaged application from the build stage +#COPY --from=build /app/target/SmartMat-0.0.1-SNAPSHOT.jar ./SmartMat.jar +# +## Define the entrypoint and expose the application port +#ENTRYPOINT ["java","-jar","SmartMat.jar"] +#EXPOSE 8080 +# +# Use the official Maven image as the base image +FROM maven:3.6.3-jdk-11 as builder # Set the working directory WORKDIR /app -# Copy the pom.xml file first, and then download dependencies separately to take advantage of Docker layer caching +# Copy the pom.xml file to the working directory COPY pom.xml . -RUN apk add maven + +# Download and cache dependencies to improve build times RUN mvn dependency:go-offline -# Copy the source code and package the application +# Copy the rest of the application code COPY src ./src + +# Build the application and package it as a JAR file RUN mvn clean package -# Use a new stage to reduce the final image size -FROM eclipse-temurin:19-jre-alpine +# Use the official OpenJDK image as the runtime image +FROM openjdk:11-jre-slim # Set the working directory WORKDIR /app -# Copy the packaged application from the build stage -COPY --from=build /app/target/SmartMat-0.0.1-SNAPSHOT.jar ./SmartMat.jar +# Copy the JAR file from the builder stage +COPY --from=builder /app/target/*.jar ./app.jar -# Define the entrypoint and expose the application port -ENTRYPOINT ["java","-jar","SmartMat.jar"] +# Expose the port the application will run on EXPOSE 8080 + +# Run the application +CMD ["java", "-jar", "app.jar"] \ No newline at end of file diff --git a/src/.github/workflows/build.yml b/src/.github/workflows/build.yml new file mode 100644 index 0000000000000000000000000000000000000000..5ffe46e84593b966c451dd5759460a45fea4c84a --- /dev/null +++ b/src/.github/workflows/build.yml @@ -0,0 +1,39 @@ +name: Build + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set up JDK 11 + uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'adopt' + + - name: Cache Maven dependencies + uses: actions/cache@v2 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 + + - name: Build with Maven + run: mvn clean install -B + + - name: Upload JAR file + uses: actions/upload-artifact@v2 + with: + name: my-jar-file + path: target/*.jar \ No newline at end of file