name: Build and Deploy Java Gradle Application on: push: branches: - main - fix-left-side-menu jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: 📄 Checkout code uses: actions/checkout@v4 - name: 📄 Checkout configuration env: SSH_PRIVATE_KEY: ${{ secrets.PROD_PROPERTIES_SSH_KEY }} run: | mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa git clone -b hexagonal-reforged ssh://gitea@gitea.takiguchi.ovh:12960/Codiki/codiki-properties.git --config core.sshCommand='ssh -o StrictHostKeyChecking=no' - name: 📄 Edit configuration run: | sed -i "s//$(cat ./codiki-properties/passwords/postgresql/codiki_user)/g" ./codiki-properties/application-prod.yml cp ./codiki-properties/application-prod.yml ./backend/codiki-launcher/src/main/resources/application.yml sed -i "s//$(cat ./codiki-properties/passwords/postgresql/codiki_admin)/g" ./docker-compose.yml - name: 🔨 Build backend docker image run: | sudo /usr/bin/docker build -t codiki-backend -f ./Dockerfile-backend . --no-cache - name: 📦 Extract backend docker image into archive run: | sudo /usr/bin/docker save codiki-backend:latest -o ./codiki-backend.tar - name: 🔨 Build frontend docker image run: | sudo /usr/bin/docker build -t codiki-frontend -f ./Dockerfile-frontend . --no-cache - name: 📦 Extract frontend docker image into archive run: | sudo /usr/bin/docker save codiki-frontend:latest -o ./codiki-frontend.tar - name: 📤 Transfer artifacts to remote server env: SSH_PRIVATE_KEY: ${{ secrets.PROD_SSH_PRIVATE_KEY }} REMOTE_USER: ${{ secrets.PROD_REMOTE_USER }} REMOTE_HOST: ${{ secrets.PROD_REMOTE_HOST }} REMOTE_PORT: ${{ secrets.PROD_REMOTE_PORT }} REMOTE_PATH: ${{ secrets.PROD_REMOTE_PATH }} run: | mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa scp -o StrictHostKeyChecking=no -P $REMOTE_PORT ./codiki-backend.tar $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH scp -o StrictHostKeyChecking=no -P $REMOTE_PORT ./codiki-frontend.tar $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH scp -o StrictHostKeyChecking=no -P $REMOTE_PORT ./docker-compose.yml $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH - name: 🚀 Launch application onto remote server env: SSH_PRIVATE_KEY: ${{ secrets.PROD_SSH_PRIVATE_KEY }} REMOTE_USER: ${{ secrets.PROD_REMOTE_USER }} REMOTE_HOST: ${{ secrets.PROD_REMOTE_HOST }} REMOTE_PORT: ${{ secrets.PROD_REMOTE_PORT }} REMOTE_PATH: ${{ secrets.PROD_REMOTE_PATH }} run: | ssh -o StrictHostKeyChecking=no $REMOTE_HOST -l $REMOTE_USER -p $REMOTE_PORT << EOC cd $REMOTE_PATH sudo /usr/bin/docker load < $REMOTE_PATH/codiki-backend.tar sudo /usr/bin/docker load < $REMOTE_PATH/codiki-frontend.tar sudo /usr/bin/docker compose down sudo /usr/bin/docker compose up --detach EOC