| 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@v4 |
| 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@v4 |
| |
| - name: Restore cargo cache |
| uses: actions/cache@v4 |
| 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@v4 |
| 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-13.0.0, webrender-2022, diesel-1.4.8, hyper-0.14.18] |
| runs-on: ubuntu-latest |
| needs: [setup_cargo, build_metrics] |
| |
| steps: |
| - name: Checkout repository |
| uses: actions/checkout@v4 |
| |
| - name: Restore cargo cache |
| uses: actions/cache@v4 |
| 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@v4 |
| 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@v4 |
| |
| - 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-13.0.0 metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: ripgrep-13.0.0-${{ github.sha }} |
| |
| - name: Download webrender-2022 metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: webrender-2022-${{ github.sha }} |
| |
| - name: Download diesel-1.4.8 metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: diesel-1.4.8-${{ github.sha }} |
| |
| - name: Download hyper-0.14.18 metrics |
| uses: actions/download-artifact@v3 |
| with: |
| name: hyper-0.14.18-${{ github.sha }} |
| |
| - name: Combine json |
| run: | |
| mkdir ~/.ssh |
| echo "${{ secrets.METRICS_DEPLOY_KEY }}" > ~/.ssh/id_ed25519 |
| chmod 600 ~/.ssh/id_ed25519 |
| chmod 700 ~/.ssh |
| |
| git clone --depth 1 git@github.com:rust-analyzer/metrics.git |
| jq -s ".[0] * .[1] * .[2] * .[3] * .[4] * .[5]" build.json self.json ripgrep-13.0.0.json webrender-2022.json diesel-1.4.8.json hyper-0.14.18.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 |