Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- name: Build and Deploy Node app
- on:
- push:
- branches:
- - master
- jobs:
- determine-if-building-is-necessary:
- runs-on: ubuntu-latest
- outputs:
- changes: ${{ steps.check-changes.outputs.changes }}
- steps:
- - name: Checkout files
- uses: actions/checkout@v4
- with:
- fetch-depth: 2
- - name: Install node
- uses: actions/setup-node@v4
- with:
- node-version: 18
- - name: Get previous package.json
- run: |
- git show HEAD^:./package.json > previous-package.json
- - name: Get changed files
- id: changed-files
- uses: tj-actions/changed-files@v44
- with:
- since_last_remote_commit: true
- - name: List all changed files
- id: check-changes
- env:
- CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
- run: |
- oldDeps=$(node -e "console.log(JSON.stringify(require('./previous-package.json').dependencies))");
- newDeps=$(node -e "console.log(JSON.stringify(require('./package.json').dependencies))");
- SRC_FILE_CHANGED=false
- for file in ${CHANGED_FILES}; do
- echo "$file was changed"
- if [[ "$file" == src/* ]] || [[ "$file" == ".gitea/workflows/build-and-deploy.yaml" ]] || [[ "$file" == "Dockerfile" ]]; then
- SRC_FILE_CHANGED=true
- break
- fi
- done
- if $SRC_FILE_CHANGED || [ "$oldDeps" != "$newDeps" ]; then
- echo "Changes detected in package.json or src/ files and dependencies"
- echo "::set-output name=changes::true"
- else
- echo "No changes detected in package.json or src/ files and dependencies"
- echo "::set-output name=changes::false"
- fi
- build-docker-image:
- needs: [determine-if-building-is-necessary]
- if: needs.determine-if-building-is-necessary.outputs.changes == 'true'
- steps:
- - name: Checkout repo
- uses: actions/checkout@v4
- with:
- path: repo
- - name: Build docker image
- run: docker build -t ${{ env.DOCKER_REGISTRY }}/${{ gitea.repository_owner }}/${{ gitea.event.repository.name }}:latest ./repo
- - name: Login to docker
- run: docker login -u n8jadams -p ${{ secrets.CI_TOKEN }} ${{ env.DOCKER_REGISTRY }}
- - name: Push docker image
- run: docker push ${{ env.DOCKER_REGISTRY }}/${{ gitea.repository_owner }}/${{ gitea.event.repository.name }}:latest
- - name: Cleanup old images
- run: docker image prune -f
- deploy-docker-container:
- name: Deploy Docker container
- runs-on: ubuntu-latest
- needs: [build-docker-image]
- steps:
- - name: Remove old container (if exists)
- run: docker rm -f ${{ gitea.event.repository.name }} || true
- - name: Deploy Docker container
- run: |
- docker run --rm --name ${{ gitea.event.repository.name }} \
- -p ${{ vars.HOST_PORT }}:8099 \
- --network="bridge" \
- -d ${{ env.DOCKER_REGISTRY }}/${{ gitea.repository_owner }}/${{ gitea.event.repository.name }}:latest
- # Getting this to work with the local IP took some work,
- # I had to add the following to the /boot/config/docker.cfg file on my unraid server
- # DOCKER_OPTS="--insecure-registry 192.168.86.26:3000"
- # Then run `/etc/rc.d/rc.docker restart`
- env:
- DOCKER_REGISTRY: "192.168.86.26:3000"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement