name: Check code size

on:
  push:
  pull_request:
    paths:
      - '.github/workflows/*.yml'
      - 'tools/**'
      - 'py/**'
      - 'extmod/**'
      - 'shared/**'
      - 'lib/**'
      - 'ports/bare-arm/**'
      - 'ports/mimxrt/**'
      - 'ports/minimal/**'
      - 'ports/rp2/**'
      - 'ports/samd/**'
      - 'ports/stm32/**'
      - 'ports/unix/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 100
    - name: Install packages
      run: source tools/ci.sh && ci_code_size_setup
    - name: Build
      run: source tools/ci.sh && ci_code_size_build
    - name: Compute code size difference
      run: tools/metrics.py diff ~/size0 ~/size1 | tee diff
    - name: Save PR number
      if: github.event_name == 'pull_request'
      env:
        PR_NUMBER: ${{ github.event.number }}
      run: echo $PR_NUMBER > pr_number
    - name: Upload diff
      if: github.event_name == 'pull_request'
      uses: actions/upload-artifact@v4
      with:
        name: code-size-report
        path: |
          diff
          pr_number
        retention-days: 1
