aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/release.yaml
blob: 278f5a5867587a30f55316c441b2daa870373417 (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
name: CI
on:
  pull_request:
  push:
    branches:
      - master
      - staging
      - trying

jobs:
  rust:
    name: Rust
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
    env:
      RUSTFLAGS: -D warnings
      CARGO_INCREMENTAL: 0
      RUN_SLOW_TESTS: 1
      RUSTUP_MAX_RETRIES: 10
      CARGO_NET_RETRY: 10
      PROFILE: release
    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
          override: true
          components: rustfmt, rust-src

      - name: Cache cargo registry
        uses: actions/cache@v1
        with:
          path: ~/.cargo/registry
          key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}

      - name: Cache cargo index
        uses: actions/cache@v1
        with:
          path: ~/.cargo/git
          key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}

      - name: Cache cargo target dir
        uses: actions/cache@v1
        with:
          path: target
          key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}

      - name: Compile
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --release

      - name: Test
        uses: actions-rs/cargo@v1
        with:
          command: test

      - name: Prepare cache
        run: cargo xtask pre-cache

      - name: Prepare cache 2
        if: matrix.os == 'windows-latest'
        run: Remove-Item ./target/${{ env.PROFILE }}/xtask.exe

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

      - name: Copy binaries (non-win)
        if: matrix.os != 'windows-latest'
        run: cp ./target/${{ env.PROFILE }}/ra_lsp_server* ./dist

      - name: Copy binaries (win)
        if: matrix.os == 'windows-latest'
        run: copy ./target/${{ env.PROFILE }}/ra_lsp_server.* ./dist

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

  type-script:
    name: TypeScript
    runs-on: ubuntu-latest
    env:
      CXX: g++-4.9
      CC: gcc-4.9
    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: Create distribution directory
        run: mkdir ./dist

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

      - name: Copy emacs mode
        run: cp -R ./editors/emacs ./dist/

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