Traffic Reporting #1
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: Traffic Reporting | |
| on: | |
| # Run on-demand only | |
| workflow_dispatch: | |
| jobs: | |
| report-traffic: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| actions: none | |
| checks: none | |
| contents: read | |
| deployments: none | |
| issues: none | |
| discussions: none | |
| packages: none | |
| pages: none | |
| pull-requests: none | |
| repository-projects: none | |
| security-events: none | |
| statuses: none | |
| steps: | |
| - name: Fetch GitHub traffic statistics | |
| id: traffic | |
| env: | |
| GH_TOKEN: ${{ secrets.REPORTING_TOKEN }} | |
| REPO: ${{ github.repository }} | |
| run: | | |
| # Fetch page views for the last 14 days | |
| echo "Fetching traffic statistics for ${REPO}..." | |
| # Get views data | |
| VIEWS_DATA=$(gh api \ | |
| -H "Accept: application/vnd.github+json" \ | |
| -H "X-GitHub-Api-Version: 2022-11-28" \ | |
| /repos/${REPO}/traffic/views) | |
| echo "Views data retrieved successfully" | |
| echo "$VIEWS_DATA" | jq '.' | |
| # Save the data to a file for the next step | |
| echo "$VIEWS_DATA" > "$RUNNER_TEMP/traffic_data.json" | |
| - name: Output traffic data to console | |
| run: | | |
| echo "📊 Traffic data JSON (for debugging):" | |
| echo "========================================" | |
| cat "$RUNNER_TEMP/traffic_data.json" | jq '.' | |
| echo "========================================" | |
| echo "✅ Traffic data output complete!" | |
| - name: Send traffic data to reporting endpoint | |
| env: | |
| REPORTING_URL: ${{ vars.REPORTING_POST_URL }} | |
| API_KEY: ${{ secrets.REPORTING_API_KEY }} | |
| run: | | |
| echo "📤 Sending traffic data to reporting endpoint..." | |
| # Validate that REPORTING_URL is set | |
| if [ -z "${REPORTING_URL}" ]; then | |
| echo "❌ Error: REPORTING_URL environment variable is not set. Please configure vars.REPORTING_POST_URL." | |
| exit 1 | |
| fi | |
| # Validate that REPORTING_URL uses HTTPS | |
| if [[ ! "${REPORTING_URL}" =~ ^https:// ]]; then | |
| echo "❌ Error: REPORTING_URL must start with https:// to ensure secure transmission of sensitive traffic data." | |
| exit 1 | |
| fi | |
| # Send POST request with API key header, reading file directly | |
| HTTP_STATUS=$(curl -f --max-time 30 --retry 3 -s -o /dev/null -w "%{http_code}" \ | |
| -X POST \ | |
| -H "Content-Type: application/json" \ | |
| -H "X-API-KEY: ${API_KEY}" \ | |
| --data-binary "@${RUNNER_TEMP}/traffic_data.json" \ | |
| "${REPORTING_URL}") | |
| echo "HTTP Status Code: ${HTTP_STATUS}" | |
| if [ "${HTTP_STATUS}" -ge 200 ] && [ "${HTTP_STATUS}" -lt 300 ]; then | |
| echo "✅ Traffic data sent successfully!" | |
| else | |
| echo "❌ Error: Failed to send traffic data. Received HTTP status ${HTTP_STATUS}" | |
| exit 1 | |
| fi |