-
Notifications
You must be signed in to change notification settings - Fork 0
157 lines (129 loc) · 4.01 KB
/
Copy pathrelease.yml
File metadata and controls
157 lines (129 loc) · 4.01 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
name: Release
on:
push:
tags:
- v*
concurrency:
group: release-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write
jobs:
verify:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:17-alpine
env:
POSTGRES_USER: sqlc
POSTGRES_PASSWORD: sqlc
POSTGRES_DB: sqlc_test
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- name: Install sqlc
uses: sqlc-dev/setup-sqlc@v5
with:
sqlc-version: "1.30.0"
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-wasip1
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Format check
run: cargo fmt --all --check
- name: Clippy
run: cargo clippy --workspace --all-targets -- -D warnings
- name: Snapshot tests
run: cargo test --workspace
env:
INSTA_UPDATE: unseen
- name: Build release WASM plugin
run: cargo build --release --target wasm32-wasip1
- name: Integration tests
run: cargo test -p basic
env:
DATABASE_URL: postgres://sqlc:sqlc@localhost:5432/sqlc_test
publish-release:
needs: verify
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-wasip1
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build release WASM plugin
run: cargo build --release --target wasm32-wasip1
- name: Package release assets
run: |
mkdir -p dist
cp target/wasm32-wasip1/release/sqlc-gen-sqlx.wasm dist/sqlc-gen-sqlx.wasm
if command -v sha256sum >/dev/null 2>&1; then
sha256sum dist/sqlc-gen-sqlx.wasm > dist/sqlc-gen-sqlx.wasm.sha256
else
shasum -a 256 dist/sqlc-gen-sqlx.wasm > dist/sqlc-gen-sqlx.wasm.sha256
fi
- name: Ensure GitHub release exists
env:
GH_TOKEN: ${{ github.token }}
run: |
if gh release view "${GITHUB_REF_NAME}" >/dev/null 2>&1; then
exit 0
fi
if [[ "${GITHUB_REF_NAME}" == *-* ]]; then
gh release create "${GITHUB_REF_NAME}" \
--title "${GITHUB_REF_NAME}" \
--generate-notes \
--prerelease
else
gh release create "${GITHUB_REF_NAME}" \
--title "${GITHUB_REF_NAME}" \
--generate-notes \
--latest
fi
- name: Upload release assets
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release upload "${GITHUB_REF_NAME}" \
dist/sqlc-gen-sqlx.wasm \
dist/sqlc-gen-sqlx.wasm.sha256 \
--clobber
publish-crate:
name: Publish to crates.io
needs: publish-release
runs-on: ubuntu-latest
environment: release
permissions:
contents: read
id-token: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
with:
toolchain: stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- name: Authenticate with crates.io
id: crates-io-auth
uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe # v1.0.4
- name: Publish crate
run: cargo publish --locked
env:
CARGO_REGISTRY_TOKEN: ${{ steps.crates-io-auth.outputs.token }}