-
Notifications
You must be signed in to change notification settings - Fork 4
138 lines (117 loc) · 3.69 KB
/
ci.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
name: Continuous Integration
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install protoc and grpcio-tools
run: |
sudo apt-get update
sudo apt-get install -y protobuf-compiler
cargo install grpcio-compiler
cargo-check:
name: Cargo check
runs-on: ubuntu-latest
needs: setup
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- uses: actions-rs/cargo@v1
with:
command: check
fmt-check:
name: Rust fmt
runs-on: ubuntu-latest
needs: setup
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- run: rustup component add rustfmt
- uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check
test-and-coverage:
name: Test and Coverage
runs-on: ubuntu-latest
needs: setup
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install dependencies
run: |
rustup self update
rustup update
cargo install cargo-tarpaulin
- name: Run tests with coverage
run: cargo tarpaulin --all-features --verbose
release-github-artifact:
name: Release Packaging
env:
PROJECT_NAME_UNDERSCORE: rust-server
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: [cargo-check, fmt-check, test-and-coverage]
steps:
- name: Check out from Git
uses: actions/checkout@v4
- name: Grant permission to run command
run: echo 'ACTIONS_ALLOW_UNSECURE_COMMANDS=true' >> $GITHUB_ENV
- name: Check if Git tag exists
run: echo "::set-env name=HEAD_TAG::$(git tag --points-at HEAD)"
- name: Skip if Git tag does not exist
if: steps.check-tag.outputs.HEAD_TAG == ''
run: exit 0 # Exit with success, effectively skipping subsequent steps
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Release Build
run: cargo build --release --bin cli
- name: "Upload Artifact"
uses: actions/upload-artifact@v4
with:
name: ${{ env.PROJECT_NAME_UNDERSCORE }}
path: target/release/cli
release-docker-image:
env:
DOCKER_HUB_REPOSITORY: thuan2172001/rust-server
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: [cargo-check, fmt-check, test-and-coverage]
steps:
- name: Check out from Git
uses: actions/checkout@v4
- name: Grant permission to run command
run: echo 'ACTIONS_ALLOW_UNSECURE_COMMANDS=true' >> $GITHUB_ENV
- name: Check if Git tag exists
run: echo "::set-env name=HEAD_TAG::$(git tag --points-at HEAD)"
- name: Skip if Git tag does not exist
if: steps.check-tag.outputs.HEAD_TAG == ''
run: exit 0 # Exit with success, effectively skipping subsequent steps
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push docker image
run: |
docker build . --tag ${{ env.DOCKER_HUB_REPOSITORY }}:latest
docker push ${{ env.DOCKER_HUB_REPOSITORY }}:latest