diff --git a/.github/workflows/docker-ci-dev.yml b/.github/workflows/docker-ci-dev.yml new file mode 100644 index 00000000..cffaed24 --- /dev/null +++ b/.github/workflows/docker-ci-dev.yml @@ -0,0 +1,49 @@ +name: Build and Push Docker Dev Image + +on: + push: + branches: + - dev + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Create src/main/resources/bootstrap.yml + run: | + mkdir -p src/main/resources + echo "encrypt:" > src/main/resources/bootstrap.yml + echo " key: '${{ secrets.ENCRYPTKEY }}'" >> src/main/resources/bootstrap.yml + + - name: Login to GitHub Container Registry + run: echo ${{ secrets.GTOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + - name: Create Release Name + id: release_name + run: | + echo "::set-output name=release_name::v-$(date +'%Y.%m.%d-%H%M%S')" + + - name: Build And Push Docker Dev Image + run: | + RELEASE_NAME="${{ steps.release_name.outputs.release_name }}" + docker build --build-arg SPRING_PROFILES_ACTIVE=dev -t my-product-server:latest -f multistage.Dockerfile . + docker tag my-product-server:latest ghcr.io/liberty52/liberty52-product-server:dev$RELEASE_NAME + docker push ghcr.io/liberty52/liberty52-product-server:dev$RELEASE_NAME + + - name: Create GitHub Release + uses: actions/create-release@v1 + with: + tag_name: ${{ steps.release_name.outputs.release_name }} + release_name: Release ${{ steps.release_name.outputs.release_name }} + generateReleaseNotes: true + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GTOKEN }} + + - name: Clean up + run: docker logout ghcr.io diff --git a/.github/workflows/docker-ci-prod.yml b/.github/workflows/docker-ci-prod.yml new file mode 100644 index 00000000..0fe58ebc --- /dev/null +++ b/.github/workflows/docker-ci-prod.yml @@ -0,0 +1,32 @@ +name: Build and Push Docker Prod Image + +on: + push: + branches: + - main + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Create src/main/resources/bootstrap.yml + run: | + mkdir -p src/main/resources + echo "encrypt:" > src/main/resources/bootstrap.yml + echo " key: '${{ secrets.ENCRYPTKEY }}'" >> src/main/resources/bootstrap.yml + + - name: Login to GitHub Container Registry + run: echo ${{ secrets.GTOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + - name: Build and Push Docker Prod Image + run: | + docker build --build-arg SPRING_PROFILES_ACTIVE=prod -t my-product-server:latest -f multistage.Dockerfile . + docker tag my-product-server:latest ghcr.io/liberty52/liberty52-product-server:prod-v${{ github.sha }} + docker push ghcr.io/liberty52/liberty52-product-server:prod-v${{ github.sha }} + + - name: Clean up + run: docker logout ghcr.io diff --git a/multistage.Dockerfile b/multistage.Dockerfile new file mode 100644 index 00000000..9b50d2fa --- /dev/null +++ b/multistage.Dockerfile @@ -0,0 +1,15 @@ +FROM gradle:7.4-jdk17 AS builder +WORKDIR /app +COPY build.gradle . +COPY settings.gradle . +COPY src src +RUN gradle assemble + +FROM openjdk:17-alpine +VOLUME /tmp +ARG JAR_FILE=/app/build/libs/*.jar +COPY --from=builder ${JAR_FILE} app.jar +EXPOSE 8080 +ARG SPRING_PROFILES_ACTIVE=dev +ENV SPRING_PROFILES_ACTIVE=$SPRING_PROFILES_ACTIVE +ENTRYPOINT ["java","-jar", "app.jar","-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}"] \ No newline at end of file