aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/push-test.yml
blob: ae0eb662c87e46d1687b4478a9101e306a18ce9b (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
name: "test-on-push"
on:
  push:
  pull_request:
  schedule:
    - cron: "0 0 * * 0" # Run weekly to cover rust toolchain updates

jobs:
  # Ensure version numbers in various places match up
  ensure-same-version:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - name: install dependencies
        run: |
          pip install toml
      - name: Run check
        run: |
          python3 scripts/check_version_numbers.py

  # Ensure correct Rust code formatting
  formatting:
    name: format-check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          components: rustfmt
      - name: Format check
        run: cargo fmt --manifest-path src-tauri/Cargo.toml --all -- --check

  clippy:
    strategy:
      fail-fast: false
      matrix:
        platform: [ubuntu-22.04, windows-latest]

    name: clippy-check
    runs-on: ${{ matrix.platform }}
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          components: clippy
      - name: install dependencies (ubuntu only)
        if: matrix.platform == 'ubuntu-22.04'
        run: |
          sudo apt-get update
          sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
      - name: Create dist folder (Ubuntu only)
        if: matrix.platform == 'ubuntu-22.04'
        run: mkdir --parent src-vue/dist
      - name: Create dist folder (Windows only)
        if: matrix.platform == 'windows-latest'
        run: New-Item -ItemType Directory -Force -Path "src-vue\dist"
      - name: Run clippy
        run: cargo clippy --manifest-path src-tauri/Cargo.toml -- --no-deps --deny warnings

  # Ensure committed bindings correct
  autogen-ts-bindings-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
      - name: install dependencies (ubuntu only)
        run: |
          sudo apt-get update
          sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev

      - name: Move original TypeScript bindings
        run: |
          cp -r src-tauri/bindings original-bindings
          rm -r src-tauri/bindings

      - name: Create empty dist folder # Otherwise tests fail
        run: mkdir src-vue/dist

      - name: Run Tests
        run: cargo test --manifest-path src-tauri/Cargo.toml

      - name: Compare TypeScript Bindings
        run: |
          diff -r src-tauri/bindings original-bindings
          if [[ $? -ne 0 ]]; then
              echo "Generated bindings are different from committed bindings"
              exit 1
          fi

  test-tauri:
    needs: ensure-same-version
    strategy:
      fail-fast: false
      matrix:
        platform: [ubuntu-22.04, windows-latest]

    runs-on: ${{ matrix.platform }}
    steps:
    - uses: actions/checkout@v4
    - name: setup node
      uses: actions/setup-node@v4
      with:
        node-version: 16
    - uses: dtolnay/rust-toolchain@stable
      with:
        toolchain: stable
    - name: install dependencies (ubuntu only)
      if: matrix.platform == 'ubuntu-22.04'
      run: |
        sudo apt-get update
        sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
    - name: Disable self-updater
      shell: bash
      run: |
        jq '.tauri.updater.active = false' src-tauri/tauri.conf.json > src-tauri/tauri.conf.json.new
        rm src-tauri/tauri.conf.json
        mv src-tauri/tauri.conf.json.new src-tauri/tauri.conf.json
    - uses: Swatinem/rust-cache@v2 # Cache Rust build artifacts
      with:
        workspaces: |
          src-tauri
    - name: install app dependencies and build it
      env:
        TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
      run: |
        npm clean-install
        cd src-vue && npm clean-install && cd ..
        npm run tauri build
    - uses: tauri-apps/tauri-action@v0
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
    - name: Upload Linux artifact
      if: matrix.platform == 'ubuntu-22.04'
      uses: actions/upload-artifact@v3
      with:
        name: linux-artifacts
        path: |
          src-tauri/target/release/bundle/appimage/*
    - name: Upload Linux AppImage
      if: matrix.platform == 'ubuntu-22.04'
      uses: actions/upload-artifact@v3
      with:
        name: linux-appimage
        path: |
          src-tauri/target/release/bundle/appimage/*.AppImage
    - name: Upload Windows artifact
      if: matrix.platform == 'windows-latest'
      uses: actions/upload-artifact@v3
      with:
        name: windows-artifacts
        path: |
          src-tauri/target/release/bundle/msi/*
          src-tauri/target/release/app.pdb
    - name: Additionally upload Windows installer separately
      if: matrix.platform == 'windows-latest'
      uses: actions/upload-artifact@v3
      with:
        name: windows-msi
        path: |
          src-tauri/target/release/bundle/msi/*.msi