-
Notifications
You must be signed in to change notification settings - Fork 0
147 lines (126 loc) · 4.07 KB
/
release.yml
File metadata and controls
147 lines (126 loc) · 4.07 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
name: Release
on:
push:
tags:
- 'v*'
env:
CARGO_TERM_COLOR: always
jobs:
build:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
archive: tar.gz
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
archive: tar.gz
cross: true
- target: x86_64-apple-darwin
os: macos-latest
archive: tar.gz
- target: aarch64-apple-darwin
os: macos-latest
archive: tar.gz
- target: x86_64-pc-windows-msvc
os: windows-latest
archive: zip
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: frontend/package-lock.json
- name: Build Frontend
run: |
cd frontend
npm ci
npm run build
- name: Install Rust Nightly
uses: dtolnay/rust-toolchain@nightly
with:
targets: ${{ matrix.target }}
- name: Install cross-compilation tools
if: matrix.cross
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
- name: Build Binary
shell: bash
run: |
if [ "${{ matrix.cross }}" = "true" ]; then
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
fi
cargo build --release --target ${{ matrix.target }}
- name: Prepare Release Package (Unix)
if: matrix.os != 'windows-latest'
shell: bash
run: |
mkdir -p release/kartex-logging
cp target/${{ matrix.target }}/release/kartex-logging-rust release/kartex-logging/
cp config.toml release/kartex-logging/
cp -r static release/kartex-logging/
cp README.md release/kartex-logging/
# Create systemd service file for Linux
if [[ "${{ matrix.target }}" == *"linux"* ]]; then
cat > release/kartex-logging/kartex-logging.service << 'EOF'
[Unit]
Description=Kartex Logging Server
After=network.target
[Service]
Type=simple
User=kartex
WorkingDirectory=/opt/kartex-logging
ExecStart=/opt/kartex-logging/kartex-logging-rust
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
fi
cd release
tar -czvf kartex-logging-${{ matrix.target }}.tar.gz kartex-logging
- name: Prepare Release Package (Windows)
if: matrix.os == 'windows-latest'
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path release/kartex-logging
Copy-Item target/${{ matrix.target }}/release/kartex-logging-rust.exe release/kartex-logging/
Copy-Item config.toml release/kartex-logging/
Copy-Item -Recurse static release/kartex-logging/
Copy-Item README.md release/kartex-logging/
cd release
Compress-Archive -Path kartex-logging -DestinationPath kartex-logging-${{ matrix.target }}.zip
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: kartex-logging-${{ matrix.target }}
path: release/kartex-logging-${{ matrix.target }}.${{ matrix.archive }}
release:
name: Create Release
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download All Artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: |
artifacts/**/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}