aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/release.yaml
blob: 8e4c9adb30e3a99c947516107d4244d1994c6bbc (plain)
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
name: CI-Release
on:
  push:
    branches:
      - release

jobs:
  build-server:
    name: build-server
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
    env:
      RUSTFLAGS: -D warnings
      CARGO_INCREMENTAL: 0
      RUSTUP_MAX_RETRIES: 10
      CARGO_NET_RETRY: 10
    steps:

      - name: Checkout repository
        uses: actions/checkout@v1

      # We need to disable the existing toolchain to avoid updating rust-docs
      # which takes a long time. The fastest way to do this is to rename the
      # existing folder, as deleting it takes about as much time as not doing
      # anything and just updating rust-docs.
      - name: Rename existing rust toolchain (Windows)
        if: matrix.os == 'windows-latest'
        run: Rename-Item C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc.old

      - name: Install Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          target: x86_64-unknown-linux-musl
          override: true

      - name: Build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --package ra_lsp_server --bin ra_lsp_server --target x86_64-unknown-linux-musl --release

      - name: Strip symbols
        if: matrix.os == 'ubuntu-latest'
        run: strip ./target/release/ra_lsp_server

      - name: Create distribution dir
        run: mkdir ./dist

      - name: Copy binary
        if: matrix.os == 'ubuntu-latest'
        run: cp ./target/release/ra_lsp_server ./dist/ra_lsp_server-linux

      - name: Copy binary
        if: matrix.os == 'macos-latest'
        run: cp ./target/release/ra_lsp_server ./dist/ra_lsp_server-mac

      - name: Copy binary
        if: matrix.os == 'windows-latest'
        run: copy ./target/release/ra_lsp_server.exe ./dist/ra_lsp_server-windows.exe

      - name: Upload artifacts
        uses: actions/upload-artifact@v1
        with:
          name: server-${{ matrix.os }}
          path: ./dist

  build-clients:
    name: build-clients
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v1

      - name: Install Nodejs
        uses: actions/setup-node@v1
        with:
          node-version: 12.x

      - run: npm ci
        working-directory: ./editors/code

      - run: npm run package --scripts-prepend-node-path
        working-directory: ./editors/code

      - name: Copy vscode extension
        run: mkdir -p ./dist/code && cp ./editors/code/*.vsix ./dist/

      - name: Copy emacs mode
        run: cp ./editors/emacs/rust-analyzer.el ./dist/rust-analyzer.el

      - name: Upload artifacts
        uses: actions/upload-artifact@v1
        with:
          name: editor-plugins
          path: ./dist

  make-release:
    name: make-release
    runs-on: ubuntu-latest
    needs: ['build-server', 'build-clients']
    steps:
      - uses: actions/download-artifact@v1
        with:
          name: editor-plugins
          path: dist
      - uses: actions/download-artifact@v1
        with:
          name: server-macos-latest
          path: dist
      - uses: actions/download-artifact@v1
        with:
          name: server-ubuntu-latest
          path: dist
      - uses: actions/download-artifact@v1
        with:
          name: server-windows-latest
          path: dist
      - run: ls -all ./dist

      - run: echo "::set-env name=TAG::$(date --iso)"
      - run: 'echo "TAG: $TAG"'

      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ env.TAG }}
          release_name: ${{ env.TAG }}
          draft: false
          prerelease: false

      - uses: actions/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dist/ra_lsp_server-linux
          asset_name: ra_lsp_server-linux
          asset_content_type: application/octet-stream

      - uses: actions/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dist/ra_lsp_server-mac
          asset_name: ra_lsp_server-mac
          asset_content_type: application/octet-stream

      - uses: actions/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dist/ra_lsp_server-windows.exe
          asset_name: ra_lsp_server-windows.exe
          asset_content_type: application/octet-stream

      - uses: actions/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dist/rust-analyzer-0.1.0.vsix
          asset_name: rust-analyzer-0.1.0.vsix
          asset_content_type: application/octet-stream

      - uses: actions/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dist/rust-analyzer.el
          asset_name: rust-analyzer.el
          asset_content_type: text/plain