-
Notifications
You must be signed in to change notification settings - Fork 38
160 lines (135 loc) · 4.64 KB
/
ci.yml
File metadata and controls
160 lines (135 loc) · 4.64 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
name: Anvil CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
permissions:
contents: write
packages: write
jobs:
build-and-test:
runs-on: worka-l1
services:
postgres:
image: postgres:17-alpine
env:
POSTGRES_USER: worka
POSTGRES_PASSWORD: worka
POSTGRES_DB: worka
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
MAINTENANCE_DATABASE_URL: postgres://worka:worka@localhost:5432/worka
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v3
- name: Install Protoc
uses: arduino/setup-protoc@v2
with:
version: "25.x"
- name: Cache Cargo dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Build Release Binaries (Native Linux)
run: cargo build --release --workspace
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Compute test image tag
id: img
run: echo "tag=anvil:test-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" >> $GITHUB_OUTPUT
- name: Build Docker Image for Testing
uses: docker/build-push-action@v5
with:
context: .
file: anvil/Dockerfile
# Triggers Error: buildx failed with: ERROR: failed to build: docker exporter does not currently support exporting manifest lists
# https://github.com/docker/buildx/issues/59
load: true #When ARM support is re-enabled, this needs to be disabled
push: false
tags: anvil:test
# # platforms: linux/amd64,linux/arm64
platforms: linux/amd64
- name: Wait for PostgreSQL to be ready
run: |
until pg_isready -h localhost -p 5432 -U postgres; do
echo "Waiting for PostgreSQL..."
sleep 2
done
echo "PostgreSQL is ready."
- name: Run All Tests
env:
ANVIL_IMAGE: anvil:test
run: cargo test -- --nocapture
# --- Release Steps ---
# These steps will only run on a successful push to the main branch.
- name: Log in to GitHub Container Registry
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate release tag
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
id: tag
run: echo "tag_name=v$(date +'%Y.%m.%d-%H%M%S')" >> $GITHUB_OUTPUT
- name: Extract metadata for Docker
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=raw,value=${{ steps.tag.outputs.tag_name }}
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and Push Final Docker Image
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: docker/build-push-action@v5
with:
context: .
file: anvil/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# platforms: linux/amd64,linux/arm64
platforms: linux/amd64
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Prepare Release Assets
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
mkdir -p release
docker cp $(docker create ${{ steps.meta.outputs.tags }}):/usr/local/bin/anvil-cli release/anvil
docker cp $(docker create ${{ steps.meta.outputs.tags }}):/usr/local/bin/admin release/anvil-admin
- name: Create GitHub Release
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.tag.outputs.tag_name }}
generate_release_notes: true
body: |
## Docker Image
You can pull the latest image using the following command:
```sh
docker pull ghcr.io/${{ github.repository }}:${{ steps.tag.outputs.tag_name }}
```
files: |
release/anvil
release/anvil-admin