-
Notifications
You must be signed in to change notification settings - Fork 3
142 lines (120 loc) · 3.77 KB
/
publish.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
on:
push:
branches:
- master
pull_request:
branches:
- master
name: Test & Tag
jobs:
lint:
name: Linting (rustfmt + clippy)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Install rustup components (rustfmt, clippy)
run: rustup component add rustfmt clippy
- name: Run cargo fmt
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check
- name: Run clippy
uses: actions-rs/clippy-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
args: --all-features
coverage:
name: Test Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- name: cargo install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: cargo llvm-cov
run: cargo llvm-cov --locked --all-features --lcov --output-path lcov.info
- name: Record Rust version
run: echo "RUST=$(rustc --version)" >> "$GITHUB_ENV"
- name: Upload to codecov.io
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
env_vars: OS,RUST
test:
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout master branch
uses: actions/checkout@master
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Ensure all tests compile
uses: actions-rs/cargo@v1
with:
command: test
args: --no-run --all-features
- name: Ensure all doc tests compile
uses: actions-rs/cargo@v1
with:
command: test
args: --all-features --doc
- name: Run unit tests
uses: actions-rs/cargo@v1
with:
command: test
args: --lib
- name: Run integration tests
uses: actions-rs/cargo@v1
env:
HROBOT_USERNAME: ${{ secrets.HROBOT_USERNAME }}
HROBOT_PASSWORD: ${{ secrets.HROBOT_PASSWORD }}
HETZNER_INTEGRATION_TEST_SERVER_ID: ${{ secrets.HETZNER_INTEGRATION_TEST_SERVER_ID }}
HETZNER_INTEGRATION_TEST_STORAGEBOX_ID: ${{ secrets.HETZNER_INTEGRATION_TEST_STORAGEBOX_ID }}
with:
command: test
args: --tests
tag:
name: Tag & Publish
needs: [lint, test]
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Fetch the version from Cargo.toml
id: retrieve_tag
run: echo ::set-output name=crate-tag::$(cat Cargo.toml | grep version | head -n1 | awk '{ print $3 }' | tr -d '"')
shell: bash
- name: Publish crate to crates.io
uses: katyo/publish-crates@v2
with:
registry-token: ${{ secrets.CARGO_LOGIN_TOKEN }}
ignore-unpublished-changes: true
- name: Push the crate version as a tag
id: tag_version
uses: mathieudutour/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tag_prefix: ""
custom_tag: ${{ steps.retrieve_tag.outputs.crate-tag }}