Advertisement
Guest User

build-and-deploy-node-app.yaml

a guest
Apr 17th, 2024
6
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. name: Build and Deploy Node app
  2.  
  3. on:
  4. push:
  5. branches:
  6. - master
  7.  
  8. jobs:
  9. determine-if-building-is-necessary:
  10. runs-on: ubuntu-latest
  11. outputs:
  12. changes: ${{ steps.check-changes.outputs.changes }}
  13. steps:
  14. - name: Checkout files
  15. uses: actions/checkout@v4
  16. with:
  17. fetch-depth: 2
  18.  
  19. - name: Install node
  20. uses: actions/setup-node@v4
  21. with:
  22. node-version: 18
  23.  
  24. - name: Get previous package.json
  25. run: |
  26. git show HEAD^:./package.json > previous-package.json
  27.  
  28. - name: Get changed files
  29. id: changed-files
  30. uses: tj-actions/changed-files@v44
  31. with:
  32. since_last_remote_commit: true
  33.  
  34. - name: List all changed files
  35. id: check-changes
  36. env:
  37. CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
  38. run: |
  39. oldDeps=$(node -e "console.log(JSON.stringify(require('./previous-package.json').dependencies))");
  40. newDeps=$(node -e "console.log(JSON.stringify(require('./package.json').dependencies))");
  41. SRC_FILE_CHANGED=false
  42. for file in ${CHANGED_FILES}; do
  43. echo "$file was changed"
  44. if [[ "$file" == src/* ]] || [[ "$file" == ".gitea/workflows/build-and-deploy.yaml" ]] || [[ "$file" == "Dockerfile" ]]; then
  45. SRC_FILE_CHANGED=true
  46. break
  47. fi
  48. done
  49. if $SRC_FILE_CHANGED || [ "$oldDeps" != "$newDeps" ]; then
  50. echo "Changes detected in package.json or src/ files and dependencies"
  51. echo "::set-output name=changes::true"
  52. else
  53. echo "No changes detected in package.json or src/ files and dependencies"
  54. echo "::set-output name=changes::false"
  55. fi
  56.  
  57. build-docker-image:
  58. needs: [determine-if-building-is-necessary]
  59. if: needs.determine-if-building-is-necessary.outputs.changes == 'true'
  60. steps:
  61. - name: Checkout repo
  62. uses: actions/checkout@v4
  63. with:
  64. path: repo
  65.  
  66. - name: Build docker image
  67. run: docker build -t ${{ env.DOCKER_REGISTRY }}/${{ gitea.repository_owner }}/${{ gitea.event.repository.name }}:latest ./repo
  68.  
  69. - name: Login to docker
  70. run: docker login -u n8jadams -p ${{ secrets.CI_TOKEN }} ${{ env.DOCKER_REGISTRY }}
  71.  
  72. - name: Push docker image
  73. run: docker push ${{ env.DOCKER_REGISTRY }}/${{ gitea.repository_owner }}/${{ gitea.event.repository.name }}:latest
  74.  
  75. - name: Cleanup old images
  76. run: docker image prune -f
  77.  
  78. deploy-docker-container:
  79. name: Deploy Docker container
  80. runs-on: ubuntu-latest
  81. needs: [build-docker-image]
  82. steps:
  83. - name: Remove old container (if exists)
  84. run: docker rm -f ${{ gitea.event.repository.name }} || true
  85.  
  86. - name: Deploy Docker container
  87. run: |
  88. docker run --rm --name ${{ gitea.event.repository.name }} \
  89. -p ${{ vars.HOST_PORT }}:8099 \
  90. --network="bridge" \
  91. -d ${{ env.DOCKER_REGISTRY }}/${{ gitea.repository_owner }}/${{ gitea.event.repository.name }}:latest
  92.  
  93. # Getting this to work with the local IP took some work,
  94. # I had to add the following to the /boot/config/docker.cfg file on my unraid server
  95. # DOCKER_OPTS="--insecure-registry 192.168.86.26:3000"
  96. # Then run `/etc/rc.d/rc.docker restart`
  97. env:
  98. DOCKER_REGISTRY: "192.168.86.26:3000"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement