Skip to content

fix: update Telegram notification to include deployment status and im… #19

fix: update Telegram notification to include deployment status and im…

fix: update Telegram notification to include deployment status and im… #19

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
- master
- feature/*
pull_request:
branches:
- main
- master
jobs:
test:
name: 🧪 Run Tests and Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js 18
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test --silent
- name: Check whether running under act (set output)
id: check_act_test
run: |
if [ "${IS_ACT}" = "true" ]; then
echo "is_act=true" >> $GITHUB_OUTPUT
else
echo "is_act=false" >> $GITHUB_OUTPUT
fi
- name: Upload coverage report
if: ${{ always() && steps.check_act_test.outputs.is_act != 'true' }}
uses: actions/upload-artifact@v4
with:
name: jest-coverage
path: coverage/
- name: Generate test summary
if: always()
run: |
echo "### ✅ Test Results" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
npm test --silent >> $GITHUB_STEP_SUMMARY || true
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
release:
name: 🚀 Version & Release
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check whether running under act (set output)
id: check_act_release
run: |
if [ "${IS_ACT}" = "true" ]; then
echo "is_act=true" >> $GITHUB_OUTPUT
else
echo "is_act=false" >> $GITHUB_OUTPUT
fi
- name: Setup Node.js
if: ${{ steps.check_act_release.outputs.is_act != 'true' }}
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
if: ${{ steps.check_act_release.outputs.is_act != 'true' }}
run: npm ci
- name: Semantic Release
if: ${{ steps.check_act_release.outputs.is_act != 'true' }}
uses: cycjimmy/semantic-release-action@v4
with:
extra_plugins: |
@semantic-release/changelog
@semantic-release/git
@semantic-release/github
env:
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
deploy:
name: 📦 Deploy to Render
runs-on: ubuntu-latest
needs: release
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check whether running under act (set output)
id: check_act_deploy
run: |
if [ "${IS_ACT}" = "true" ]; then
echo "is_act=true" >> $GITHUB_OUTPUT
else
echo "is_act=false" >> $GITHUB_OUTPUT
fi
- name: Setup Node.js
if: ${{ steps.check_act_deploy.outputs.is_act != 'true' }}
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
if: ${{ steps.check_act_deploy.outputs.is_act != 'true' }}
run: npm ci
- name: Deploy to Render
if: ${{ steps.check_act_deploy.outputs.is_act != 'true' }}
env:
RENDER_API_KEY: ${{ secrets.RENDER_API_KEY }}
RENDER_SERVICE_ID: ${{ secrets.RENDER_SERVICE_ID }}
run: |
curl -X POST "https://api.render.com/v1/services/${RENDER_SERVICE_ID}/deploys" \
-H "Accept: application/json" \
-H "Authorization: Bearer ${RENDER_API_KEY}" \
-d ''
- name: Send Telegram notification
if: always()
run: |
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD)
BRANCH=$(git rev-parse --abbrev-ref HEAD)
COMMIT=$(git rev-parse --short HEAD)
REPO_URL="https://github.com/$GITHUB_REPOSITORY"
LAST_AUTHOR=$(git log -1 --pretty=format:'%an')
if [ "${{ job.status }}" = "success" ]; then
STATUS="✅ *Deployment succeeded*"
else
STATUS="❌ *Deployment failed*"
fi
MESSAGE="$STATUS
🕓 *Date:* $(date)
🏷️ *Version/Tag:* $VERSION
🌿 *Branch:* $BRANCH
🔀 *Commit:* $COMMIT
👤 *Author:* $LAST_AUTHOR
🔗 *Repo:* $REPO_URL"
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
-d "chat_id=${{ secrets.TELEGRAM_CHAT_ID }}" \
-d "text=$MESSAGE" \
-d "parse_mode=Markdown"