| name: metrics |
| on: |
| push: |
| branches: |
| - master |
| |
| env: |
| CARGO_INCREMENTAL: 0 |
| CARGO_NET_RETRY: 10 |
| RUSTFLAGS: "-D warnings -W unreachable-pub" |
| RUSTUP_MAX_RETRIES: 10 |
| |
| jobs: |
| setup_cargo: |
| if: github.repository == 'rust-lang/rust-analyzer' |
| runs-on: ubuntu-latest |
| steps: |
| - name: Install Rust toolchain |
| run: | |
| rustup update --no-self-update stable |
| rustup component add rustfmt rust-src |
| rustup default stable |
| - name: Cache cargo |
| uses: actions/cache@v3 |
| with: |
| path: | |
| ~/.cargo/bin/ |
| ~/.cargo/registry/index/ |
| ~/.cargo/registry/cache/ |
| ~/.cargo/git/db/ |
| key: ${{ runner.os }}-cargo-${{ github.sha }} |
| |
| build_metrics: |
| runs-on: ubuntu-latest |
| needs: setup_cargo |
| |
| steps: |
| - name: Checkout repository |
| uses: actions/checkout@v3 |
| |
| - name: Restore cargo cache |
| uses: actions/cache@v3 |
| with: |
| path: | |
| ~/.cargo/bin/ |
| ~/.cargo/registry/index/ |
| ~/.cargo/registry/cache/ |
| ~/.cargo/git/db/ |
| key: ${{ runner.os }}-cargo-${{ github.sha }} |
| |
| - name: Collect build metrics |
| run: cargo xtask metrics build |
| |
| - name: Cache target |
| uses: actions/cache@v3 |
| with: |
| path: target/ |
| key: ${{ runner.os }}-target-${{ github.sha }} |
| |
| - name: Upload build metrics |
| uses: actions/upload-artifact@v3 |
| with: |
| name: build-${{ github.sha }} |
| path: target/build.json |
| if-no-files-found: error |
| |
| other_metrics: |
| strategy: |
| matrix: |
| names: [self, ripgrep, webrender, diesel] |
| runs-on: ubuntu-latest |
| needs: [setup_cargo, build_metrics] |
| |
| steps: |
| - name: Checkout repository |
| uses: actions/checkout@v3 |
| |
| - name: Restore cargo cache |
| uses: actions/cache@v3 |
| with: |
| path: | |
| ~/.cargo/bin/ |
| ~/.cargo/registry/index/ |
| ~/.cargo/registry/cache/ |
| ~/.cargo/git/db/ |
| key: ${{ runner.os }}-cargo-${{ github.sha }} |
| |
| - name: Restore target cache |
| uses: actions/cache@v3 |
| with: |
| path: target/ |
| key: ${{ runner.os }}-target-${{ github.sha }} |
| |
| - name: Collect metrics |
| run: cargo xtask metrics ${{ matrix.names }} |
| |
| - name: Upload metrics |
| uses: actions/upload-artifact@v3 |
| with: |
| name: ${{ matrix.names }}-${{ github.sha }} |
| path: target/${{ matrix.names }}.json |
| if-no-files-found: error |
| |
| generate_final_metrics: |
| runs-on: ubuntu-latest |
| needs: [build_metrics, other_metrics] |
| steps: |
| - name: Checkout repository |
| uses: actions/checkout@v3 |
| |
| - name: Download build metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: build-${{ github.sha }} |
| |
| - name: Download self metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: self-${{ github.sha }} |
| |
| - name: Download ripgrep metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: ripgrep-${{ github.sha }} |
| |
| - name: Download webrender metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: webrender-${{ github.sha }} |
| |
| - name: Download diesel metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: diesel-${{ github.sha }} |
| |
| - name: Combine json |
| run: | |
| git clone --depth 1 https://$METRICS_TOKEN@github.com/rust-analyzer/metrics.git |
| jq -s ".[0] * .[1] * .[2] * .[3] * .[4]" build.json self.json ripgrep.json webrender.json diesel.json -c >> metrics/metrics.json |
| cd metrics |
| git add . |
| git -c user.name=Bot -c user.email=dummy@example.com commit --message 📈 |
| git push origin master |
| env: |
| METRICS_TOKEN: ${{ secrets.METRICS_TOKEN }} |