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
|
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
Move-Unreleased-Tag:
if: github.ref == 'refs/heads/main'
needs: [Check]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- run: |
git tag -f unreleased
git push origin unreleased --force
Package-Mling:
needs: [Move-Unreleased-Tag]
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 artifact 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"
echo "short_sha=${GITHUB_SHA:0:8}" >> "$GITHUB_OUTPUT"
echo "date=$(date +%y-%m-%d)" >> "$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
id: package
shell: bash
run: |
mkdir -p dist
name="mling-${{ steps.metadata.outputs.os }}-${{ steps.metadata.outputs.short_sha }}-${{ steps.metadata.outputs.date }}.tar.gz"
tar -czf "dist/$name" -C .temp/mling .
echo "artifact_name=${name%.tar.gz}" >> "$GITHUB_OUTPUT"
- name: Upload mling artifact
uses: actions/upload-artifact@v4
with:
name: ${{ steps.package.outputs.artifact_name }}
path: dist/mling-*.tar.gz
if-no-files-found: error
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: 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
|