-
Notifications
You must be signed in to change notification settings - Fork 0
148 lines (134 loc) · 4.27 KB
/
cd.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
143
144
145
146
147
148
name: cd
on:
push:
tags:
- "*.*.*"
env:
IMAGE_NAME: rapiddb
IMAGE_CACHE: ghcr.io/kruserr/rapiddb/rapiddb:cache
jobs:
rustfmt:
name: Formatting
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Formatting
run: cargo fmt --all -- --check
clippy:
name: Lint
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cache
uses: Swatinem/rust-cache@v2
- name: Lint
run: cargo clippy --all-targets --all-features -- -Dwarnings
test:
name: Test
runs-on: ubuntu-22.04
steps:
- name: Checkout
if: github.event_name != 'pull_request'
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Checkout
if: github.event_name == 'pull_request'
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Cache
uses: Swatinem/rust-cache@v2
- name: Setup cargo-tarpaulin
run: |
curl -s https://api.github.com/repos/xd009642/tarpaulin/releases/tags/0.22.0 | \
grep "browser_download_url.*tar.gz" | cut -d : -f 2,3 | tr -d \" | wget -qi -
tar -xzf cargo-tarpaulin-*.tar.gz
mv cargo-tarpaulin ~/.cargo/bin/
- name: Run tests
run: cargo tarpaulin --out Xml --verbose
- name: Upload reports to codecov
continue-on-error: true
uses: codecov/codecov-action@v3
with:
name: code-coverage-report
file: cobertura.xml
flags: unit-tests
fail_ci_if_error: true
verbose: true
publish-crates-io:
name: Publish on crates.io
needs:
- rustfmt
- clippy
- test
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cache
uses: Swatinem/rust-cache@v2
- name: Publish
run: |
cargo publish -p rapiddb --token ${{ secrets.CARGO_TOKEN }}
cargo publish -p rapiddb-web --token ${{ secrets.CARGO_TOKEN }}
publish-docker:
name: Publish on GitHub Packages and Docker Hub
needs:
- rustfmt
- clippy
- test
runs-on: ubuntu-22.04
if: github.event_name == 'push'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Cache Docker layers
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Extract version
id: extract_version
run: |
VERSION=${GITHUB_REF#refs/tags/}
echo "::set-output name=version::${VERSION}"
echo "::set-output name=major::${VERSION%%.*}"
echo "::set-output name=minor::${VERSION%.*}"
echo "::set-output name=patch::${VERSION##*.}"
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./tooling/Dockerfile
push: true
tags: |
ghcr.io/${{ github.repository }}:latest
ghcr.io/${{ github.repository }}:${{ steps.extract_version.outputs.version }}
ghcr.io/${{ github.repository }}:${{ steps.extract_version.outputs.major }}
ghcr.io/${{ github.repository }}:${{ steps.extract_version.outputs.minor }}
docker.io/${{ github.repository }}:latest
docker.io/${{ github.repository }}:${{ steps.extract_version.outputs.version }}
docker.io/${{ github.repository }}:${{ steps.extract_version.outputs.major }}
docker.io/${{ github.repository }}:${{ steps.extract_version.outputs.minor }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache