mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-10-25 11:17:28 +02:00 
			
		
		
		
	Create PR-Demos.yml (#2260)
* Create PR-Demos.yml * Update build.gradle * Update build.gradle * Update PR-Demos.yml * Update PR-Demos.yml * Update PR-Demos.yml * Update PR-Demos.yml * Update PR-Demos.yml * Update PR-Demos.yml * Update PR-Demos.yml * Update PR-Demos.yml * Update PR-Demos.yml
This commit is contained in:
		
							parent
							
								
									db028dfe27
								
							
						
					
					
						commit
						5dc8fa08ee
					
				
							
								
								
									
										227
									
								
								.github/workflows/PR-Demos.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								.github/workflows/PR-Demos.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,227 @@ | ||||
| name: PR Deployment | ||||
| 
 | ||||
| on: | ||||
|   pull_request: | ||||
|     types: [opened, synchronize, reopened, closed] | ||||
| 
 | ||||
| permissions: | ||||
|   contents: write | ||||
|   pull-requests: write | ||||
| 
 | ||||
| env: | ||||
|   SERVER_IP: ${{ secrets.VPS_IP }}  # Add this to your GitHub secrets | ||||
| 
 | ||||
| jobs: | ||||
|   check-changes: | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.event.action != 'closed' | ||||
|     outputs: | ||||
|       should_run: ${{ steps.filter.outputs.src_changed }} | ||||
|      | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|        | ||||
|       - name: Check for relevant file changes | ||||
|         id: filter | ||||
|         uses: dorny/paths-filter@v2 | ||||
|         with: | ||||
|           filters: | | ||||
|             src_changed: | ||||
|               - '**/*.java' | ||||
|               - '**/*.html' | ||||
|               - '**/*.css' | ||||
|               - '**/*.js' | ||||
|               - '**/*.gradle' | ||||
| 
 | ||||
|   deploy-pr: | ||||
|     needs: check-changes | ||||
|     runs-on: ubuntu-latest | ||||
|     if: needs.check-changes.outputs.should_run == 'true' | ||||
|      | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|        | ||||
|       - name: Set up JDK and Gradle | ||||
|         uses: actions/setup-java@v4 | ||||
|         with: | ||||
|           java-version: '17' | ||||
|           distribution: 'temurin' | ||||
|           gradle-version: 8.7 | ||||
| 
 | ||||
|       - name: Run Gradle Command | ||||
|         run: ./gradlew clean build | ||||
|         env: | ||||
|           DOCKER_ENABLE_SECURITY: false | ||||
| 
 | ||||
|       - name: Set up Docker Buildx | ||||
|         uses: docker/setup-buildx-action@v3 | ||||
| 
 | ||||
|       - name: Get version number | ||||
|         id: versionNumber | ||||
|         run: echo "versionNumber=$(./gradlew printVersion --quiet | tail -1)" >> $GITHUB_OUTPUT | ||||
| 
 | ||||
|       - name: Login to Docker Hub | ||||
|         uses: docker/login-action@v3 | ||||
|         with: | ||||
|           username: ${{ secrets.DOCKER_HUB_USERNAME }} | ||||
|           password: ${{ secrets.DOCKER_HUB_API }} | ||||
| 
 | ||||
|       - name: Build and push PR-specific image | ||||
|         uses: docker/build-push-action@v6 | ||||
|         with: | ||||
|           context: . | ||||
|           file: ./Dockerfile | ||||
|           push: true | ||||
|           tags: ${{ secrets.DOCKER_HUB_USERNAME }}/test:pr-${{ github.event.pull_request.number }} | ||||
|           build-args: VERSION_TAG=${{ steps.versionNumber.outputs.versionNumber }} | ||||
|           platforms: linux/amd64 | ||||
|     | ||||
| 
 | ||||
|       - name: Set up SSH | ||||
|         run: | | ||||
|           mkdir -p ~/.ssh/ | ||||
|           echo "${{ secrets.VPS_SSH_KEY }}" > ../private.key | ||||
|           sudo chmod 600 ../private.key | ||||
|           ssh-keyscan -H ${{ secrets.VPS_HOST }} >> ~/.ssh/known_hosts | ||||
| 
 | ||||
|       - name: Deploy to VPS | ||||
|         run: | | ||||
|           # First create the docker-compose content locally | ||||
|           cat > docker-compose.yml << 'EOF' | ||||
|           version: '3.3' | ||||
|           services: | ||||
|             stirling-pdf: | ||||
|               container_name: stirling-pdf-pr-${{ github.event.pull_request.number }} | ||||
|               image: ${{ secrets.DOCKER_HUB_USERNAME }}/test:pr-${{ github.event.pull_request.number }} | ||||
|               ports: | ||||
|                 - "${{ github.event.pull_request.number }}:8080" | ||||
|               volumes: | ||||
|                 - /stirling/PR-${{ github.event.pull_request.number }}/data:/usr/share/tessdata:rw | ||||
|                 - /stirling/PR-${{ github.event.pull_request.number }}/config:/configs:rw | ||||
|                 - /stirling/PR-${{ github.event.pull_request.number }}/logs:/logs:rw | ||||
|               environment: | ||||
|                 DOCKER_ENABLE_SECURITY: "false" | ||||
|                 SECURITY_ENABLELOGIN: "false" | ||||
|                 SYSTEM_DEFAULTLOCALE: en-GB | ||||
|                 UI_APPNAME: "Stirling-PDF PR-${{ github.event.pull_request.number }}" | ||||
|                 UI_HOMEDESCRIPTION: "PR-${{ github.event.pull_request.number }} for Stirling-PDF Latest" | ||||
|                 UI_APPNAMENAVBAR: "PR-${{ github.event.pull_request.number }}" | ||||
|                 SYSTEM_MAXFILESIZE: "100" | ||||
|                 METRICS_ENABLED: "false" | ||||
|                 SYSTEM_GOOGLEVISIBILITY: "false" | ||||
|                 SYSTEM_ENABLEANALYTICS: "false" | ||||
|               restart: on-failure:5 | ||||
|           EOF | ||||
| 
 | ||||
|           # Then copy the file and execute commands | ||||
|           scp -i ../private.key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null docker-compose.yml ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }}:/tmp/docker-compose.yml | ||||
| 
 | ||||
