Skip to content

Post notification to Slack #48

Post notification to Slack

Post notification to Slack #48

Workflow file for this run

name: Node.js CI
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/[email protected]
- name: Build Docker image
env:
POSTGRES_USER: ${{ secrets.DB_USER }}
POSTGRES_PASSWORD: ${{ secrets.DB_PASSWORD }}
POSTGRES_DATABASE: ${{ secrets.DEV_DATABASE }}
run: |
echo "POSTGRES_USER=${POSTGRES_USER}"
docker compose build
- name: Run Docker Compose file
env:
POSTGRES_USER: ${{ secrets.DB_USER }}
POSTGRES_PASSWORD: ${{ secrets.DB_PASSWORD }}
POSTGRES_DATABASE: ${{ secrets.DEV_DATABASE }}
run: |
docker compose up -d && sleep 20
docker compose ps
docker compose logs db
docker compose logs app
- name: Run unit tests
env:
POSTGRES_USER: ${{ secrets.DB_USER }}
POSTGRES_PASSWORD: ${{ secrets.DB_PASSWORD }}
POSTGRES_DATABASE: ${{ secrets.DEV_DATABASE }}
run: docker compose exec app npm test
- name: Run integration tests
uses: cypress-io/github-action@v6
with:
start: npm start
# env:
# POSTGRES_USER: ${{ secrets.DB_USER }}
# POSTGRES_PASSWORD: ${{ secrets.DB_PASSWORD }}
# POSTGRES_DATABASE: ${{ secrets.DEV_DATABASE }}
# run: |
# docker compose exec app npm install cypress cypress-json-results
# docker compose exec app npx cypress run
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push Docker image to Docker Hub (Deployment to server)
run: |
echo "Pushing Docker image to Docker Hub..."
docker tag todo-app:development ${{ secrets.DOCKER_USERNAME }}/todo-app:development
docker push ${{ secrets.DOCKER_USERNAME }}/todo-app:development
- name: Post Success Notification to Slack
if: success() # Only runs if previous steps succeed
run: |
curl -X POST -H 'Content-type: application/json' --data '{"text":"Pipeline succeeded! All steps completed successfully."}' ${{ secrets.SLACK_WEBHOOK_URL }}
- name: Post Failure Notification to Slack
if: failure() # Only runs if previous steps failed
run: |
curl -X POST -H 'Content-type: application/json' --data '{"text":"Pipeline failed."}' ${{ secrets.SLACK_WEBHOOK_URL }}
# - name: Setup SSH
# run: |
# mkdir -p ~/.ssh
# echo "${{ secrets.SERVER_SSH_KEY }}" > ~/.ssh/id_rsa
# chmod 600 ~/.ssh/id_rsa
# ssh-keyscan github.com >> ~/.ssh/known_hosts
# - name: Deploy to the server
# uses: appleboy/[email protected]
# with:
# host: ${{ secrets.SERVER_HOST }}
# username: ${{ secrets.SERVER_USER }}
# key: ${{ secrets.SERVER_SSH_KEY }}
# script: |
# docker pull todo-app:latest
# docker stop todo-app || true
# docker rm todo-app || true
# docker run -d --name todo-app -p 80:80 todo-app:latest
# debug: true
- name: Stop and remove Docker containers
run: docker compose down