-
Notifications
You must be signed in to change notification settings - Fork 1
166 lines (143 loc) · 5.11 KB
/
Copy pathrelease.yml
File metadata and controls
166 lines (143 loc) · 5.11 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
161
162
163
164
165
166
name: Release
on:
push:
tags:
- "v*"
permissions:
contents: write
env:
BINARY_NAME: tabularis-clickhouse-plugin
jobs:
# ── 1. Prepare: update manifest.json version & generate CHANGELOG ──
prepare:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Extract version from tag
id: version
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Update manifest.json version
run: |
jq --arg v "${{ steps.version.outputs.version }}" '.version = $v' manifest.json > manifest.tmp.json
mv manifest.tmp.json manifest.json
- name: Generate CHANGELOG.md
id: changelog
uses: orhun/git-cliff-action@v4
with:
config: cliff.toml
args: --tag ${{ github.ref_name }}
env:
OUTPUT: CHANGELOG.md
GITHUB_REPO: ${{ github.repository }}
- name: Commit version bump & changelog
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add manifest.json CHANGELOG.md
git commit -m "chore(release): ${{ github.ref_name }}" || true
git push origin HEAD:main
- name: Upload manifest as artifact
uses: actions/upload-artifact@v4
with:
name: manifest
path: manifest.json
- name: Upload changelog as artifact
uses: actions/upload-artifact@v4
with:
name: changelog
path: CHANGELOG.md
# ── 2. Build matrix ────────────────────────────────────────────────
build:
needs: prepare
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
platform: linux-x64
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
platform: linux-arm64
- target: x86_64-apple-darwin
os: macos-latest
platform: darwin-x64
- target: aarch64-apple-darwin
os: macos-latest
platform: darwin-arm64
- target: x86_64-pc-windows-msvc
os: windows-latest
platform: win-x64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Download manifest artifact
uses: actions/download-artifact@v4
with:
name: manifest
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install cross-compilation tools (Linux aarch64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV"
- name: Cache cargo registry & build
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ matrix.target }}-cargo-
- name: Build release binary
run: cargo build --release --target ${{ matrix.target }}
- name: Package (unix)
if: runner.os != 'Windows'
run: |
mkdir staging
cp target/${{ matrix.target }}/release/${{ env.BINARY_NAME }} staging/
cp manifest.json staging/
cd staging && zip -r ../clickhouse-plugin-${{ matrix.platform }}.zip .
- name: Package (windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path staging
Copy-Item "target\${{ matrix.target }}\release\${{ env.BINARY_NAME }}.exe" staging\
Copy-Item "manifest.json" staging\
Compress-Archive -Path "staging\*" -DestinationPath "clickhouse-plugin-${{ matrix.platform }}.zip"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: clickhouse-plugin-${{ matrix.platform }}
path: clickhouse-plugin-${{ matrix.platform }}.zip
# ── 3. Create GitHub Release ───────────────────────────────────────
release:
needs: [prepare, build]
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Download changelog
uses: actions/download-artifact@v4
with:
name: changelog
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: ${{ github.ref_name }}
body_path: CHANGELOG.md
files: artifacts/*.zip
generate_release_notes: false