forked from vsilent/stackdog
-
Notifications
You must be signed in to change notification settings - Fork 0
134 lines (111 loc) · 3.5 KB
/
Copy pathdocker.yml
File metadata and controls
134 lines (111 loc) · 3.5 KB
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
name: Docker CICD
on:
push:
branches: [main, dev]
pull_request:
branches: [main, dev]
jobs:
build:
name: Build & Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
targets: x86_64-unknown-linux-musl
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
- name: Install cross
run: cargo install cross --git https://github.com/cross-rs/cross
- name: Generate Secret Key
run: head -c16 /dev/urandom > src/secret.key
- name: Check
run: cargo check
- name: Format check
run: cargo fmt --all -- --check
- name: Clippy
run: cargo clippy -- -D warnings
- name: Test
run: cargo test
- name: Build static release
env:
CARGO_TARGET_DIR: target-cross
STACKDOG_GIT_HASH: ${{ github.sha }}
run: cross build --release --target x86_64-unknown-linux-musl
- name: Build frontend
working-directory: ./web
run: |
if [ -f package-lock.json ]; then
npm ci
else
npm install
fi
npm run build
- name: Package app
run: |
mkdir -p app/stackdog/dist
cp target-cross/x86_64-unknown-linux-musl/release/stackdog app/stackdog/
cp -a web/dist/. app/stackdog/
cp docker/prod/Dockerfile app/Dockerfile
touch app/.env
tar -czf app.tar.gz -C app .
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: app-archive
path: app.tar.gz
retention-days: 1
docker:
name: Docker Build & Push
runs-on: ubuntu-latest
needs: build
steps:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: app-archive
- name: Extract archive
run: tar -xzf app.tar.gz
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
trydirect/stackdog:latest
trydirect/stackdog:${{ github.sha }}
docker-ui:
name: Dashboard Image Build & Push
runs-on: ubuntu-latest
# Independent of the Rust build: the dashboard is its own image, and there
# is no reason to wait on a cross-compile to publish it.
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
if: github.event_name == 'push'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# No build args: the image is generic and reads its API address from the
# environment at container start.
- name: Build and push dashboard
uses: docker/build-push-action@v6
with:
context: .
file: docker/ui/Dockerfile
push: ${{ github.event_name == 'push' }}
tags: |
trydirect/stackdog-ui:latest
trydirect/stackdog-ui:${{ github.sha }}