diff --git a/.github/workflows/ci-lint-checks.yaml b/.github/workflows/ci-lint-checks.yaml index 36cc8236bc2..6a7691cb11e 100644 --- a/.github/workflows/ci-lint-checks.yaml +++ b/.github/workflows/ci-lint-checks.yaml @@ -117,3 +117,70 @@ jobs: - name: Run unit tests for scripts run: | SHUNIT2=.tools/shunit2 bash scripts/utils/compute-tags.test.sh + + binary-size-check: + runs-on: ubuntu-latest + steps: + - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + with: + egress-policy: audit + + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: + submodules: true + + - uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: 1.23.x + + - name: Setup Node.js version + uses: ./.github/actions/setup-node.js + + - name: Build jaeger binary + run: make build-jaeger + + - name: Calculate jaeger binary size + run: | + TOTAL_SIZE=$(du -sb ./cmd/jaeger/jaeger-linux-amd64 | cut -f1) + echo "$TOTAL_SIZE" > ./new_jaeger_binary_size.txt + echo "Total binary size: $TOTAL_SIZE bytes" + + - name: Restore previous binary size + id: cache-binary-size + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 #v4.2.0 + with: + path: ./jaeger_binary_size.txt + key: jaeger_binary_size + restore-keys: | + jaeger_binary_size + + - name: Compare jaeger binary sizes + if: steps.cache-binary-size.outputs.cache-hit == 'true' + run: | + OLD_BINARY_SIZE=$(cat ./jaeger_binary_size.txt) + NEW_BINARY_SIZE=$(cat ./new_jaeger_binary_size.txt) + echo "Previous binary size: $OLD_BINARY_SIZE bytes" + echo "New binary size: $NEW_BINARY_SIZE bytes" + + SIZE_CHANGE=$(( $NEW_BINARY_SIZE - $OLD_BINARY_SIZE )) + PERCENTAGE_CHANGE=$(( SIZE_CHANGE * 100 / $OLD_BINARY_SIZE )) + echo "Size change: $PERCENTAGE_CHANGE%" + if [ $PERCENTAGE_CHANGE -gt 2 ]; then + echo "❌ binary size increased by more than 2% ($PERCENTAGE_CHANGE%)" + exit 1 + else + echo "✅ binary size change is within acceptable range ($PERCENTAGE_CHANGE%)" + fi + + + - name: Remove previous *_binary_*.txt + run: | + rm -rf ./jaeger_binary_size.txt + mv ./new_jaeger_binary_size.txt ./jaeger_binary_size.txt + + - name: Save new jaeger binary size + if: ${{ (github.event_name == 'push') && (github.ref == 'refs/heads/main') }} + uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 #v4.2.0 + with: + path: ./jaeger_binary_size.txt + key: jaeger_binary_size_${{ github.run_id }} \ No newline at end of file