-
Notifications
You must be signed in to change notification settings - Fork 0
145 lines (125 loc) · 4.14 KB
/
rust.yaml
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
name: Build and Release
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
CARGO_TERM_COLOR: always
jobs:
check:
name: Check Project Integrity
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
default: true
components: clippy, rustfmt
- name: Cargo Format
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check
- name: Cargo Clippy
uses: actions-rs/cargo@v1
with:
command: clippy
- name: Cargo Tarpaulin XML Report
uses: actions-rs/[email protected]
with:
version: '0.19.1'
out-type: Xml
args: '--ignore-config --ignore-tests'
- name: Archive Code Coverage Results
uses: actions/upload-artifact@v4
with:
name: code-coverage-report
path: cobertura.xml
integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Build & optimize WASM
run: make optimize
- name: Set up Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
default: true
- name: Run integration test
uses: actions-rs/cargo@v1
with:
command: test
args: >
--package asset-classification-smart-contract
--test integration_tests
--
--include-ignored
--exact --show-output
release:
name: Release Project Files
needs: [ check, integration-tests ]
runs-on: ubuntu-latest
if: ${{ github.ref == 'refs/heads/main' }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Release Version
run: |
APP_VERSION=$(cargo metadata | jq -r '.packages[] | select(.name == "asset-classification-smart-contract") | .version')
echo "Using application version v$APP_VERSION for release"
echo "RELEASE_VERSION=v$APP_VERSION" >> $GITHUB_ENV
- name: Check Release is New Version
run: |
TAG_EXISTS=$((git show-ref --tags "$RELEASE_VERSION") || echo "")
if [ $TAG_EXISTS ]; then
echo "Found existing Github tag [$RELEASE_VERSION]. Skipping release.";
else
echo "Tag [$RELEASE_VERSION] has not yet been used. Continuing with release";
fi
echo "TAG_EXISTS=$TAG_EXISTS" >> $GITHUB_ENV
- name: Generate Rust Docs
if: ${{ !env.TAG_EXISTS }}
uses: actions-rs/cargo@v1
with:
command: doc
args: --no-deps
- name: Stage Cargo Docs
if: ${{ !env.TAG_EXISTS }}
run: |
# Add redirect page to inner doc index
echo "<meta http-equiv=\"refresh\" content=\"0; url=asset_classification_smart_contract\">" >> ./target/doc/index.html
# Create doc deployment location
mkdir ./pages-files
# Move documentation to its configured location in settings
cp -r target/doc ./pages-files/docs
- name: Deploy Docs to GitHub Pages
if: ${{ !env.TAG_EXISTS }}
uses: JamesIves/[email protected]
with:
branch: gh-pages
folder: pages-files
- name: Build and Optimize WASM
# No need to create the release WASM if the version hasn't changed and no new release will be made
if: ${{ !env.TAG_EXISTS }}
run: |
# Build the WASM output in the artifacts directory
make optimize
- name: Release WASM
uses: softprops/action-gh-release@v1
# Only upload a new release if the attempted tag does not yet exist
if: ${{ !env.TAG_EXISTS }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
name: ${{ env.RELEASE_VERSION }}
tag_name: ${{ env.RELEASE_VERSION }}
files: |
artifacts/asset_classification_smart_contract.wasm
artifacts/checksums.txt