Skip to content

Commit 7c4e095

Browse files
committed
feat: add a script to build the nix flake and fix the build code for debian/rpm packages
1 parent 67d1a9a commit 7c4e095

4 files changed

Lines changed: 75 additions & 90 deletions

File tree

flake.nix

Lines changed: 59 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,42 @@
2121
inherit system;
2222
};
2323

24-
version = builtins.readFile "${./.}/version.txt";
2524
maintainer = "Tower Computing Inc. <support@tower.dev>";
2625
homepage = "https://github.com/tower/tower-cli";
2726
description = "Tower CLI and runtime environment";
28-
longDescription = ''
27+
longDescription = " |
2928
Tower CLI and runtime environment
3029
Tower is the best way to host Python data apps in production.
3130
This package provides the Tower CLI tool for managing and deploying
3231
applications to the Tower platform.
32+
";
33+
34+
# Helper function to generate version in build phases
35+
getVersionScript = ''
36+
VERSION=${builtins.getEnv "VERSION"}
37+
if [ -z "$VERSION" ]; then
38+
VERSION="0.3.20"
39+
fi
40+
'';
41+
42+
# Helper function to generate nfpm YAML config
43+
mkNfpmConfig = { arch, packager }: ''
44+
name: tower
45+
arch: ${arch}
46+
platform: linux
47+
version: $VERSION
48+
${if packager == "rpm" then "release: 1" else "section: utils\npriority: optional"}
49+
maintainer: ${maintainer}
50+
description: ${longDescription}
51+
vendor: Tower Computing Inc.
52+
homepage: "${homepage}"
53+
license: MIT
54+
55+
contents:
56+
- src: package/usr/bin/tower
57+
dst: /usr/bin/tower
58+
file_info:
59+
mode: 0755
3360
'';
3461

3562
commonNativeBuildInputs = with pkgs; [ pkg-config ];
@@ -137,156 +164,99 @@
137164
tower-macos-arm = tower-macos-arm;
138165

139166
tower-deb-x86 = pkgs.stdenv.mkDerivation {
140-
name = "tower-${version}-amd64.deb";
141-
nativeBuildInputs = with pkgs; [ nfpm ];
167+
name = "tower-deb-amd64";
168+
nativeBuildInputs = with pkgs; [ nfpm python git ];
142169

143170
unpackPhase = "true";
144171

145172
buildPhase = ''
173+
${getVersionScript}
174+
146175
mkdir -p package/usr/bin
147176
cp ${tower-linux-x86}/bin/tower package/usr/bin/
148177
chmod 755 package/usr/bin/tower
149178
150-
cat > nfpm.yaml << 'EOF'
151-
name: tower
152-
arch: amd64
153-
platform: linux
154-
version: ${version}
155-
section: utils
156-
priority: optional
157-
maintainer: ${maintainer}
158-
description: |
159-
${longDescription}
160-
vendor: Tower Computing Inc.
161-
homepage: ${homepage}
162-
license: MIT
163-
164-
contents:
165-
- src: package/usr/bin/tower
166-
dst: /usr/bin/tower
167-
file_info:
168-
mode: 0755
179+
cat > nfpm.yaml << EOF
180+
${mkNfpmConfig { arch = "amd64"; packager = "deb"; }}
169181
EOF
170182
'';
171183

172184
installPhase = ''
173185
mkdir -p $out
174-
nfpm package --config nfpm.yaml --packager deb --target $out/tower_${version}_amd64.deb
186+
nfpm package --config nfpm.yaml --packager deb --target $out/tower_''${VERSION}_amd64.deb
175187
'';
176188
};
177189

