Skip to content

Merge pull request #17 from hendisantika/dependabot/maven/com.google.… #79

Merge pull request #17 from hendisantika/dependabot/maven/com.google.…

Merge pull request #17 from hendisantika/dependabot/maven/com.google.… #79

Workflow file for this run

# This workflow will build a Java project with Maven, 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-maven
# 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.
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 23
uses: actions/setup-java@v4
with:
java-version: '23'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Check Maven Version
run: mvn --version
- name: Build project with spring boot plugin
run: mvn clean verify spring-boot:build-image
- name: Build project with Fabric8 plugin
run: mvn clean verify -Pbuild-with-fabric-8
- name: Build project with JIB plugin
run: mvn clean verify -Pbuild-with-jib
- name: Build and push
run: mvn clean install jib:build -Djib.from-platforms="linux/amd64,linux/arm64" -Djib.to.image=hendisantika/spring-boot-docker-without-docker:${{ github.run_number }} -Djib.to.auth.username=${{ secrets.DOCKERHUB_USERNAME }} -Djib.to.auth.password=${{ secrets.DOCKERHUB_TOKEN }}
# Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
- name: Update dependency graph
uses: advanced-security/maven-dependency-submission-action@aeab9f885293af501bae8bdfe88c589528ea5e25
# push-to-docker-hub:
# runs-on: ubuntu-latest
# needs:
# - build
# steps:
# - uses: actions/checkout@v4
#
# - name: Set up JDK 23
# uses: actions/setup-java@v4
# with:
# java-version: '23'
# distribution: 'temurin'
# cache: maven
#
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v3
#
# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v3
#
# - name: Login to GitHub Container Registry
# uses: docker/login-action@v3
# with:
# registry: ghcr.io
# username: ${{ github.actor }}
# password: ${{ secrets.GHR_TOKEN }}
#
# - name: Log into the Docker Hub
# uses: docker/login-action@v3
# with:
# username: ${{ vars.DOCKERHUB_USERNAME }}
# password: ${{ secrets.DOCKERHUB_TOKEN }}
#
# - name: Scrape build info
# run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
#
# - name: Build and push
# run: mvn clean install jib:build -Djib.to.image=hendisantika/springboot-jib:${{ github.run_number }} -Djib.to.auth.username=${{ secrets.DOCKERHUB_USERNAME }} -Djib.to.auth.password=${{ secrets.DOCKERHUB_TOKEN }}
deploy:
needs: build
name: deploy image
runs-on: ubuntu-24.04
environment: development
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Add Server key
run: |
touch key.txt && echo "${{ secrets.SSH_PRIVATE_KEY }}" > key.txt
chmod 600 key.txt
- name: Create SSH key
run: |
mkdir ~/spring-boot-docker-without-docker
mkdir -p ~/.ssh/
echo "$SSH_PRIVATE_KEY" > ~/.ssh/private.key
sudo chmod 600 ~/.ssh/private.key
echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
sudo chmod 600 ~/.ssh/known_hosts
shell: bash
env:
SERVER_HOST: ${{ vars.SSH_HOST }}
SERVER_PORT: ${{ vars.SSH_PORT }}
SERVER_USERNAME: ${{ secrets.SSH_USERNAME }}
SSH_PRIVATE_KEY: ${{secrets.SSH_PRIVATE_KEY}}
SSH_KNOWN_HOSTS: ${{secrets.SSH_HOST}}
- name: Set all environment variables
env:
SERVER_HOST: ${{ vars.SSH_HOST }}
SERVER_PORT: ${{ vars.SSH_PORT }}
SERVER_USERNAME: ${{ secrets.SSH_USERNAME }}
IMAGE_TAG: ${{ github.run_number }}
CONTAINER_NAME: spring-boot-docker-without-docker
APP_SERVER_PORT: ${{ vars.APP_SERVER_PORT_DEV }}
APP_ENVIRONMENT: ${{ vars.APP_ENVIRONMENT_DEV }}
SPRING_DATASOURCE_URL: ${{ vars.SPRING_DATASOURCE_URL_DEV }}
SPRING_DATASOURCE_USERNAME: ${{ vars.SPRING_DATASOURCE_USERNAME_DEV }}
SPRING_DATASOURCE_PASSWORD: ${{ vars.SPRING_DATASOURCE_PASSWORD_DEV }}
SPRING_PROFILES_ACTIVE: ${{ vars.SPRING_PROFILES_ACTIVE_DEV }}
run: |
echo CONTAINER_NAME=$CONTAINER_NAME >> .env
echo IMAGE_TAG=$IMAGE_TAG >> .env
echo APP_SERVER_PORT=$APP_SERVER_PORT >> .env
echo APP_ENVIRONMENT=$APP_ENVIRONMENT >> .env
echo SPRING_DATASOURCE_URL=$SPRING_DATASOURCE_URL >> .env
echo SPRING_DATASOURCE_USERNAME=$SPRING_DATASOURCE_USERNAME >> .env
echo SPRING_DATASOURCE_PASSWORD=$SPRING_DATASOURCE_PASSWORD >> .env
echo SPRING_PROFILES_ACTIVE=$SPRING_PROFILES_ACTIVE >> .env
- name: Copy all environment variables
uses: appleboy/scp-action@v1.0.0
with:
host: ${{ vars.SSH_HOST }}
username: ${{ vars.SSH_USERNAME }}
key: ${{ vars.SSH_PRIVATE_KEY_VARS }}
port: ${{ vars.SSH_PORT }}
source: "./.env" # Path to the file on your runner
target: "~/spring-boot-docker-without-docker" # Target directory on the server
- name: Run the application
env:
SERVER_HOST: ${{ vars.SSH_HOST }}
SERVER_PORT: ${{ vars.SSH_PORT }}
SERVER_USERNAME: ${{ vars.SSH_USERNAME }}
IMAGE_TAG: ${{ github.run_number }}
APP_SERVER_PORT: ${{ vars.APP_SERVER_PORT_DEV }}
APP_ENVIRONMENT: ${{ vars.APP_ENVIRONMENT_DEV }}
SPRING_DATASOURCE_URL: ${{ vars.SPRING_DATASOURCE_URL_DEV }}
SPRING_DATASOURCE_USERNAME: ${{ vars.SPRING_DATASOURCE_USERNAME_DEV }}
SPRING_DATASOURCE_PASSWORD: ${{ vars.SPRING_DATASOURCE_PASSWORD_DEV }}
SPRING_PROFILES_ACTIVE: ${{ vars.SPRING_PROFILES_ACTIVE_DEV }}
run: |
set -e
./deploy.sh