-
Notifications
You must be signed in to change notification settings - Fork 225
147 lines (122 loc) · 3.52 KB
/
main.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
name: CI
on:
push:
branches: [master]
tags: ["*"]
pull_request:
branches: ["*"]
schedule:
- cron: '0 0 * * 3'
jobs:
format:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Install Erlang/Elixir
uses: erlef/setup-beam@v1
with:
otp-version: "26"
elixir-version: "1.15"
- name: Check cargo fmt
run: cargo fmt --all -- --check
- name: Check mix format (rustler_mix)
working-directory: rustler_mix
run: mix format --check-formatted
- name: Check mix format (rustler_tests)
working-directory: rustler_tests
run: mix format --check-formatted
build:
name: Build ${{matrix.os}} ${{matrix.toolchain}}
runs-on: ${{matrix.os}}-latest
strategy:
matrix:
os: [ubuntu, windows, macos]
toolchain: [stable, nightly]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{matrix.toolchain}}
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: rustler
- run: cargo build
clippy:
name: Clippy ${{matrix.os}}
runs-on: ${{matrix.os}}-latest
needs: [build]
strategy:
matrix:
os: [ubuntu, windows, macos]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
with:
shared-key: rustler
save-if: false
- run: cargo clippy --all-targets --all-features -- -D warnings
test:
name: OTP ${{matrix.pair.erlang}} / Elixir ${{matrix.pair.elixir}} / Rust ${{matrix.rust}} / OS ${{matrix.os}}
needs: [build]
strategy:
matrix:
pair:
- { erlang: "27", elixir: "1.17", latest: true }
- { erlang: "26", elixir: "1.17" }
- { erlang: "26", elixir: "1.16" }
- { erlang: "26", elixir: "1.15" }
- { erlang: "25", elixir: "1.15" }
- { erlang: "24", elixir: "1.14" }
rust:
- stable
- nightly
os:
- macos
- windows
- ubuntu
runs-on: ${{matrix.os}}-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Install Erlang/Elixir
uses: erlef/setup-beam@v1
with:
otp-version: ${{matrix.pair.erlang}}
elixir-version: ${{matrix.pair.elixir}}
if: "!startsWith(matrix.os, 'macos')"
- name: Install Erlang/Elixir with Brew
run: |
brew install elixir
mix local.hex --force
if: "startsWith(matrix.os, 'macos')"
- name: Install Rust ${{matrix.rust}} toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{matrix.rust}}
- uses: Swatinem/rust-cache@v2
with:
shared-key: rustler
save-if: false
- run: cargo test
- name: Test rustler_mix
working-directory: rustler_mix
run: |
mix deps.get
mix test
- name: Test rustler_tests
working-directory: rustler_tests
run: |
mix deps.get
mix test
- name: Test mix project with example created from template
working-directory: rustler_mix
run: ./test.sh
if: "startsWith(matrix.os, 'ubuntu') && matrix.pair.latest"