-
Notifications
You must be signed in to change notification settings - Fork 2
176 lines (139 loc) · 3.88 KB
/
ci.yml
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
name: Continuous integration
on: [push, pull_request]
jobs:
assets:
name: Build assets
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9
run_install: false
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install JS dependencies
run: pnpm install
- name: Format UI assets
run: pnpm fmt:check
- name: Build UI assets
run: pnpm build
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Cache Rust
uses: ./.github/actions/cargo-cache
with:
key: assets
- name: Convert assets to Rust
run: cargo xtask assets
- name: Upload assets
uses: actions/upload-artifact@v4
with:
name: assets
path: src/html/assets.rs
build:
name: Build
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- 1.77 # MSRV
- stable
- nightly
needs: assets
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download assets
uses: actions/download-artifact@v4
with:
name: assets
path: src/html
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name: Cache Rust
uses: ./.github/actions/cargo-cache
with:
key: build-${{ matrix.rust }}
- name: Build code
run: cargo build
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.rust }}
path: target/debug/margo
check:
name: Check
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download assets
uses: actions/download-artifact@v4
with:
name: assets
path: src/html
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: rustfmt, clippy
- name: Cache Rust
uses: ./.github/actions/cargo-cache
with:
key: check
lockfiles: |-
Cargo.lock
conformance/Cargo.lock
targets: |-
target
conformance/target
- name: Download binary
uses: actions/download-artifact@v4
with:
name: binary-stable
path: .
- name: Register binary
run: |
MARGO_BINARY="$(pwd)/margo"
chmod +x "${MARGO_BINARY}"
echo "MARGO_BINARY=${MARGO_BINARY}" >> $GITHUB_ENV
echo "${MARGO_BINARY}"
"${MARGO_BINARY}" --help
- name: Format code
run: cargo fmt --all -- --check
- name: Lint code
run: cargo clippy --workspace --all-targets -- -D warnings
- name: Test binary
run: cargo test
- name: Test conformance
run: cd conformance && cargo run
- name: Install Ruby
uses: ruby/setup-ruby@v1
with:
working-directory: integration-tests
bundler-cache: true
- name: Lint UI Tests
run: cd integration-tests && bundle exec rubocop
- name: Test UI
run: cd integration-tests && bundle exec rspec