Merge pull request #25 from htdguide/testing #132
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Deploy Docker Image to Server | |
| on: | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| test: | |
| name: Run Vitest | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v2 | |
| - name: Set up Node | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 18 | |
| - name: Install Dependencies | |
| run: npm install --legacy-peer-deps | |
| - name: Run Tests | |
| run: npm run test | |
| build-deploy: | |
| name: Build and Deploy Docker Image to Server | |
| runs-on: ubuntu-latest | |
| needs: test # This ensures the build only runs if tests pass | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v2 | |
| - name: Login to Docker Hub | |
| id: docker-hub | |
| run: | | |
| docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Build the Docker Image | |
| id: build-docker-image | |
| run: | | |
| ls -la | |
| docker build . -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/webportfolio:latest | |
| - name: Push the Docker Image | |
| id: push-docker-image | |
| run: docker push ${{ secrets.DOCKER_USERNAME }}/webportfolio:latest | |
| - name: Set up SSH key for server connection | |
| uses: webfactory/ssh-agent@v0.5.3 | |
| with: | |
| ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| - name: Connect to server via SSH and deploy | |
| uses: appleboy/ssh-action@v0.1.8 | |
| with: | |
| host: ${{ secrets.VPS_HOST }} | |
| username: ${{ secrets.VPS_USERNAME }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| script: | | |
| # Stop and remove any existing containers | |
| sudo docker stop $(sudo docker ps -aq) || true | |
| sudo docker rm $(sudo docker ps -aq) || true | |
| # Pull the latest image from Docker Hub | |
| sudo docker pull ${{ secrets.DOCKER_USERNAME }}/webportfolio:latest | |
| # Copy SSL certificates to server paths | |
| echo "${{ secrets.SSL_PRIVATE_KEY }}" > /etc/ssl/private/ssl.key | |
| echo "${{ secrets.SSL_CERT_CHAIN }}" > /etc/ssl/certs/ssl.crt | |
| # Run container with mapped SSL certs | |
| sudo docker run -d -p 80:80 -p 443:443 --name webportfolio \ | |
| -v /etc/ssl/private/ssl.key:/app/ssl.key \ | |
| -v /etc/ssl/certs/ssl.crt:/app/ssl.crt \ | |
| -e SSL_PRIVATE_KEY="/app/ssl.key" \ | |
| -e SSL_CERT_CHAIN="/app/ssl.crt" \ | |
| ${{ secrets.DOCKER_USERNAME }}/webportfolio:latest |