# Production Deploy (run via Woodpecker UI: trigger deployment to "production") # No clone: runs without repo checkout; triggers Portainer stack webhook. # Secrets required: portainer_webhook_url (Portainer stack webhook URL), discord_webhook_url (Discord incoming webhook). skip_clone: true # Use /tmp so rootless step containers (e.g. curlimages/curl) can create the workspace. workspace: base: /tmp path: woodpecker when: event: deployment evaluate: 'CI_PIPELINE_DEPLOY_TARGET == "production"' steps: - name: Deploy to Production image: curlimages/curl environment: WEBHOOK_URL: from_secret: dockhand_webhook_url commands: - curl -sS -X POST "$WEBHOOK_URL" - name: Send Deploy Status Notification (success) image: curlimages/curl environment: MATTERMOST_BOT_ACCESS_TOKEN: from_secret: mattermost_bot_access_token MATTERMOST_CHANNEL_ID: from_secret: mattermost_pushes_channel_id MATTERMOST_POST_API_URL: from_secret: mattermost_post_api_url commands: - | BODY=$(printf '{"channel_id":"%s","message":"[%s - Build #%s] Production Deploy success 🎉"}' "$MATTERMOST_CHANNEL_ID" "$CI_REPO" "$CI_PIPELINE_NUMBER") curl -sS -X POST -H "Content-Type: application/json" -d "$BODY" -H "Authorization: Bearer $MATTERMOST_BOT_ACCESS_TOKEN" $MATTERMOST_POST_API_URL depends_on: - Deploy to Production when: - status: [success] - name: Send Deploy Status Notification (failure) image: curlimages/curl environment: MATTERMOST_BOT_ACCESS_TOKEN: from_secret: mattermost_bot_access_token MATTERMOST_CHANNEL_ID: from_secret: mattermost_pushes_channel_id MATTERMOST_POST_API_URL: from_secret: mattermost_post_api_url commands: - | BODY=$(printf '{"channel_id":"%s","message":"[%s - Build #%s] Production Deploy failure 💩"}' "$MATTERMOST_CHANNEL_ID" "$CI_REPO" "$CI_PIPELINE_NUMBER") curl -sS -X POST -H "Content-Type: application/json" -d "$BODY" -H "Authorization: Bearer $MATTERMOST_BOT_ACCESS_TOKEN" $MATTERMOST_POST_API_URL depends_on: - Deploy to Production when: - status: [failure]