|           ssh -i ../private.key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -T ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }} << 'ENDSSH' | ||||
|             # Create PR-specific directories | ||||
|             mkdir -p /stirling/PR-${{ github.event.pull_request.number }}/{data,config,logs} | ||||
|              | ||||
|             # Move docker-compose file to correct location | ||||
|             mv /tmp/docker-compose.yml /stirling/PR-${{ github.event.pull_request.number }}/docker-compose.yml | ||||
|              | ||||
|             # Start or restart the container | ||||
|             cd /stirling/PR-${{ github.event.pull_request.number }} | ||||
|             docker-compose pull | ||||
|             docker-compose up -d | ||||
|           ENDSSH | ||||
|            | ||||
|       - name: Post deployment URL to PR | ||||
|         uses: actions/github-script@v7 | ||||
|         with: | ||||
|           script: | | ||||
|             const { GITHUB_REPOSITORY } = process.env; | ||||
|             const [repoOwner, repoName] = GITHUB_REPOSITORY.split('/'); | ||||
|             const prNumber = context.issue.number; | ||||
| 
 | ||||
|             const deploymentUrl = `http://${{ secrets.VPS_HOST }}:${prNumber}`; | ||||
|             const commentBody = `## 🚀 PR Test Deployment\n\n` + | ||||
|                               `Your PR has been deployed for testing!\n\n` + | ||||
|                               `🔗 **Test URL:** [${deploymentUrl}](${deploymentUrl})\n\n` + | ||||
|                               `This deployment will be automatically cleaned up when the PR is closed.\n`; | ||||
| 
 | ||||