178-
tower-cli-deb-arm64 = pkgs.stdenv.mkDerivation {
179-
name = "tower-${version}-arm64.deb";
180-
nativeBuildInputs = with pkgs; [ nfpm ];
190+
tower-deb-arm64 = pkgs.stdenv.mkDerivation {
191+
name = "tower-deb-arm64";
192+
nativeBuildInputs = with pkgs; [ nfpm python git ];
181193

182194
unpackPhase = "true";
183195

184196
buildPhase = ''
197+
${getVersionScript}
198+
185199
mkdir -p package/usr/bin
186200
cp ${tower-linux-arm64}/bin/tower package/usr/bin/
187201
chmod 755 package/usr/bin/tower
188202
189-
cat > nfpm.yaml << 'EOF'
190-
name: tower
191-
arch: arm64
192-
platform: linux
193-
version: ${version}
194-
section: utils
195-
priority: optional
196-
maintainer: ${maintainer}
197-
description: |
198-
${longDescription}
199-
vendor: Tower Computing Inc.
200-
homepage: ${homepage}
201-
license: MIT
202-
203-
contents:
204-
- src: package/usr/bin/tower
205-
dst: /usr/bin/tower
206-
file_info:
207-
mode: 0755
203+
cat > nfpm.yaml << EOF
204+
${mkNfpmConfig { arch = "arm64"; packager = "deb"; }}
208205
EOF
209206
'';
210207

211208
installPhase = ''
212209
mkdir -p $out
213-
nfpm package --config nfpm.yaml --packager deb --target $out/tower_${version}_arm64.deb
210+
cat nfpm.yaml
211+
nfpm package --config nfpm.yaml --packager deb --target $out/tower_''${VERSION}_arm64.deb
214212
'';
215213
};
216214

217215
tower-rpm-x86 = pkgs.stdenv.mkDerivation {
218-
name = "tower-${version}-x86_64.rpm";
219-
nativeBuildInputs = with pkgs; [ nfpm ];
216+
name = "tower-rpm-x86_64";
217+
nativeBuildInputs = with pkgs; [ nfpm python git ];
220218

221219
unpackPhase = "true";
222220

223221
buildPhase = ''
222+
${getVersionScript}
223+
224224
mkdir -p package/usr/bin
225225
cp ${tower-linux-x86}/bin/tower package/usr/bin/
226226
chmod 755 package/usr/bin/tower
227227
228-
cat > nfpm.yaml << 'EOF'
229-
name: tower
230-
arch: x86_64
231-
platform: linux
232-
version: ${version}
233-
release: 1
234-
maintainer: ${maintainer}
235-
description: |
236-
${longDescription}
237-
vendor: Tower Computing Inc.
238-
homepage: ${homepage}
239-
license: MIT
240-
241-
contents:
242-
- src: package/usr/bin/tower
243-
dst: /usr/bin/tower
244-
file_info:
245-
mode: 0755
228+
cat > nfpm.yaml << EOF
229+
${mkNfpmConfig { arch = "x86_64"; packager = "rpm"; }}
246230
EOF
247231
'';
248232

249233
installPhase = ''
250234
mkdir -p $out
251-
nfpm package --config nfpm.yaml --packager rpm --target $out/tower-${version}-1.x86_64.rpm
235+
nfpm package --config nfpm.yaml --packager rpm --target $out/tower-''${VERSION}-1.x86_64.rpm
252236
'';
253237
};
254238

255239
tower-rpm-arm64 = pkgs.stdenv.mkDerivation {
256-
name = "tower-${version}-aarch64.rpm";
257-
nativeBuildInputs = with pkgs; [ nfpm ];
240+
name = "tower-rpm-aarch64";
241+
nativeBuildInputs = with pkgs; [ nfpm python git ];
258242

259243
unpackPhase = "true";
260244

261245
buildPhase = ''
246+
${getVersionScript}
247+
262248
mkdir -p package/usr/bin
263249
cp ${tower-linux-arm64}/bin/tower package/usr/bin/
264250
chmod 755 package/usr/bin/tower
265251
266-
cat > nfpm.yaml << 'EOF'
267-
name: tower
268-
arch: aarch64
269-
platform: linux
270-
version: ${version}
271-
release: 1
272-
maintainer: ${maintainer}
273-
description: |
274-
${longDescription}
275-
vendor: Tower Computing Inc.
276-
homepage: ${homepage}
277-
license: MIT
278-
279-
contents:
280-
- src: package/usr/bin/tower
281-
dst: /usr/bin/tower
282-
file_info:
283-
mode: 0755
252+
cat > nfpm.yaml << EOF
253+
${mkNfpmConfig { arch = "aarch64"; packager = "rpm"; }}
284254
EOF
285255
'';
286256

287257
installPhase = ''
288258
mkdir -p $out
289-
nfpm package --config nfpm.yaml --packager rpm --target $out/tower-${version}-1.aarch64.rpm
259+
nfpm package --config nfpm.yaml --packager rpm --target $out/tower-''${VERSION}-1.aarch64.rpm
290260
'';
291261
};
292262
};

scripts/build-nix-target.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env bash
2+
cd "$(dirname "$0")/.."
3+
4+
# Get the current version from git
5+
VERSION=$(python scripts/semver.py)
6+
7+
# Export it so nix can use it
8+
export VERSION
9+
10+
# Use provided target or default to arm64
11+
TARGET=${1:-tower-deb-arm64}
12+
13+
# Build the package
14+
nix build .#${TARGET} --impure
15+
cp result/* ./ && rm result

scripts/semver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
88

9-
SEMVER_EXP = re.compile("\d+\.\d+(\.\d+)?(-rc\.(\d+))?")
9+
SEMVER_EXP = re.compile(r"\d+\.\d+(\.\d+)?(-rc\.(\d+))?")
1010

1111
class Version:
1212
def __init__(self, version_str):

tower_0.3.20_arm64.deb

4.92 MB
Binary file not shown.

0 commit comments

Comments
 (0)