From 757437b5640970e2c165f1d8b83050422df48785 Mon Sep 17 00:00:00 2001 From: xcodeassociated Date: Tue, 17 Sep 2024 17:29:18 +0200 Subject: [PATCH] add dockerfile and CI workflows --- .github/workflows/build-and-upload.yml | 99 +++++++++++++++++++ Dockerfile | 8 ++ .../resources/application-docker.properties | 1 + 3 files changed, 108 insertions(+) create mode 100644 .github/workflows/build-and-upload.yml create mode 100644 Dockerfile create mode 100644 src/main/resources/application-docker.properties diff --git a/.github/workflows/build-and-upload.yml b/.github/workflows/build-and-upload.yml new file mode 100644 index 0000000..3f90ccb --- /dev/null +++ b/.github/workflows/build-and-upload.yml @@ -0,0 +1,99 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + branches: [ "main", "release/*" ] + pull_request: + branches: [ "**" ] + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + # Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies. + # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 + - name: Build with Gradle Wrapper + run: ./gradlew build + + # NOTE: The Gradle Wrapper is the default and recommended way to run Gradle (https://docs.gradle.org/current/userguide/gradle_wrapper.html). + # If your project does not have the Gradle Wrapper configured, you can use the following configuration to run Gradle with a specified version. + # + # - name: Setup Gradle + # uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 + # with: + # gradle-version: '8.5' + # + # - name: Build with Gradle 8.5 + # run: gradle build + + - name: Remove unused plain jar + run: rm build/libs/*plain.jar + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: Package + path: build/libs + + docker: + runs-on: ubuntu-latest + needs: build + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: Package + path: build/libs + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + push: true + platforms: linux/amd64, linux/arm64 + tags: xcodeassociated/spring-mvc-jpa-template:latest + + dependency-submission: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + # Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies. + # See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md + - name: Generate and submit dependency graph + uses: gradle/actions/dependency-submission@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cdcba38 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM eclipse-temurin:21-jre +LABEL authors="xcodeassociated" + +COPY ./build/libs/*.jar ./app.jar + +EXPOSE 8082 + +ENTRYPOINT exec java $JAVA_OPTS -jar -Dspring.profiles.active=docker ./app.jar \ No newline at end of file diff --git a/src/main/resources/application-docker.properties b/src/main/resources/application-docker.properties new file mode 100644 index 0000000..f190e3b --- /dev/null +++ b/src/main/resources/application-docker.properties @@ -0,0 +1 @@ +spring.main.allow-bean-definition-overriding=false