on: workflow_call: inputs: NAME: type: string required: true MAVEN_USER: type: string required: true SERVER_HOST: type: string required: true SERVER_USER: type: string required: true DEPLOY_PATH: type: string required: true secrets: MAVEN_SECRET: required: true SERVER_KEY: required: true jobs: build: name: Build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Install Maven run: sudo apt update && sudo apt-get install maven -y - name: Prepare Maven credentials uses: s4u/maven-settings-action@v2.6.0 with: servers: | [{ "id": "repo", "username": "${{ vars.MAVEN_NAME }}", "password": "${{ secrets.MAVEN_SECRET }}" }] - name: Build with Maven run: mvn clean install - name: Build Docker image run: | docker build -t ${{ inputs.NAME }} . - name: Save Docker image as tar run: | docker save -o ${{ inputs.NAME }}.tar ${{ inputs.NAME }} chmod 664 ${{ inputs.NAME }}.tar - name: Transfer Docker image to server uses: appleboy/scp-action@master env: NAME: ${{ inputs.NAME }} DEPLOY_PATH: ${{ vars.DEPLOY_PATH }} with: host: ${{ vars.SERVER_HOST }} username: ${{ vars.SERVER_USER }} key: ${{ secrets.SERVER_KEY }} source: ${{ env.NAME }}.tar target: ${{ env.DEPLOY_PATH }}/${{ env.NAME }}.tar - name: SSH into server and load Docker image uses: appleboy/ssh-action@master env: NAME: ${{ inputs.NAME }} DEPLOY_PATH: ${{ vars.DEPLOY_PATH }} with: host: ${{ vars.SERVER_HOST }} username: ${{ vars.SERVER_USER }} key: ${{ secrets.SERVER_KEY }} script: | docker load -i ${{ env.DEPLOY_PATH }}/${{ env.NAME }}.tar docker-compose down docker-compose up -d