Check npm packument size #42
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
| # See https://github.com/renovatebot/renovate/discussions/42965 and related issues in the past | |
| name: 'Check npm packument size' | |
| on: | |
| # run daily | |
| schedule: | |
| - cron: '0 6 * * *' | |
| # allow manual trigger | |
| workflow_dispatch: {} | |
| permissions: {} | |
| jobs: | |
| check-npm-packument-size: | |
| runs-on: ubuntu-latest | |
| if: github.repository == 'renovatebot/renovate' | |
| steps: | |
| - name: Check npm packument size | |
| id: check | |
| env: | |
| PACKAGE_NAME: renovate | |
| # npm rejects publishes once the packument exceeds 100 MB | |
| WARNING_THRESHOLD_MB: 85 | |
| CRITICAL_THRESHOLD_MB: 90 | |
| run: | | |
| set -euo pipefail | |
| packument_file="$(mktemp)" | |
| curl -fsS -o "$packument_file" "https://registry.npmjs.org/$PACKAGE_NAME" | |
| size_bytes="$(wc -c < "$packument_file")" | |
| size_mb="$(awk -v bytes="$size_bytes" 'BEGIN { printf "%.2f", bytes / 1024 / 1024 }')" | |
| version_count="$(jq '.versions | length' "$packument_file")" | |
| rm -f "$packument_file" | |
| status="$(awk -v size="$size_mb" -v warn="$WARNING_THRESHOLD_MB" -v crit="$CRITICAL_THRESHOLD_MB" \ | |
| 'BEGIN { if (size >= crit) print "critical"; else if (size >= warn) print "warning"; else print "ok" }')" | |
| echo "::notice title=npm packument size::npm packument size for '$PACKAGE_NAME': ${size_mb} MB across ${version_count} versions (status: $status)" | |
| { | |
| echo "size-mb=$size_mb" | |
| echo "version-count=$version_count" | |
| echo "status=$status" | |
| } >> "$GITHUB_OUTPUT" | |
| { | |
| echo "### npm packument size" | |
| echo "\`$PACKAGE_NAME\` packument is **${size_mb} MB** across **${version_count} versions** (status: \`$status\`, warning: ${WARNING_THRESHOLD_MB} MB, critical: ${CRITICAL_THRESHOLD_MB} MB, npm hard limit: 100 MB)." | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| - name: Post warning to Slack | |
| if: steps.check.outputs.status == 'warning' | |
| uses: slackapi/slack-github-action@dcb1066f776dd043e64d0e8ba94ca15cc7e1875d # v4.0.0 | |
| with: | |
| webhook: ${{ secrets.RENOVATEBOT_SLACK_WEBHOOK_MAIN_FAILURES }} | |
| webhook-type: incoming-webhook | |
| payload: | | |
| text: ":warning: *npm packument for `renovate` is getting large*: ${{ steps.check.outputs.size-mb }} MB across ${{ steps.check.outputs.version-count }} versions. Warning threshold is 85 MB, npm rejects publishes at 100 MB.\nhttps://registry.npmjs.org/renovate" | |
| blocks: | |
| - type: "section" | |
| text: | |
| type: "mrkdwn" | |
| text: ":warning: *npm packument for `renovate` is getting large*: ${{ steps.check.outputs.size-mb }} MB across ${{ steps.check.outputs.version-count }} versions. Warning threshold is 85 MB, npm rejects publishes at 100 MB.\nhttps://registry.npmjs.org/renovate" | |
| - name: Post critical warning to Slack | |
| if: steps.check.outputs.status == 'critical' | |
| uses: slackapi/slack-github-action@dcb1066f776dd043e64d0e8ba94ca15cc7e1875d # v4.0.0 | |
| with: | |
| webhook: ${{ secrets.RENOVATEBOT_SLACK_WEBHOOK_MAIN_FAILURES }} | |
| webhook-type: incoming-webhook | |
| payload: | | |
| text: ":rotating_light: *npm packument for `renovate` is close to the 100 MB publish limit*: ${{ steps.check.outputs.size-mb }} MB across ${{ steps.check.outputs.version-count }} versions. Publishing will start failing soon - action needed.\nhttps://registry.npmjs.org/renovate" | |
| blocks: | |
| - type: "section" | |
| text: | |
| type: "mrkdwn" | |
| text: ":rotating_light: *npm packument for `renovate` is close to the 100 MB publish limit*: ${{ steps.check.outputs.size-mb }} MB across ${{ steps.check.outputs.version-count }} versions. Publishing will start failing soon - action needed.\nhttps://registry.npmjs.org/renovate" | |
| - name: Fail job if size is critical | |
| if: steps.check.outputs.status == 'critical' | |
| run: exit 50 |