|             // Find existing comment | ||||
|             const comments = await github.rest.issues.listComments({ | ||||
|               owner: repoOwner, | ||||
|               repo: repoName, | ||||
|               issue_number: prNumber | ||||
|             }); | ||||
| 
 | ||||
|             const existingComment = comments.data.find(c =>  | ||||
|               c.body.includes("## 🚀 PR Test Deployment") &&  | ||||
|               c.user.login === "github-actions[bot]" | ||||
|             ); | ||||
| 
 | ||||
|             if (existingComment) { | ||||
|               await github.rest.issues.updateComment({ | ||||
|                 owner: repoOwner, | ||||
|                 repo: repoName, | ||||
|                 comment_id: existingComment.id, | ||||
|                 body: commentBody | ||||
|               }); | ||||
|             } else { | ||||
|               await github.rest.issues.createComment({ | ||||
|                 owner: repoOwner, | ||||
|                 repo: repoName, | ||||
|                 issue_number: prNumber, | ||||
|                 body: commentBody | ||||
|               }); | ||||
|             } | ||||
| 
 | ||||
|   cleanup: | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.event.action == 'closed' | ||||
|      | ||||
|     steps: | ||||
|       - name: Set up SSH | ||||
|         run: | | ||||
|           mkdir -p ~/.ssh/ | ||||
|           echo "${{ secrets.VPS_SSH_KEY }}" > ../private.key | ||||
|           sudo chmod 600 ../private.key | ||||
| 
 | ||||
|       - name: Cleanup PR deployment | ||||
|         run: | | ||||
|           ssh -i ../private.key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -T ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }} << 'ENDSSH' | ||||
|             # Check if directory exists before attempting cleanup | ||||
|             if [ -d "/stirling/PR-${{ github.event.pull_request.number }}" ]; then | ||||
|               echo "Found PR directory, proceeding with cleanup..." | ||||
|                | ||||
|               # Stop and remove containers | ||||
|               cd /stirling/PR-${{ github.event.pull_request.number }} | ||||
|               docker-compose down || true | ||||
|                | ||||
|               # Go back to root before removal | ||||
|               cd / | ||||
|                | ||||
|               # Remove PR-specific directories | ||||
|               rm -rf /stirling/PR-${{ github.event.pull_request.number }} | ||||
|                | ||||
|               # Remove the Docker image | ||||
|               docker rmi ${{ secrets.DOCKER_HUB_USERNAME }}/test:pr-${{ github.event.pull_request.number }} || true | ||||
|                | ||||
|               echo "Cleanup completed successfully" | ||||
|             else | ||||
|               echo "PR directory not found, nothing to clean up" | ||||
|             fi | ||||
|           ENDSSH | ||||
| 
 | ||||
|       - name: Post cleanup notice to PR | ||||
|         uses: actions/github-script@v7 | ||||
|         with: | ||||
|           script: | | ||||
|             const { GITHUB_REPOSITORY } = process.env; | ||||
|             const [repoOwner, repoName] = GITHUB_REPOSITORY.split('/'); | ||||
|             const prNumber = context.issue.number; | ||||
| 
 | ||||
|             const commentBody = `## 🧹 Deployment Cleanup\n\n` + | ||||
|                               `The test deployment for this PR has been cleaned up.`; | ||||
| 
 | ||||
|             await github.rest.issues.createComment({ | ||||
|               owner: repoOwner, | ||||
|               repo: repoName, | ||||
|               issue_number: prNumber, | ||||
|               body: commentBody | ||||
|             }); | ||||
| @ -10,6 +10,8 @@ plugins { | ||||
| 	//id "nebula.lint" version "19.0.3" | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| import com.github.jk1.license.render.* | ||||
| 
 | ||||
| ext { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user