-
-
Notifications
You must be signed in to change notification settings - Fork 26
166 lines (142 loc) · 3.96 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
name: CI + CD
on:
pull_request:
push:
branches:
- main
workflow_dispatch:
# Make sure CI fails on all warnings, including Clippy lints
env:
RUSTFLAGS: "-Dwarnings"
jobs:
lint: # Also checks formatting.
name: Run lint
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup env
uses: ./.github/actions/setup-env
with:
rust_cache_key: cargo
rust_components: clippy, rustfmt
- uses: actions/cache@v4
with:
path: |
~/.cache/pre-commit
key:
${{ runner.os }}-pre-commit-${{
hashFiles('**/.pre-commit-config.yaml') }}
- name: Run lint
run: |
just pre-commit
just lint
unit:
name: Run unit test
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup env
uses: ./.github/actions/setup-env
with:
rust_cache_key: cargo
- name: Run unit test
run: just test
build:
name: Build release
needs:
- lint
- unit
strategy:
matrix:
build:
- linux
- macos
include:
- build: linux
os: ubuntu-latest
target: x86_64-unknown-linux-musl
- build: macos
os: macos-latest
target: x86_64-apple-darwin
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup env
uses: ./.github/actions/setup-env
with:
rust_cache_key: cross
rust_target: ${{ matrix.target }}
- name: Build release
run: |
just get-cross
just cross ${{ matrix.target }}
- name: Upload binary artifact
uses: actions/upload-artifact@v4
with:
name: pls-${{ matrix.target }}
path: target/${{ matrix.target }}/release/pls
docs:
name: Publish docs
runs-on: ubuntu-latest
needs:
- build
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup env
uses: ./.github/actions/setup-env
with:
rust_cache_key: docs
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: pls-x86_64-unknown-linux-musl
path: /tmp/pls
- name: Make binary accessible and executable
run: |
chmod +x /tmp/pls/pls
echo "/tmp/pls" >> $GITHUB_PATH
# This must be a separate step because `$PATH` changes are not reflected
# immediately.
- name: Ensure binary is accessible
run: pls --version
- name: Setup PDM
uses: pdm-project/setup-pdm@v4
with:
cache: true
python-version-file: examples/pyproject.toml
cache-dependency-path: examples/pdm.lock
- name: Enable Corepack
run: corepack enable pnpm
- name: Setup Node.js
uses: actions/setup-node@v4
with:
cache: pnpm
node-version-file: docs/package.json
cache-dependency-path: docs/pnpm-lock.yaml
- name: Install all dependencies
run: just install
- name: Generate examples
working-directory: examples/
run: just all
- name: Build and publish docs
if: github.event_name == 'push'
working-directory: docs/
run: |
pnpm build
cd dist
git init --initial-branch=gh-pages
git config user.name "Dhruv Bhanushali"
git config user.email "[email protected]"
git add .
git commit --message "Build documentation"
git remote add origin https://x-access-token:${{ secrets.ACCESS_TOKEN }}@github.com/pls-rs/pls-rs.github.io.git
git push --force origin gh-pages