diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..cde6962 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,126 @@ +# yara724/api — development deployment (Deploy-Develop) +# Manual tasks: see ci-cd/TASK.md + +when: + - event: push + branch: main + - event: manual + +clone: + disable: true + +environment: + WORKSPACE: /data/1-delploy/gitea/yara724/api + PROJECT_NAME: Yara724 API + ENVIRONMENT: Development + APPLICATION_URL: https://y724-user.ittalie.ir/api + GIT_COMMIT_URL: https://git.ittalie.com/Yara724/api/commit/ + GIT_BRANCH: main + COMPOSE_FILE: docker-compose.yml + SUCCESS_COLOR: "#36a64f" + FAILURE_COLOR: "#dc3545" + +steps: + pull: + image: alpine/git:latest + volumes: + - /data/1-delploy/gitea/yara724/api:/workspace + commands: + - cd /workspace + - git pull origin main + - date +%s > /workspace/.wp-deploy-start + + deploy: + image: docker:26-cli + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /data/1-delploy/gitea/yara724/api:/workspace + commands: + - cd /workspace + - docker compose -f docker-compose.yml up -d --build + + notify-success: + image: alpine:3.20 + volumes: + - /data/1-delploy/gitea/yara724/api:/workspace + environment: + ROCKETCHAT_WEBHOOK: + from_secret: rocketchat_webhook + when: + - status: success + commands: + - apk add --no-cache curl jq git > /dev/null + - | + set -euo pipefail + cd /workspace + + COMMIT_HASH="$(git rev-parse --short HEAD)" + DEPLOY_START="$(cat /workspace/.wp-deploy-start)" + DEPLOY_END="$(date +%s)" + DEPLOY_DURATION="$((DEPLOY_END - DEPLOY_START))" + + COMMIT_1="$(git log -1 --pretty=format:'%s')" + COMMIT_2="$(git log -2 --pretty=format:'%s' | tail -n1)" + COMMIT_3="$(git log -3 --pretty=format:'%s' | tail -n1)" + + TITLE="✅ ${PROJECT_NAME} - ${ENVIRONMENT} ✅" + TEXT="🌐 **URL**: ${APPLICATION_URL} + + 🔖 **Commit Hash**: [${COMMIT_HASH}](${GIT_COMMIT_URL}${COMMIT_HASH}) + + 📝 **Recent Changes**: + + • ${COMMIT_1} + + • ${COMMIT_2} + + • ${COMMIT_3} + + ⏱️ **Deployment Duration**: ${DEPLOY_DURATION}s" + + payload="$(jq -n \ + --arg title "$TITLE" \ + --arg text "$TEXT" \ + --arg color "$SUCCESS_COLOR" \ + '{text: $title, attachments: [{text: $text, color: $color}]}')" + + curl -fsS -H "Content-Type: application/json" -d "$payload" "$ROCKETCHAT_WEBHOOK" >/dev/null + rm -f /workspace/.wp-deploy-start + + notify-failure: + image: alpine:3.20 + volumes: + - /data/1-delploy/gitea/yara724/api:/workspace + environment: + ROCKETCHAT_WEBHOOK: + from_secret: rocketchat_webhook + when: + - status: failure + commands: + - apk add --no-cache curl jq git > /dev/null + - | + set -euo pipefail + cd /workspace + + COMMIT_HASH="$(git rev-parse --short HEAD 2>/dev/null || echo unknown)" + TITLE="💥 ${PROJECT_NAME} - ${ENVIRONMENT} 💥" + TEXT="━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 🌐 **Application URL** + + ${APPLICATION_URL} + + 🔖 **Commit** + + \`${COMMIT_HASH}\` + + ⚠️ **Pipeline failed** — check Woodpecker for the failing step. + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + + payload="$(jq -n \ + --arg title "$TITLE" \ + --arg text "$TEXT" \ + --arg color "$FAILURE_COLOR" \ + '{text: $title, attachments: [{text: $text, color: $color}]}')" + + curl -fsS -H "Content-Type: application/json" -d "$payload" "$ROCKETCHAT_WEBHOOK" >/dev/null || true + rm -f /workspace/.wp-deploy-start