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
|
name: CI
on:
push:
branches: [main]
permissions:
contents: write
jobs:
Check:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
item:
[
build,
clippy,
test,
arg-picker,
markdown-code,
examples,
docs-refresh,
api-docs,
]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
- run: cargo ci --check-${{ matrix.item }}
- name: Upload docs test result on failure
if: failure() && matrix.item == 'markdown-code'
uses: actions/upload-artifact@v4
with:
name: docs-test-result-${{ matrix.os }}.md
path: .temp/DOCS-TEST-RESULT.md
# Build the distributable packages in parallel with the checks, so that the
# `unreleased` tag and the Pages deployment always publish fresh artifacts.
Build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Compute package metadata
id: metadata
shell: bash
run: |
case "$RUNNER_OS" in
Windows) os="win" ;;
Linux) os="linux" ;;
macOS) os="mac" ;;
esac
echo "os=$os" >> "$GITHUB_OUTPUT"
- name: Install mling
shell: bash
run: |
if [ "$RUNNER_OS" = "Windows" ]; then
powershell -ExecutionPolicy Bypass -File .run/src/bin/install-mling.ps1
else
bash .run/src/bin/install-mling.sh
fi
- name: Package mling
shell: bash
run: |
mkdir -p dist
name="mling-${{ steps.metadata.outputs.os }}.tar.gz"
tar -czf "dist/$name" -C .temp/mling .
if command -v sha256sum >/dev/null 2>&1; then
(cd dist && sha256sum "$name" > "$name.sha256")
else
(cd dist && shasum -a 256 "$name" > "$name.sha256")
fi
- name: Upload mling package
uses: actions/upload-artifact@v4
with:
name: mling-${{ steps.metadata.outputs.os }}-pkg
path: dist/
if-no-files-found: error
Move-Unreleased-Tag:
if: github.ref == 'refs/heads/main'
needs: [Check, Build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- run: |
git tag -f unreleased
git push origin unreleased --force
Deploy-Github-Pages:
needs: [Move-Unreleased-Tag]
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Install nightly toolchain
run: rustup toolchain install nightly
- name: Build API docs
run: cargo +nightly run --manifest-path .run/Cargo.toml --bin deploy-api-docs -- --docsrs
- name: Install cargo-llvm-cov
run: cargo install --git https://github.com/Weicao-CatilGrass/cargo-llvm-cov cargo-llvm-cov
- name: Run cov-test
run: cargo run --manifest-path .run/Cargo.toml --bin cov-test
- name: Delete .temp directory before deployment
run: rm -rf .temp
- name: Download mling packages
uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: "."
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
|