Unnamed repository; edit this file 'description' to name the repository.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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
      - 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://[email protected]/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 [email protected] commit --message 📈
        git push origin master
    env:
      METRICS_TOKEN: ${{ secrets.METRICS_TOKEN }}