+1
.tangled/workflows/deploy-wisp.yml
+1
.tangled/workflows/deploy-wisp.yml
+1
.tangled/workflows/test.yml
+1
.tangled/workflows/test.yml
+23
apps/hosting-service/src/lib/file-serving.ts
+23
apps/hosting-service/src/lib/file-serving.ts
···
550
550
const rewrittenKey = getCacheKey(did, rkey, fileRequestPath, `rewritten:${basePath}`);
551
551
const rewrittenContent = rewrittenHtmlCache.get(rewrittenKey);
552
552
if (rewrittenContent) {
553
+
console.log(`[HTML Rewrite] Serving from rewritten cache: ${rewrittenKey}`);
553
554
const headers: Record<string, string> = {
554
555
'Content-Type': 'text/html; charset=utf-8',
555
556
'Content-Encoding': 'gzip',
···
569
570
const meta = result.metadata.customMetadata as { encoding?: string; mimeType?: string } | undefined;
570
571
const mimeType = meta?.mimeType || lookup(fileRequestPath) || 'application/octet-stream';
571
572
const isGzipped = meta?.encoding === 'gzip';
573
+
574
+
console.log(`[File Serve] Serving ${fileRequestPath}, mimeType: ${mimeType}, isHTML: ${isHtmlContent(fileRequestPath, mimeType)}, basePath: ${basePath}`);
572
575
573
576
// Check if this is HTML content that needs rewriting
574
577
if (isHtmlContent(fileRequestPath, mimeType)) {
578
+
console.log(`[HTML Rewrite] Processing ${fileRequestPath}, basePath: ${basePath}, mimeType: ${mimeType}, isGzipped: ${isGzipped}`);
575
579
let htmlContent: string;
576
580
if (isGzipped) {
577
581
// Verify content is actually gzipped
···
586
590
} else {
587
591
htmlContent = content.toString('utf-8');
588
592
}
593
+
// Check for <base> tag which can override paths
594
+
const baseTagMatch = htmlContent.match(/<base\s+[^>]*href=["'][^"']+["'][^>]*>/i);
595
+
if (baseTagMatch) {
596
+
console.warn(`[HTML Rewrite] WARNING: <base> tag found: ${baseTagMatch[0]} - this may override path rewrites`);
597
+
}
598
+
599
+
// Find src/href attributes (quoted and unquoted) to debug
600
+
const allMatches = htmlContent.match(/(?:src|href)\s*=\s*["']?\/[^"'\s>]+/g);
601
+
console.log(`[HTML Rewrite] Found ${allMatches ? allMatches.length : 0} local path attrs`);
602
+
if (allMatches && allMatches.length > 0) {
603
+
console.log(`[HTML Rewrite] Sample paths: ${allMatches.slice(0, 5).join(', ')}`);
604
+
}
605
+
589
606
const rewritten = rewriteHtmlPaths(htmlContent, basePath, fileRequestPath);
607
+
608
+
const rewrittenMatches = rewritten.match(/(?:src|href)\s*=\s*["']?\/[^"'\s>]+/g);
609
+
console.log(`[HTML Rewrite] After rewrite, found ${rewrittenMatches ? rewrittenMatches.length : 0} local paths`);
610
+
if (rewrittenMatches && rewrittenMatches.length > 0) {
611
+
console.log(`[HTML Rewrite] Sample rewritten: ${rewrittenMatches.slice(0, 5).join(', ')}`);
612
+
}
590
613
591
614
// Recompress and cache the rewritten HTML
592
615
const { gzipSync } = await import('zlib');
+16
apps/hosting-service/src/lib/html-rewriter.ts
+16
apps/hosting-service/src/lib/html-rewriter.ts
···
189
189
`\\b${attr}[ \\t]{0,5}=[ \\t]{0,5}'([^']*)'`,
190
190
'gi'
191
191
)
192
+
// Unquoted attributes (valid in HTML5 for values without spaces/special chars)
193
+
// Match: attr=value where value starts immediately (no quotes) and continues until space or >
194
+
// Use negative lookahead to ensure we don't match quoted attributes
195
+
const unquotedRegex = new RegExp(
196
+
`\\b${attr}[ \\t]{0,5}=[ \\t]{0,5}(?!["'])([^\\s>]+)`,
197
+
'gi'
198
+
)
192
199
193
200
rewritten = rewritten.replace(doubleQuoteRegex, (match, value) => {
194
201
const rewrittenValue = rewritePath(
···
206
213
documentPath
207
214
)
208
215
return `${attr}='${rewrittenValue}'`
216
+
})
217
+
218
+
rewritten = rewritten.replace(unquotedRegex, (match, value) => {
219
+
const rewrittenValue = rewritePath(
220
+
value,
221
+
normalizedBase,
222
+
documentPath
223
+
)
224
+
return `${attr}=${rewrittenValue}`
209
225
})
210
226
}
211
227
}
+94
-2
apps/hosting-service/src/lib/storage.ts
+94
-2
apps/hosting-service/src/lib/storage.ts
···
7
7
* - Cold (S3/R2): Object storage as source of truth (optional)
8
8
*
9
9
* When S3 is not configured, falls back to disk-only mode (warm tier acts as source of truth).
10
+
* In cache-only mode (non-master nodes), S3 writes are skipped even if configured.
10
11
*/
11
12
12
13
import {
···
15
16
DiskStorageTier,
16
17
S3StorageTier,
17
18
type StorageTier,
19
+
type StorageMetadata,
18
20
} from 'tiered-storage';
19
21
20
22
const CACHE_DIR = process.env.CACHE_DIR || './cache/sites';
···
22
24
const HOT_CACHE_COUNT = parseInt(process.env.HOT_CACHE_COUNT || '500', 10);
23
25
const WARM_CACHE_SIZE = parseInt(process.env.WARM_CACHE_SIZE || '10737418240', 10); // 10GB default
24
26
const WARM_EVICTION_POLICY = (process.env.WARM_EVICTION_POLICY || 'lru') as 'lru' | 'fifo' | 'size';
27
+
28
+
// Cache-only mode: skip S3 writes (non-master nodes)
29
+
// This is the same flag used to skip database writes
30
+
const CACHE_ONLY_MODE = process.env.CACHE_ONLY_MODE === 'true';
25
31
26
32
// S3/Cold tier configuration (optional)
27
33
const S3_BUCKET = process.env.S3_BUCKET || '';
···
49
55
};
50
56
51
57
/**
58
+
* Read-only wrapper for S3 tier in cache-only mode.
59
+
* Allows reads from S3 but skips all writes (for non-master nodes).
60
+
*/
61
+
class ReadOnlyS3Tier implements StorageTier {
62
+
private static hasLoggedWriteSkip = false;
63
+
64
+
constructor(private tier: StorageTier) {}
65
+
66
+
// Read operations - pass through to underlying tier
67
+
async get(key: string) {
68
+
return this.tier.get(key);
69
+
}
70
+
71
+
async getWithMetadata(key: string) {
72
+
return this.tier.getWithMetadata?.(key) ?? null;
73
+
}
74
+
75
+
async getStream(key: string) {
76
+
return this.tier.getStream?.(key) ?? null;
77
+
}
78
+
79
+
async exists(key: string) {
80
+
return this.tier.exists(key);
81
+
}
82
+
83
+
async getMetadata(key: string) {
84
+
return this.tier.getMetadata(key);
85
+
}
86
+
87
+
async *listKeys(prefix?: string) {
88
+
yield* this.tier.listKeys(prefix);
89
+
}
90
+
91
+
async getStats() {
92
+
return this.tier.getStats();
93
+
}
94
+
95
+
// Write operations - no-op in cache-only mode
96
+
async set(key: string, _data: Uint8Array, _metadata: StorageMetadata) {
97
+
this.logWriteSkip('set', key);
98
+
}
99
+
100
+
async setStream(key: string, _stream: NodeJS.ReadableStream, _metadata: StorageMetadata) {
101
+
this.logWriteSkip('setStream', key);
102
+
}
103
+
104
+
async setMetadata(key: string, _metadata: StorageMetadata) {
105
+
this.logWriteSkip('setMetadata', key);
106
+
}
107
+
108
+
async delete(key: string) {
109
+
this.logWriteSkip('delete', key);
110
+
}
111
+
112
+
async deleteMany(keys: string[]) {
113
+
this.logWriteSkip('deleteMany', `${keys.length} keys`);
114
+
}
115
+
116
+
async clear() {
117
+
this.logWriteSkip('clear', 'all keys');
118
+
}
119
+
120
+
private logWriteSkip(operation: string, key: string) {
121
+
// Only log once to avoid spam
122
+
if (!ReadOnlyS3Tier.hasLoggedWriteSkip) {
123
+
console.log(`[Storage] Cache-only mode: skipping S3 writes (operation: ${operation})`);
124
+
ReadOnlyS3Tier.hasLoggedWriteSkip = true;
125
+
}
126
+
}
127
+
}
128
+
129
+
/**
52
130
* Initialize tiered storage
53
131
* Must be called before serving requests
54
132
*/
···
66
144
67
145
if (S3_BUCKET) {
68
146
// Full three-tier setup with S3 as cold storage
69
-
coldTier = new S3StorageTier({
147
+
const s3Tier = new S3StorageTier({
70
148
bucket: S3_BUCKET,
71
149
metadataBucket: S3_METADATA_BUCKET,
72
150
region: S3_REGION,
···
78
156
: undefined,
79
157
prefix: S3_PREFIX,
80
158
});
159
+
160
+
// In cache-only mode, wrap S3 tier to make it read-only
161
+
coldTier = CACHE_ONLY_MODE ? new ReadOnlyS3Tier(s3Tier) : s3Tier;
81
162
warmTier = diskTier;
82
-
console.log('[Storage] Using S3 as cold tier, disk as warm tier');
163
+
164
+
if (CACHE_ONLY_MODE) {
165
+
console.log('[Storage] Cache-only mode: S3 as read-only cold tier (no writes), disk as warm tier');
166
+
} else {
167
+
console.log('[Storage] Using S3 as cold tier, disk as warm tier');
168
+
}
83
169
} else {
84
170
// Disk-only mode: disk tier acts as source of truth (cold)
85
171
coldTier = diskTier;
···
104
190
105
191
// Placement rules: determine which tiers each file goes to
106
192
placementRules: [
193
+
// Metadata is critical: frequently accessed for cache validity checks
194
+
{
195
+
pattern: '**/.metadata.json',
196
+
tiers: ['hot', 'warm', 'cold'],
197
+
},
198
+
107
199
// index.html is critical: write to all tiers for instant serving
108
200
{
109
201
pattern: '**/index.html',
+44
-141
apps/hosting-service/src/lib/utils.ts
+44
-141
apps/hosting-service/src/lib/utils.ts
···
397
397
const existingMetadata = await getCacheMetadata(did, rkey);
398
398
const existingFileCids = existingMetadata?.fileCids || {};
399
399
400
-
// Use a temporary directory with timestamp to avoid collisions
401
-
const tempSuffix = `.tmp-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
402
-
const tempDir = `${CACHE_DIR}/${did}/${rkey}${tempSuffix}`;
403
-
const finalDir = `${CACHE_DIR}/${did}/${rkey}`;
404
-
405
-
try {
406
-
// Collect file CIDs from the new record (using expanded root)
407
-
const newFileCids: Record<string, string> = {};
408
-
collectFileCidsFromEntries(expandedRoot.entries, '', newFileCids);
400
+
// Collect file CIDs from the new record (using expanded root)
401
+
const newFileCids: Record<string, string> = {};
402
+
collectFileCidsFromEntries(expandedRoot.entries, '', newFileCids);
409
403
410
-
// Fetch site settings (optional)
411
-
const settings = await fetchSiteSettings(did, rkey);
404
+
// Fetch site settings (optional)
405
+
const settings = await fetchSiteSettings(did, rkey);
412
406
413
-
// Download/copy files to temporary directory (with incremental logic, using expanded root)
414
-
await cacheFiles(did, rkey, expandedRoot.entries, pdsEndpoint, '', tempSuffix, existingFileCids, finalDir);
415
-
await saveCacheMetadata(did, rkey, recordCid, tempSuffix, newFileCids, settings);
407
+
// Download files directly to tiered storage (with incremental logic)
408
+
await cacheFiles(did, rkey, expandedRoot.entries, pdsEndpoint, '', existingFileCids);
409
+
await saveCacheMetadata(did, rkey, recordCid, newFileCids, settings);
416
410
417
-
// Atomically replace old cache with new cache
418
-
// On POSIX systems (Linux/macOS), rename is atomic
419
-
if (existsSync(finalDir)) {
420
-
// Rename old directory to backup
421
-
const backupDir = `${finalDir}.old-${Date.now()}`;
422
-
await rename(finalDir, backupDir);
423
-
424
-
try {
425
-
// Rename new directory to final location
426
-
await rename(tempDir, finalDir);
427
-
428
-
// Clean up old backup
429
-
rmSync(backupDir, { recursive: true, force: true });
430
-
} catch (err) {
431
-
// If rename failed, restore backup
432
-
if (existsSync(backupDir) && !existsSync(finalDir)) {
433
-
await rename(backupDir, finalDir);
434
-
}
435
-
throw err;
436
-
}
437
-
} else {
438
-
// No existing cache, just rename temp to final
439
-
await rename(tempDir, finalDir);
440
-
}
441
-
442
-
console.log('Successfully cached site atomically', did, rkey);
443
-
} catch (err) {
444
-
// Clean up temp directory on failure
445
-
if (existsSync(tempDir)) {
446
-
rmSync(tempDir, { recursive: true, force: true });
447
-
}
448
-
throw err;
449
-
}
411
+
console.log('Successfully cached site', did, rkey);
450
412
}
451
413
452
414
···
456
418
entries: Entry[],
457
419
pdsEndpoint: string,
458
420
pathPrefix: string,
459
-
dirSuffix: string = '',
460
-
existingFileCids: Record<string, string> = {},
461
-
existingCacheDir?: string
421
+
existingFileCids: Record<string, string> = {}
462
422
): Promise<void> {
463
-
// Collect file tasks, separating unchanged files from new/changed files
423
+
// Collect file download tasks (skip unchanged files)
464
424
const downloadTasks: Array<() => Promise<void>> = [];
465
-
const copyTasks: Array<() => Promise<void>> = [];
466
425
467
426
function collectFileTasks(
468
427
entries: Entry[],
···
479
438
const cid = extractBlobCid(fileNode.blob);
480
439
481
440
// Check if file is unchanged (same CID as existing cache)
482
-
if (cid && existingFileCids[currentPath] === cid && existingCacheDir) {
483
-
// File unchanged - copy from existing cache instead of downloading
484
-
copyTasks.push(() => copyExistingFile(
485
-
did,
486
-
site,
487
-
currentPath,
488
-
dirSuffix,
489
-
existingCacheDir
490
-
));
441
+
if (cid && existingFileCids[currentPath] === cid) {
442
+
// File unchanged - skip download (already in tiered storage)
443
+
console.log(`Skipping unchanged file: ${currentPath}`);
491
444
} else {
492
445
// File new or changed - download it
493
446
downloadTasks.push(() => cacheFileBlob(
···
498
451
pdsEndpoint,
499
452
fileNode.encoding,
500
453
fileNode.mimeType,
501
-
fileNode.base64,
502
-
dirSuffix
454
+
fileNode.base64
503
455
));
504
456
}
505
457
}
···
508
460
509
461
collectFileTasks(entries, pathPrefix);
510
462
511
-
console.log(`[Incremental Update] Files to copy: ${copyTasks.length}, Files to download: ${downloadTasks.length}`);
463
+
console.log(`[Incremental Update] Files to download: ${downloadTasks.length}`);
512
464
513
-
// Copy unchanged files in parallel (fast local operations) - increased limit for better performance
514
-
const copyLimit = 50;
515
-
for (let i = 0; i < copyTasks.length; i += copyLimit) {
516
-
const batch = copyTasks.slice(i, i + copyLimit);
517
-
await Promise.all(batch.map(task => task()));
518
-
if (copyTasks.length > copyLimit) {
519
-
console.log(`[Cache Progress] Copied ${Math.min(i + copyLimit, copyTasks.length)}/${copyTasks.length} unchanged files`);
520
-
}
521
-
}
522
-
523
-
// Download new/changed files concurrently - increased from 3 to 20 for much better performance
465
+
// Download new/changed files concurrently
524
466
const downloadLimit = 20;
525
467
let successCount = 0;
526
468
let failureCount = 0;
···
549
491
}
550
492
}
551
493
552
-
/**
553
-
* Copy an unchanged file from existing cache to new cache location
554
-
*/
555
-
async function copyExistingFile(
556
-
did: string,
557
-
site: string,
558
-
filePath: string,
559
-
dirSuffix: string,
560
-
existingCacheDir: string
561
-
): Promise<void> {
562
-
const { copyFile } = await import('fs/promises');
563
-
564
-
const sourceFile = `${existingCacheDir}/${filePath}`;
565
-
const destFile = `${CACHE_DIR}/${did}/${site}${dirSuffix}/${filePath}`;
566
-
const destDir = destFile.substring(0, destFile.lastIndexOf('/'));
567
-
568
-
// Create destination directory if needed
569
-
if (destDir && !existsSync(destDir)) {
570
-
mkdirSync(destDir, { recursive: true });
571
-
}
572
-
573
-
try {
574
-
// Copy the file
575
-
await copyFile(sourceFile, destFile);
576
-
577
-
// Copy metadata file if it exists
578
-
const sourceMetaFile = `${sourceFile}.meta`;
579
-
const destMetaFile = `${destFile}.meta`;
580
-
if (existsSync(sourceMetaFile)) {
581
-
await copyFile(sourceMetaFile, destMetaFile);
582
-
}
583
-
} catch (err) {
584
-
console.error(`Failed to copy cached file ${filePath}, will attempt download:`, err);
585
-
throw err;
586
-
}
587
-
}
588
-
589
494
async function cacheFileBlob(
590
495
did: string,
591
496
site: string,
···
594
499
pdsEndpoint: string,
595
500
encoding?: 'gzip',
596
501
mimeType?: string,
597
-
base64?: boolean,
598
-
dirSuffix: string = ''
502
+
base64?: boolean
599
503
): Promise<void> {
600
504
const cid = extractBlobCid(blobRef);
601
505
if (!cid) {
···
635
539
}
636
540
}
637
541
638
-
// Write to tiered storage via streaming (warm + cold, skip hot on ingest)
639
-
// Convert buffer to stream for large file support
542
+
// Write to tiered storage with metadata
640
543
const stream = Readable.from([content]);
641
544
const key = `${did}/${site}/${filePath}`;
642
545
···
676
579
return await storage.exists(indexKey);
677
580
}
678
581
679
-
async function saveCacheMetadata(did: string, rkey: string, recordCid: string, dirSuffix: string = '', fileCids?: Record<string, string>, settings?: WispSettings | null): Promise<void> {
582
+
async function saveCacheMetadata(did: string, rkey: string, recordCid: string, fileCids?: Record<string, string>, settings?: WispSettings | null): Promise<void> {
680
583
const metadata: CacheMetadata = {
681
584
recordCid,
682
585
cachedAt: Date.now(),
···
686
589
settings: settings || undefined
687
590
};
688
591
689
-
const metadataPath = `${CACHE_DIR}/${did}/${rkey}${dirSuffix}/.metadata.json`;
690
-
const metadataDir = metadataPath.substring(0, metadataPath.lastIndexOf('/'));
691
-
692
-
if (!existsSync(metadataDir)) {
693
-
mkdirSync(metadataDir, { recursive: true });
694
-
}
695
-
696
-
await writeFile(metadataPath, JSON.stringify(metadata, null, 2));
592
+
// Store through tiered storage for persistence to S3/cold tier
593
+
const metadataKey = `${did}/${rkey}/.metadata.json`;
594
+
const metadataBytes = new TextEncoder().encode(JSON.stringify(metadata, null, 2));
595
+
await storage.set(metadataKey, metadataBytes);
697
596
}
698
597
699
598
async function getCacheMetadata(did: string, rkey: string): Promise<CacheMetadata | null> {
700
599
try {
701
-
const metadataPath = `${CACHE_DIR}/${did}/${rkey}/.metadata.json`;
702
-
if (!existsSync(metadataPath)) return null;
600
+
// Retrieve metadata from tiered storage
601
+
const metadataKey = `${did}/${rkey}/.metadata.json`;
602
+
const data = await storage.get(metadataKey);
603
+
604
+
if (!data) return null;
703
605
704
-
const content = await readFile(metadataPath, 'utf-8');
705
-
return JSON.parse(content) as CacheMetadata;
606
+
// Deserialize from Uint8Array to JSON (storage uses identity serialization)
607
+
const jsonString = new TextDecoder().decode(data as Uint8Array);
608
+
return JSON.parse(jsonString) as CacheMetadata;
706
609
} catch (err) {
707
610
console.error('Failed to read cache metadata', err);
708
611
return null;
···
736
639
}
737
640
738
641
export async function updateCacheMetadataSettings(did: string, rkey: string, settings: WispSettings | null): Promise<void> {
739
-
const metadataPath = `${CACHE_DIR}/${did}/${rkey}/.metadata.json`;
642
+
try {
643
+
// Read existing metadata from tiered storage
644
+
const metadata = await getCacheMetadata(did, rkey);
740
645
741
-
if (!existsSync(metadataPath)) {
742
-
console.warn('Metadata file does not exist, cannot update settings', { did, rkey });
743
-
return;
744
-
}
745
-
746
-
try {
747
-
// Read existing metadata
748
-
const content = await readFile(metadataPath, 'utf-8');
749
-
const metadata = JSON.parse(content) as CacheMetadata;
646
+
if (!metadata) {
647
+
console.warn('Metadata does not exist, cannot update settings', { did, rkey });
648
+
return;
649
+
}
750
650
751
651
// Update settings field
752
652
// Store null explicitly to cache "no settings" state and avoid repeated fetches
753
653
metadata.settings = settings ?? null;
754
654
755
-
// Write back to disk
756
-
await writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');
655
+
// Write back through tiered storage
656
+
// Convert to Uint8Array since storage is typed for binary data
657
+
const metadataKey = `${did}/${rkey}/.metadata.json`;
658
+
const metadataBytes = new TextEncoder().encode(JSON.stringify(metadata, null, 2));
659
+
await storage.set(metadataKey, metadataBytes);
757
660
console.log('Updated metadata settings', { did, rkey, hasSettings: !!settings });
758
661
} catch (err) {
759
662
console.error('Failed to update metadata settings', err);
+3
apps/hosting-service/src/server.ts
+3
apps/hosting-service/src/server.ts
···
80
80
return c.text('Invalid identifier', 400);
81
81
}
82
82
83
+
console.log(`[Server] sites.wisp.place request: identifier=${identifier}, site=${site}, filePath=${filePath}`);
84
+
83
85
// Check if site is currently being cached - return updating response early
84
86
if (isSiteBeingCached(did, site)) {
85
87
return siteUpdatingResponse();
···
93
95
94
96
// Serve with HTML path rewriting to handle absolute paths
95
97
const basePath = `/${identifier}/${site}/`;
98
+
console.log(`[Server] Serving with basePath: ${basePath}`);
96
99
const headers = extractHeaders(c.req.raw.headers);
97
100
return serveFromCacheWithRewrite(did, site, filePath, basePath, c.req.url, headers);
98
101
}
+59
backup.nix
+59
backup.nix
···
1
+
{
2
+
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
3
+
inputs.nci.url = "github:90-008/nix-cargo-integration";
4
+
inputs.nci.inputs.nixpkgs.follows = "nixpkgs";
5
+
inputs.parts.url = "github:hercules-ci/flake-parts";
6
+
inputs.parts.inputs.nixpkgs-lib.follows = "nixpkgs";
7
+
inputs.fenix = {
8
+
url = "github:nix-community/fenix";
9
+
inputs.nixpkgs.follows = "nixpkgs";
10
+
};
11
+
12
+
outputs = inputs @ {
13
+
parts,
14
+
nci,
15
+
...
16
+
}:
17
+
parts.lib.mkFlake {inherit inputs;} {
18
+
systems = ["x86_64-linux" "aarch64-darwin"];
19
+
imports = [
20
+
nci.flakeModule
21
+
./crates.nix
22
+
];
23
+
perSystem = {
24
+
pkgs,
25
+
config,
26
+
...
27
+
}: let
28
+
crateOutputs = config.nci.outputs."wisp-cli";
29
+
mkRenamedPackage = name: pkg: isWindows: pkgs.runCommand name {} ''
30
+
mkdir -p $out/bin
31
+
if [ -f ${pkg}/bin/wisp-cli.exe ]; then
32
+
cp ${pkg}/bin/wisp-cli.exe $out/bin/${name}
33
+
elif [ -f ${pkg}/bin/wisp-cli ]; then
34
+
cp ${pkg}/bin/wisp-cli $out/bin/${name}
35
+
else
36
+
echo "Error: Could not find wisp-cli binary in ${pkg}/bin/"
37
+
ls -la ${pkg}/bin/ || true
38
+
exit 1
39
+
fi
40
+
'';
41
+
in {
42
+
devShells.default = crateOutputs.devShell;
43
+
packages.default = crateOutputs.packages.release;
44
+
packages.wisp-cli-x86_64-linux = mkRenamedPackage "wisp-cli-x86_64-linux" crateOutputs.packages.release false;
45
+
packages.wisp-cli-aarch64-linux = mkRenamedPackage "wisp-cli-aarch64-linux" crateOutputs.allTargets."aarch64-unknown-linux-gnu".packages.release false;
46
+
packages.wisp-cli-x86_64-windows = mkRenamedPackage "wisp-cli-x86_64-windows.exe" crateOutputs.allTargets."x86_64-pc-windows-gnu".packages.release true;
47
+
packages.wisp-cli-aarch64-darwin = mkRenamedPackage "wisp-cli-aarch64-darwin" crateOutputs.allTargets."aarch64-apple-darwin".packages.release false;
48
+
packages.all = pkgs.symlinkJoin {
49
+
name = "wisp-cli-all";
50
+
paths = [
51
+
config.packages.wisp-cli-x86_64-linux
52
+
config.packages.wisp-cli-aarch64-linux
53
+
config.packages.wisp-cli-x86_64-windows
54
+
config.packages.wisp-cli-aarch64-darwin
55
+
];
56
+
};
57
+
};
58
+
};
59
+
}
+190
-262
cli/Cargo.lock
+190
-262
cli/Cargo.lock
···
126
126
127
127
[[package]]
128
128
name = "async-compression"
129
-
version = "0.4.34"
129
+
version = "0.4.36"
130
130
source = "registry+https://github.com/rust-lang/crates.io-index"
131
-
checksum = "0e86f6d3dc9dc4352edeea6b8e499e13e3f5dc3b964d7ca5fd411415a3498473"
131
+
checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37"
132
132
dependencies = [
133
133
"compression-codecs",
134
134
"compression-core",
···
145
145
dependencies = [
146
146
"proc-macro2",
147
147
"quote",
148
-
"syn 2.0.111",
148
+
"syn 2.0.113",
149
149
]
150
150
151
151
[[package]]
···
171
171
172
172
[[package]]
173
173
name = "axum"
174
-
version = "0.8.7"
174
+
version = "0.8.8"
175
175
source = "registry+https://github.com/rust-lang/crates.io-index"
176
-
checksum = "5b098575ebe77cb6d14fc7f32749631a6e44edbef6b796f89b020e99ba20d425"
176
+
checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8"
177
177
dependencies = [
178
178
"axum-core",
179
179
"bytes",
···
204
204
205
205
[[package]]
206
206
name = "axum-core"
207
-
version = "0.5.5"
207
+
version = "0.5.6"
208
208
source = "registry+https://github.com/rust-lang/crates.io-index"
209
-
checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22"
209
+
checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
210
210
dependencies = [
211
211
"bytes",
212
212
"futures-core",
···
233
233
"miniz_oxide",
234
234
"object",
235
235
"rustc-demangle",
236
-
"windows-link 0.2.1",
236
+
"windows-link",
237
237
]
238
238
239
239
[[package]]
···
281
281
282
282
[[package]]
283
283
name = "base64ct"
284
-
version = "1.8.0"
284
+
version = "1.8.2"
285
285
source = "registry+https://github.com/rust-lang/crates.io-index"
286
-
checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
286
+
checksum = "7d809780667f4410e7c41b07f52439b94d2bdf8528eeedc287fa38d3b7f95d82"
287
287
288
288
[[package]]
289
289
name = "bitflags"
···
322
322
"proc-macro2",
323
323
"quote",
324
324
"rustversion",
325
-
"syn 2.0.111",
325
+
"syn 2.0.113",
326
326
]
327
327
328
328
[[package]]
329
329
name = "borsh"
330
-
version = "1.5.7"
330
+
version = "1.6.0"
331
331
source = "registry+https://github.com/rust-lang/crates.io-index"
332
-
checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce"
332
+
checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f"
333
333
dependencies = [
334
334
"cfg_aliases",
335
335
]
···
377
377
378
378
[[package]]
379
379
name = "bumpalo"
380
-
version = "3.19.0"
380
+
version = "3.19.1"
381
381
source = "registry+https://github.com/rust-lang/crates.io-index"
382
-
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
382
+
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
383
383
384
384
[[package]]
385
385
name = "byteorder"
···
407
407
408
408
[[package]]
409
409
name = "cc"
410
-
version = "1.2.47"
410
+
version = "1.2.51"
411
411
source = "registry+https://github.com/rust-lang/crates.io-index"
412
-
checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07"
412
+
checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203"
413
413
dependencies = [
414
414
"find-msvc-tools",
415
415
"shlex",
···
444
444
"num-traits",
445
445
"serde",
446
446
"wasm-bindgen",
447
-
"windows-link 0.2.1",
447
+
"windows-link",
448
448
]
449
449
450
450
[[package]]
···
496
496
497
497
[[package]]
498
498
name = "clap"
499
-
version = "4.5.53"
499
+
version = "4.5.54"
500
500
source = "registry+https://github.com/rust-lang/crates.io-index"
501
-
checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8"
501
+
checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394"
502
502
dependencies = [
503
503
"clap_builder",
504
504
"clap_derive",
···
506
506
507
507
[[package]]
508
508
name = "clap_builder"
509
-
version = "4.5.53"
509
+
version = "4.5.54"
510
510
source = "registry+https://github.com/rust-lang/crates.io-index"
511
-
checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00"
511
+
checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00"
512
512
dependencies = [
513
513
"anstream",
514
514
"anstyle",
···
525
525
"heck 0.5.0",
526
526
"proc-macro2",
527
527
"quote",
528
-
"syn 2.0.111",
528
+
"syn 2.0.113",
529
529
]
530
530
531
531
[[package]]
···
561
561
562
562
[[package]]
563
563
name = "compression-codecs"
564
-
version = "0.4.33"
564
+
version = "0.4.35"
565
565
source = "registry+https://github.com/rust-lang/crates.io-index"
566
-
checksum = "302266479cb963552d11bd042013a58ef1adc56768016c8b82b4199488f2d4ad"
566
+
checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2"
567
567
dependencies = [
568
568
"compression-core",
569
569
"flate2",
···
753
753
"proc-macro2",
754
754
"quote",
755
755
"strsim",
756
-
"syn 2.0.111",
756
+
"syn 2.0.113",
757
757
]
758
758
759
759
[[package]]
···
764
764
dependencies = [
765
765
"darling_core",
766
766
"quote",
767
-
"syn 2.0.111",
767
+
"syn 2.0.113",
768
768
]
769
769
770
770
[[package]]
···
804
804
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
805
805
dependencies = [
806
806
"data-encoding",
807
-
"syn 2.0.111",
807
+
"syn 2.0.113",
808
808
]
809
809
810
810
[[package]]
···
854
854
dependencies = [
855
855
"proc-macro2",
856
856
"quote",
857
-
"syn 2.0.111",
857
+
"syn 2.0.113",
858
858
"unicode-xid",
859
859
]
860
860
···
905
905
dependencies = [
906
906
"proc-macro2",
907
907
"quote",
908
-
"syn 2.0.111",
908
+
"syn 2.0.113",
909
909
]
910
910
911
911
[[package]]
···
978
978
"heck 0.5.0",
979
979
"proc-macro2",
980
980
"quote",
981
-
"syn 2.0.111",
981
+
"syn 2.0.113",
982
982
]
983
983
984
984
[[package]]
···
1027
1027
1028
1028
[[package]]
1029
1029
name = "find-msvc-tools"
1030
-
version = "0.1.5"
1030
+
version = "0.1.6"
1031
1031
source = "registry+https://github.com/rust-lang/crates.io-index"
1032
-
checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
1032
+
checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff"
1033
1033
1034
1034
[[package]]
1035
1035
name = "flate2"
···
1154
1154
dependencies = [
1155
1155
"proc-macro2",
1156
1156
"quote",
1157
-
"syn 2.0.111",
1157
+
"syn 2.0.113",
1158
1158
]
1159
1159
1160
1160
[[package]]
···
1189
1189
1190
1190
[[package]]
1191
1191
name = "generator"
1192
-
version = "0.8.7"
1192
+
version = "0.8.8"
1193
1193
source = "registry+https://github.com/rust-lang/crates.io-index"
1194
-
checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2"
1194
+
checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9"
1195
1195
dependencies = [
1196
1196
"cc",
1197
1197
"cfg-if",
1198
1198
"libc",
1199
1199
"log",
1200
1200
"rustversion",
1201
-
"windows",
1201
+
"windows-link",
1202
+
"windows-result",
1202
1203
]
1203
1204
1204
1205
[[package]]
···
1308
1309
1309
1310
[[package]]
1310
1311
name = "h2"
1311
-
version = "0.4.12"
1312
+
version = "0.4.13"
1312
1313
source = "registry+https://github.com/rust-lang/crates.io-index"
1313
-
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
1314
+
checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
1314
1315
dependencies = [
1315
1316
"atomic-waker",
1316
1317
"bytes",
···
1471
1472
"markup5ever",
1472
1473
"proc-macro2",
1473
1474
"quote",
1474
-
"syn 2.0.111",
1475
+
"syn 2.0.113",
1475
1476
]
1476
1477
1477
1478
[[package]]
···
1567
1568
1568
1569
[[package]]
1569
1570
name = "hyper-util"
1570
-
version = "0.1.18"
1571
+
version = "0.1.19"
1571
1572
source = "registry+https://github.com/rust-lang/crates.io-index"
1572
-
checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56"
1573
+
checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f"
1573
1574
dependencies = [
1574
1575
"base64 0.22.1",
1575
1576
"bytes",
···
1603
1604
"js-sys",
1604
1605
"log",
1605
1606
"wasm-bindgen",
1606
-
"windows-core 0.62.2",
1607
+
"windows-core",
1607
1608
]
1608
1609
1609
1610
[[package]]
···
1663
1664
1664
1665
[[package]]
1665
1666
name = "icu_properties"
1666
-
version = "2.1.1"
1667
+
version = "2.1.2"
1667
1668
source = "registry+https://github.com/rust-lang/crates.io-index"
1668
-
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
1669
+
checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
1669
1670
dependencies = [
1670
1671
"icu_collections",
1671
1672
"icu_locale_core",
···
1677
1678
1678
1679
[[package]]
1679
1680
name = "icu_properties_data"
1680
-
version = "2.1.1"
1681
+
version = "2.1.2"
1681
1682
source = "registry+https://github.com/rust-lang/crates.io-index"
1682
-
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
1683
+
checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
1683
1684
1684
1685
[[package]]
1685
1686
name = "icu_provider"
···
1802
1803
1803
1804
[[package]]
1804
1805
name = "iri-string"
1805
-
version = "0.7.9"
1806
+
version = "0.7.10"
1806
1807
source = "registry+https://github.com/rust-lang/crates.io-index"
1807
-
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
1808
+
checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a"
1808
1809
dependencies = [
1809
1810
"memchr",
1810
1811
"serde",
···
1824
1825
1825
1826
[[package]]
1826
1827
name = "itoa"
1827
-
version = "1.0.15"
1828
+
version = "1.0.17"
1828
1829
source = "registry+https://github.com/rust-lang/crates.io-index"
1829
-
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1830
+
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
1830
1831
1831
1832
[[package]]
1832
1833
name = "jacquard"
···
1935
1936
"jacquard-lexicon",
1936
1937
"proc-macro2",
1937
1938
"quote",
1938
-
"syn 2.0.111",
1939
+
"syn 2.0.113",
1939
1940
]
1940
1941
1941
1942
[[package]]
···
1986
1987
"serde_repr",
1987
1988
"serde_with",
1988
1989
"sha2",
1989
-
"syn 2.0.111",
1990
+
"syn 2.0.113",
1990
1991
"thiserror 2.0.17",
1991
1992
"unicode-segmentation",
1992
1993
]
···
2082
2083
2083
2084
[[package]]
2084
2085
name = "js-sys"
2085
-
version = "0.3.82"
2086
+
version = "0.3.83"
2086
2087
source = "registry+https://github.com/rust-lang/crates.io-index"
2087
-
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
2088
+
checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
2088
2089
dependencies = [
2089
2090
"once_cell",
2090
2091
"wasm-bindgen",
···
2113
2114
2114
2115
[[package]]
2115
2116
name = "libc"
2116
-
version = "0.2.177"
2117
+
version = "0.2.179"
2117
2118
source = "registry+https://github.com/rust-lang/crates.io-index"
2118
-
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
2119
+
checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f"
2119
2120
2120
2121
[[package]]
2121
2122
name = "libm"
···
2125
2126
2126
2127
[[package]]
2127
2128
name = "libredox"
2128
-
version = "0.1.10"
2129
+
version = "0.1.12"
2129
2130
source = "registry+https://github.com/rust-lang/crates.io-index"
2130
-
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
2131
+
checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616"
2131
2132
dependencies = [
2132
2133
"bitflags",
2133
2134
"libc",
2134
-
"redox_syscall",
2135
+
"redox_syscall 0.7.0",
2135
2136
]
2136
2137
2137
2138
[[package]]
···
2163
2164
2164
2165
[[package]]
2165
2166
name = "log"
2166
-
version = "0.4.28"
2167
+
version = "0.4.29"
2167
2168
source = "registry+https://github.com/rust-lang/crates.io-index"
2168
-
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
2169
+
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
2169
2170
2170
2171
[[package]]
2171
2172
name = "loom"
···
2299
2300
dependencies = [
2300
2301
"proc-macro2",
2301
2302
"quote",
2302
-
"syn 2.0.111",
2303
+
"syn 2.0.113",
2303
2304
]
2304
2305
2305
2306
[[package]]
···
2344
2345
2345
2346
[[package]]
2346
2347
name = "mio"
2347
-
version = "1.1.0"
2348
+
version = "1.1.1"
2348
2349
source = "registry+https://github.com/rust-lang/crates.io-index"
2349
-
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
2350
+
checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
2350
2351
dependencies = [
2351
2352
"libc",
2352
2353
"wasi",
···
2588
2589
2589
2590
[[package]]
2590
2591
name = "openssl-probe"
2591
-
version = "0.1.6"
2592
+
version = "0.2.0"
2592
2593
source = "registry+https://github.com/rust-lang/crates.io-index"
2593
-
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
2594
+
checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391"
2594
2595
2595
2596
[[package]]
2596
2597
name = "option-ext"
···
2619
2620
"proc-macro2",
2620
2621
"proc-macro2-diagnostics",
2621
2622
"quote",
2622
-
"syn 2.0.111",
2623
+
"syn 2.0.113",
2623
2624
]
2624
2625
2625
2626
[[package]]
···
2683
2684
dependencies = [
2684
2685
"cfg-if",
2685
2686
"libc",
2686
-
"redox_syscall",
2687
+
"redox_syscall 0.5.18",
2687
2688
"smallvec",
2688
-
"windows-link 0.2.1",
2689
+
"windows-link",
2689
2690
]
2690
2691
2691
2692
[[package]]
···
2758
2759
dependencies = [
2759
2760
"proc-macro2",
2760
2761
"quote",
2761
-
"syn 2.0.111",
2762
+
"syn 2.0.113",
2762
2763
]
2763
2764
2764
2765
[[package]]
···
2796
2797
2797
2798
[[package]]
2798
2799
name = "portable-atomic"
2799
-
version = "1.11.1"
2800
+
version = "1.13.0"
2800
2801
source = "registry+https://github.com/rust-lang/crates.io-index"
2801
-
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
2802
+
checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950"
2802
2803
2803
2804
[[package]]
2804
2805
name = "postcard"
···
2850
2851
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
2851
2852
dependencies = [
2852
2853
"proc-macro2",
2853
-
"syn 2.0.111",
2854
+
"syn 2.0.113",
2854
2855
]
2855
2856
2856
2857
[[package]]
···
2864
2865
2865
2866
[[package]]
2866
2867
name = "proc-macro2"
2867
-
version = "1.0.103"
2868
+
version = "1.0.105"
2868
2869
source = "registry+https://github.com/rust-lang/crates.io-index"
2869
-
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
2870
+
checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
2870
2871
dependencies = [
2871
2872
"unicode-ident",
2872
2873
]
···
2879
2880
dependencies = [
2880
2881
"proc-macro2",
2881
2882
"quote",
2882
-
"syn 2.0.111",
2883
+
"syn 2.0.113",
2883
2884
"version_check",
2884
2885
"yansi",
2885
2886
]
···
2947
2948
2948
2949
[[package]]
2949
2950
name = "quote"
2950
-
version = "1.0.42"
2951
+
version = "1.0.43"
2951
2952
source = "registry+https://github.com/rust-lang/crates.io-index"
2952
-
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
2953
+
checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
2953
2954
dependencies = [
2954
2955
"proc-macro2",
2955
2956
]
···
3029
3030
]
3030
3031
3031
3032
[[package]]
3033
+
name = "redox_syscall"
3034
+
version = "0.7.0"
3035
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3036
+
checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27"
3037
+
dependencies = [
3038
+
"bitflags",
3039
+
]
3040
+
3041
+
[[package]]
3032
3042
name = "redox_users"
3033
3043
version = "0.5.2"
3034
3044
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3076
3086
3077
3087
[[package]]
3078
3088
name = "reqwest"
3079
-
version = "0.12.24"
3089
+
version = "0.12.28"
3080
3090
source = "registry+https://github.com/rust-lang/crates.io-index"
3081
-
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
3091
+
checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
3082
3092
dependencies = [
3083
-
"async-compression",
3084
3093
"base64 0.22.1",
3085
3094
"bytes",
3086
3095
"encoding_rs",
···
3175
3184
3176
3185
[[package]]
3177
3186
name = "rsa"
3178
-
version = "0.9.9"
3187
+
version = "0.9.10"
3179
3188
source = "registry+https://github.com/rust-lang/crates.io-index"
3180
-
checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88"
3189
+
checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d"
3181
3190
dependencies = [
3182
3191
"const-oid",
3183
3192
"digest",
···
3216
3225
3217
3226
[[package]]
3218
3227
name = "rustix"
3219
-
version = "1.1.2"
3228
+
version = "1.1.3"
3220
3229
source = "registry+https://github.com/rust-lang/crates.io-index"
3221
-
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
3230
+
checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
3222
3231
dependencies = [
3223
3232
"bitflags",
3224
3233
"errno",
···
3229
3238
3230
3239
[[package]]
3231
3240
name = "rustls"
3232
-
version = "0.23.35"
3241
+
version = "0.23.36"
3233
3242
source = "registry+https://github.com/rust-lang/crates.io-index"
3234
-
checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f"
3243
+
checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b"
3235
3244
dependencies = [
3236
3245
"once_cell",
3237
3246
"ring",
···
3243
3252
3244
3253
[[package]]
3245
3254
name = "rustls-native-certs"
3246
-
version = "0.8.2"
3255
+
version = "0.8.3"
3247
3256
source = "registry+https://github.com/rust-lang/crates.io-index"
3248
-
checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923"
3257
+
checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
3249
3258
dependencies = [
3250
3259
"openssl-probe",
3251
3260
"rustls-pki-types",
···
3255
3264
3256
3265
[[package]]
3257
3266
name = "rustls-pki-types"
3258
-
version = "1.13.0"
3267
+
version = "1.13.2"
3259
3268
source = "registry+https://github.com/rust-lang/crates.io-index"
3260
-
checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a"
3269
+
checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282"
3261
3270
dependencies = [
3262
3271
"web-time",
3263
3272
"zeroize",
···
3282
3291
3283
3292
[[package]]
3284
3293
name = "ryu"
3285
-
version = "1.0.20"
3294
+
version = "1.0.22"
3286
3295
source = "registry+https://github.com/rust-lang/crates.io-index"
3287
-
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
3296
+
checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984"
3288
3297
3289
3298
[[package]]
3290
3299
name = "safemem"
···
3408
3417
dependencies = [
3409
3418
"proc-macro2",
3410
3419
"quote",
3411
-
"syn 2.0.111",
3420
+
"syn 2.0.113",
3412
3421
]
3413
3422
3414
3423
[[package]]
···
3437
3446
3438
3447
[[package]]
3439
3448
name = "serde_json"
3440
-
version = "1.0.145"
3449
+
version = "1.0.149"
3441
3450
source = "registry+https://github.com/rust-lang/crates.io-index"
3442
-
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3451
+
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
3443
3452
dependencies = [
3444
3453
"itoa",
3445
3454
"memchr",
3446
-
"ryu",
3447
3455
"serde",
3448
3456
"serde_core",
3457
+
"zmij",
3449
3458
]
3450
3459
3451
3460
[[package]]
···
3467
3476
dependencies = [
3468
3477
"proc-macro2",
3469
3478
"quote",
3470
-
"syn 2.0.111",
3479
+
"syn 2.0.113",
3471
3480
]
3472
3481
3473
3482
[[package]]
···
3484
3493
3485
3494
[[package]]
3486
3495
name = "serde_with"
3487
-
version = "3.16.0"
3496
+
version = "3.16.1"
3488
3497
source = "registry+https://github.com/rust-lang/crates.io-index"
3489
-
checksum = "10574371d41b0d9b2cff89418eda27da52bcaff2cc8741db26382a77c29131f1"
3498
+
checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7"
3490
3499
dependencies = [
3491
3500
"base64 0.22.1",
3492
3501
"chrono",
···
3499
3508
3500
3509
[[package]]
3501
3510
name = "serde_with_macros"
3502
-
version = "3.16.0"
3511
+
version = "3.16.1"
3503
3512
source = "registry+https://github.com/rust-lang/crates.io-index"
3504
-
checksum = "08a72d8216842fdd57820dc78d840bef99248e35fb2554ff923319e60f2d686b"
3513
+
checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c"
3505
3514
dependencies = [
3506
3515
"darling",
3507
3516
"proc-macro2",
3508
3517
"quote",
3509
-
"syn 2.0.111",
3518
+
"syn 2.0.113",
3510
3519
]
3511
3520
3512
3521
[[package]]
···
3563
3572
3564
3573
[[package]]
3565
3574
name = "signal-hook-registry"
3566
-
version = "1.4.7"
3575
+
version = "1.4.8"
3567
3576
source = "registry+https://github.com/rust-lang/crates.io-index"
3568
-
checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad"
3577
+
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
3569
3578
dependencies = [
3579
+
"errno",
3570
3580
"libc",
3571
3581
]
3572
3582
···
3582
3592
3583
3593
[[package]]
3584
3594
name = "simd-adler32"
3585
-
version = "0.3.7"
3595
+
version = "0.3.8"
3586
3596
source = "registry+https://github.com/rust-lang/crates.io-index"
3587
-
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
3597
+
checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
3588
3598
3589
3599
[[package]]
3590
3600
name = "siphasher"
···
3719
3729
3720
3730
[[package]]
3721
3731
name = "supports-hyperlinks"
3722
-
version = "3.1.0"
3732
+
version = "3.2.0"
3723
3733
source = "registry+https://github.com/rust-lang/crates.io-index"
3724
-
checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b"
3734
+
checksum = "e396b6523b11ccb83120b115a0b7366de372751aa6edf19844dfb13a6af97e91"
3725
3735
3726
3736
[[package]]
3727
3737
name = "supports-unicode"
···
3742
3752
3743
3753
[[package]]
3744
3754
name = "syn"
3745
-
version = "2.0.111"
3755
+
version = "2.0.113"
3746
3756
source = "registry+https://github.com/rust-lang/crates.io-index"
3747
-
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
3757
+
checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4"
3748
3758
dependencies = [
3749
3759
"proc-macro2",
3750
3760
"quote",
···
3768
3778
dependencies = [
3769
3779
"proc-macro2",
3770
3780
"quote",
3771
-
"syn 2.0.111",
3781
+
"syn 2.0.113",
3772
3782
]
3773
3783
3774
3784
[[package]]
···
3800
3810
3801
3811
[[package]]
3802
3812
name = "tempfile"
3803
-
version = "3.23.0"
3813
+
version = "3.24.0"
3804
3814
source = "registry+https://github.com/rust-lang/crates.io-index"
3805
-
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
3815
+
checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c"
3806
3816
dependencies = [
3807
3817
"fastrand",
3808
3818
"getrandom 0.3.4",
···
3868
3878
dependencies = [
3869
3879
"proc-macro2",
3870
3880
"quote",
3871
-
"syn 2.0.111",
3881
+
"syn 2.0.113",
3872
3882
]
3873
3883
3874
3884
[[package]]
···
3879
3889
dependencies = [
3880
3890
"proc-macro2",
3881
3891
"quote",
3882
-
"syn 2.0.111",
3892
+
"syn 2.0.113",
3883
3893
]
3884
3894
3885
3895
[[package]]
···
3960
3970
3961
3971
[[package]]
3962
3972
name = "tokio"
3963
-
version = "1.48.0"
3973
+
version = "1.49.0"
3964
3974
source = "registry+https://github.com/rust-lang/crates.io-index"
3965
-
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
3975
+
checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86"
3966
3976
dependencies = [
3967
3977
"bytes",
3968
3978
"libc",
···
3983
3993
dependencies = [
3984
3994
"proc-macro2",
3985
3995
"quote",
3986
-
"syn 2.0.111",
3996
+
"syn 2.0.113",
3987
3997
]
3988
3998
3989
3999
[[package]]
···
4033
4043
4034
4044
[[package]]
4035
4045
name = "tokio-util"
4036
-
version = "0.7.17"
4046
+
version = "0.7.18"
4037
4047
source = "registry+https://github.com/rust-lang/crates.io-index"
4038
-
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
4048
+
checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
4039
4049
dependencies = [
4040
4050
"bytes",
4041
4051
"futures-core",
···
4063
4073
4064
4074
[[package]]
4065
4075
name = "tower-http"
4066
-
version = "0.6.7"
4076
+
version = "0.6.8"
4067
4077
source = "registry+https://github.com/rust-lang/crates.io-index"
4068
-
checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456"
4078
+
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
4069
4079
dependencies = [
4070
4080
"async-compression",
4071
4081
"bitflags",
···
4104
4114
4105
4115
[[package]]
4106
4116
name = "tracing"
4107
-
version = "0.1.41"
4117
+
version = "0.1.44"
4108
4118
source = "registry+https://github.com/rust-lang/crates.io-index"
4109
-
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
4119
+
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
4110
4120
dependencies = [
4111
4121
"log",
4112
4122
"pin-project-lite",
···
4116
4126
4117
4127
[[package]]
4118
4128
name = "tracing-attributes"
4119
-
version = "0.1.30"
4129
+
version = "0.1.31"
4120
4130
source = "registry+https://github.com/rust-lang/crates.io-index"
4121
-
checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
4131
+
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
4122
4132
dependencies = [
4123
4133
"proc-macro2",
4124
4134
"quote",
4125
-
"syn 2.0.111",
4135
+
"syn 2.0.113",
4126
4136
]
4127
4137
4128
4138
[[package]]
4129
4139
name = "tracing-core"
4130
-
version = "0.1.34"
4140
+
version = "0.1.36"
4131
4141
source = "registry+https://github.com/rust-lang/crates.io-index"
4132
-
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
4142
+
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
4133
4143
dependencies = [
4134
4144
"once_cell",
4135
4145
"valuable",
···
4148
4158
4149
4159
[[package]]
4150
4160
name = "tracing-subscriber"
4151
-
version = "0.3.20"
4161
+
version = "0.3.22"
4152
4162
source = "registry+https://github.com/rust-lang/crates.io-index"
4153
-
checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5"
4163
+
checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e"
4154
4164
dependencies = [
4155
4165
"matchers",
4156
4166
"nu-ansi-term",
···
4172
4182
dependencies = [
4173
4183
"proc-macro2",
4174
4184
"quote",
4175
-
"syn 2.0.111",
4185
+
"syn 2.0.113",
4176
4186
]
4177
4187
4178
4188
[[package]]
···
4224
4234
4225
4235
[[package]]
4226
4236
name = "unicase"
4227
-
version = "2.8.1"
4237
+
version = "2.9.0"
4228
4238
source = "registry+https://github.com/rust-lang/crates.io-index"
4229
-
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
4239
+
checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
4230
4240
4231
4241
[[package]]
4232
4242
name = "unicode-ident"
···
4278
4288
4279
4289
[[package]]
4280
4290
name = "url"
4281
-
version = "2.5.7"
4291
+
version = "2.5.8"
4282
4292
source = "registry+https://github.com/rust-lang/crates.io-index"
4283
-
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
4293
+
checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
4284
4294
dependencies = [
4285
4295
"form_urlencoded",
4286
4296
"idna",
4287
4297
"percent-encoding",
4288
4298
"serde",
4299
+
"serde_derive",
4289
4300
]
4290
4301
4291
4302
[[package]]
···
4360
4371
4361
4372
[[package]]
4362
4373
name = "wasm-bindgen"
4363
-
version = "0.2.105"
4374
+
version = "0.2.106"
4364
4375
source = "registry+https://github.com/rust-lang/crates.io-index"
4365
-
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
4376
+
checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
4366
4377
dependencies = [
4367
4378
"cfg-if",
4368
4379
"once_cell",
···
4373
4384
4374
4385
[[package]]
4375
4386
name = "wasm-bindgen-futures"
4376
-
version = "0.4.55"
4387
+
version = "0.4.56"
4377
4388
source = "registry+https://github.com/rust-lang/crates.io-index"
4378
-
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
4389
+
checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c"
4379
4390
dependencies = [
4380
4391
"cfg-if",
4381
4392
"js-sys",
···
4386
4397
4387
4398
[[package]]
4388
4399
name = "wasm-bindgen-macro"
4389
-
version = "0.2.105"
4400
+
version = "0.2.106"
4390
4401
source = "registry+https://github.com/rust-lang/crates.io-index"
4391
-
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
4402
+
checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
4392
4403
dependencies = [
4393
4404
"quote",
4394
4405
"wasm-bindgen-macro-support",
···
4396
4407
4397
4408
[[package]]
4398
4409
name = "wasm-bindgen-macro-support"
4399
-
version = "0.2.105"
4410
+
version = "0.2.106"
4400
4411
source = "registry+https://github.com/rust-lang/crates.io-index"
4401
-
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
4412
+
checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
4402
4413
dependencies = [
4403
4414
"bumpalo",
4404
4415
"proc-macro2",
4405
4416
"quote",
4406
-
"syn 2.0.111",
4417
+
"syn 2.0.113",
4407
4418
"wasm-bindgen-shared",
4408
4419
]
4409
4420
4410
4421
[[package]]
4411
4422
name = "wasm-bindgen-shared"
4412
-
version = "0.2.105"
4423
+
version = "0.2.106"
4413
4424
source = "registry+https://github.com/rust-lang/crates.io-index"
4414
-
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
4425
+
checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
4415
4426
dependencies = [
4416
4427
"unicode-ident",
4417
4428
]
···
4431
4442
4432
4443
[[package]]
4433
4444
name = "web-sys"
4434
-
version = "0.3.82"
4445
+
version = "0.3.83"
4435
4446
source = "registry+https://github.com/rust-lang/crates.io-index"
4436
-
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
4447
+
checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
4437
4448
dependencies = [
4438
4449
"js-sys",
4439
4450
"wasm-bindgen",
···
4479
4490
4480
4491
[[package]]
4481
4492
name = "webpki-roots"
4482
-
version = "1.0.4"
4493
+
version = "1.0.5"
4483
4494
source = "registry+https://github.com/rust-lang/crates.io-index"
4484
-
checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e"
4495
+
checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c"
4485
4496
dependencies = [
4486
4497
"rustls-pki-types",
4487
4498
]
···
4499
4510
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
4500
4511
dependencies = [
4501
4512
"windows-sys 0.61.2",
4502
-
]
4503
-
4504
-
[[package]]
4505
-
name = "windows"
4506
-
version = "0.61.3"
4507
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4508
-
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
4509
-
dependencies = [
4510
-
"windows-collections",
4511
-
"windows-core 0.61.2",
4512
-
"windows-future",
4513
-
"windows-link 0.1.3",
4514
-
"windows-numerics",
4515
-
]
4516
-
4517
-
[[package]]
4518
-
name = "windows-collections"
4519
-
version = "0.2.0"
4520
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4521
-
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
4522
-
dependencies = [
4523
-
"windows-core 0.61.2",
4524
-
]
4525
-
4526
-
[[package]]
4527
-
name = "windows-core"
4528
-
version = "0.61.2"
4529
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4530
-
checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
4531
-
dependencies = [
4532
-
"windows-implement",
4533
-
"windows-interface",
4534
-
"windows-link 0.1.3",
4535
-
"windows-result 0.3.4",
4536
-
"windows-strings 0.4.2",
4537
4513
]
4538
4514
4539
4515
[[package]]
···
4544
4520
dependencies = [
4545
4521
"windows-implement",
4546
4522
"windows-interface",
4547
-
"windows-link 0.2.1",
4548
-
"windows-result 0.4.1",
4549
-
"windows-strings 0.5.1",
4550
-
]
4551
-
4552
-
[[package]]
4553
-
name = "windows-future"
4554
-
version = "0.2.1"
4555
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4556
-
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
4557
-
dependencies = [
4558
-
"windows-core 0.61.2",
4559
-
"windows-link 0.1.3",
4560
-
"windows-threading",
4523
+
"windows-link",
4524
+
"windows-result",
4525
+
"windows-strings",
4561
4526
]
4562
4527
4563
4528
[[package]]
···
4568
4533
dependencies = [
4569
4534
"proc-macro2",
4570
4535
"quote",
4571
-
"syn 2.0.111",
4536
+
"syn 2.0.113",
4572
4537
]
4573
4538
4574
4539
[[package]]
···
4579
4544
dependencies = [
4580
4545
"proc-macro2",
4581
4546
"quote",
4582
-
"syn 2.0.111",
4547
+
"syn 2.0.113",
4583
4548
]
4584
4549
4585
4550
[[package]]
4586
4551
name = "windows-link"
4587
-
version = "0.1.3"
4588
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4589
-
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
4590
-
4591
-
[[package]]
4592
-
name = "windows-link"
4593
4552
version = "0.2.1"
4594
4553
source = "registry+https://github.com/rust-lang/crates.io-index"
4595
4554
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
4596
4555
4597
4556
[[package]]
4598
-
name = "windows-numerics"
4599
-
version = "0.2.0"
4600
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4601
-
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
4602
-
dependencies = [
4603
-
"windows-core 0.61.2",
4604
-
"windows-link 0.1.3",
4605
-
]
4606
-
4607
-
[[package]]
4608
4557
name = "windows-registry"
4609
4558
version = "0.6.1"
4610
4559
source = "registry+https://github.com/rust-lang/crates.io-index"
4611
4560
checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
4612
4561
dependencies = [
4613
-
"windows-link 0.2.1",
4614
-
"windows-result 0.4.1",
4615
-
"windows-strings 0.5.1",
4616
-
]
4617
-
4618
-
[[package]]
4619
-
name = "windows-result"
4620
-
version = "0.3.4"
4621
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4622
-
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
4623
-
dependencies = [
4624
-
"windows-link 0.1.3",
4562
+
"windows-link",
4563
+
"windows-result",
4564
+
"windows-strings",
4625
4565
]
4626
4566
4627
4567
[[package]]
···
4630
4570
source = "registry+https://github.com/rust-lang/crates.io-index"
4631
4571
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
4632
4572
dependencies = [
4633
-
"windows-link 0.2.1",
4634
-
]
4635
-
4636
-
[[package]]
4637
-
name = "windows-strings"
4638
-
version = "0.4.2"
4639
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4640
-
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
4641
-
dependencies = [
4642
-
"windows-link 0.1.3",
4573
+
"windows-link",
4643
4574
]
4644
4575
4645
4576
[[package]]
···
4648
4579
source = "registry+https://github.com/rust-lang/crates.io-index"
4649
4580
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
4650
4581
dependencies = [
4651
-
"windows-link 0.2.1",
4582
+
"windows-link",
4652
4583
]
4653
4584
4654
4585
[[package]]
···
4702
4633
source = "registry+https://github.com/rust-lang/crates.io-index"
4703
4634
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
4704
4635
dependencies = [
4705
-
"windows-link 0.2.1",
4636
+
"windows-link",
4706
4637
]
4707
4638
4708
4639
[[package]]
···
4757
4688
source = "registry+https://github.com/rust-lang/crates.io-index"
4758
4689
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
4759
4690
dependencies = [
4760
-
"windows-link 0.2.1",
4691
+
"windows-link",
4761
4692
"windows_aarch64_gnullvm 0.53.1",
4762
4693
"windows_aarch64_msvc 0.53.1",
4763
4694
"windows_i686_gnu 0.53.1",
···
4766
4697
"windows_x86_64_gnu 0.53.1",
4767
4698
"windows_x86_64_gnullvm 0.53.1",
4768
4699
"windows_x86_64_msvc 0.53.1",
4769
-
]
4770
-
4771
-
[[package]]
4772
-
name = "windows-threading"
4773
-
version = "0.1.0"
4774
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4775
-
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
4776
-
dependencies = [
4777
-
"windows-link 0.1.3",
4778
4700
]
4779
4701
4780
4702
[[package]]
···
5067
4989
dependencies = [
5068
4990
"proc-macro2",
5069
4991
"quote",
5070
-
"syn 2.0.111",
4992
+
"syn 2.0.113",
5071
4993
"synstructure",
5072
4994
]
5073
4995
5074
4996
[[package]]
5075
4997
name = "zerocopy"
5076
-
version = "0.8.30"
4998
+
version = "0.8.32"
5077
4999
source = "registry+https://github.com/rust-lang/crates.io-index"
5078
-
checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c"
5000
+
checksum = "1fabae64378cb18147bb18bca364e63bdbe72a0ffe4adf0addfec8aa166b2c56"
5079
5001
dependencies = [
5080
5002
"zerocopy-derive",
5081
5003
]
5082
5004
5083
5005
[[package]]
5084
5006
name = "zerocopy-derive"
5085
-
version = "0.8.30"
5007
+
version = "0.8.32"
5086
5008
source = "registry+https://github.com/rust-lang/crates.io-index"
5087
-
checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5"
5009
+
checksum = "c9c2d862265a8bb4471d87e033e730f536e2a285cc7cb05dbce09a2a97075f90"
5088
5010
dependencies = [
5089
5011
"proc-macro2",
5090
5012
"quote",
5091
-
"syn 2.0.111",
5013
+
"syn 2.0.113",
5092
5014
]
5093
5015
5094
5016
[[package]]
···
5108
5030
dependencies = [
5109
5031
"proc-macro2",
5110
5032
"quote",
5111
-
"syn 2.0.111",
5033
+
"syn 2.0.113",
5112
5034
"synstructure",
5113
5035
]
5114
5036
···
5151
5073
dependencies = [
5152
5074
"proc-macro2",
5153
5075
"quote",
5154
-
"syn 2.0.111",
5076
+
"syn 2.0.113",
5155
5077
]
5078
+
5079
+
[[package]]
5080
+
name = "zmij"
5081
+
version = "1.0.12"
5082
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5083
+
checksum = "2fc5a66a20078bf1251bde995aa2fdcc4b800c70b5d92dd2c62abc5c60f679f8"
+16
cli/default.nix
+16
cli/default.nix
···
1
+
{
2
+
rustPlatform,
3
+
glibc,
4
+
}:
5
+
rustPlatform.buildRustPackage {
6
+
name = "wisp-cli";
7
+
src = ./.;
8
+
cargoLock = {
9
+
lockFile = ./Cargo.lock;
10
+
outputHashes = {
11
+
"jacquard-0.9.5" = "sha256-75bas4VAYFcZAcBspSqS4vlJe8nmFn9ncTgeoT/OvnA=";
12
+
};
13
+
};
14
+
buildInputs = [glibc.static];
15
+
RUSTFLAGS = ["-C" "target-feature=+crt-static"];
16
+
}
+96
cli/flake.lock
+96
cli/flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"flake-utils": {
4
+
"inputs": {
5
+
"systems": "systems"
6
+
},
7
+
"locked": {
8
+
"lastModified": 1731533236,
9
+
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
10
+
"owner": "numtide",
11
+
"repo": "flake-utils",
12
+
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
13
+
"type": "github"
14
+
},
15
+
"original": {
16
+
"owner": "numtide",
17
+
"repo": "flake-utils",
18
+
"type": "github"
19
+
}
20
+
},
21
+
"nixpkgs": {
22
+
"locked": {
23
+
"lastModified": 1767640445,
24
+
"narHash": "sha256-UWYqmD7JFBEDBHWYcqE6s6c77pWdcU/i+bwD6XxMb8A=",
25
+
"owner": "NixOS",
26
+
"repo": "nixpkgs",
27
+
"rev": "9f0c42f8bc7151b8e7e5840fb3bd454ad850d8c5",
28
+
"type": "github"
29
+
},
30
+
"original": {
31
+
"owner": "NixOS",
32
+
"ref": "nixos-unstable",
33
+
"repo": "nixpkgs",
34
+
"type": "github"
35
+
}
36
+
},
37
+
"nixpkgs_2": {
38
+
"locked": {
39
+
"lastModified": 1744536153,
40
+
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
41
+
"owner": "NixOS",
42
+
"repo": "nixpkgs",
43
+
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
44
+
"type": "github"
45
+
},
46
+
"original": {
47
+
"owner": "NixOS",
48
+
"ref": "nixpkgs-unstable",
49
+
"repo": "nixpkgs",
50
+
"type": "github"
51
+
}
52
+
},
53
+
"root": {
54
+
"inputs": {
55
+
"flake-utils": "flake-utils",
56
+
"nixpkgs": "nixpkgs",
57
+
"rust-overlay": "rust-overlay"
58
+
}
59
+
},
60
+
"rust-overlay": {
61
+
"inputs": {
62
+
"nixpkgs": "nixpkgs_2"
63
+
},
64
+
"locked": {
65
+
"lastModified": 1767667566,
66
+
"narHash": "sha256-COy+yxZGuhQRVD1r4bWVgeFt1GB+IB1k5WRpDKbLfI8=",
67
+
"owner": "oxalica",
68
+
"repo": "rust-overlay",
69
+
"rev": "056ce5b125ab32ffe78c7d3e394d9da44733c95e",
70
+
"type": "github"
71
+
},
72
+
"original": {
73
+
"owner": "oxalica",
74
+
"repo": "rust-overlay",
75
+
"type": "github"
76
+
}
77
+
},
78
+
"systems": {
79
+
"locked": {
80
+
"lastModified": 1681028828,
81
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
82
+
"owner": "nix-systems",
83
+
"repo": "default",
84
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
85
+
"type": "github"
86
+
},
87
+
"original": {
88
+
"owner": "nix-systems",
89
+
"repo": "default",
90
+
"type": "github"
91
+
}
92
+
}
93
+
},
94
+
"root": "root",
95
+
"version": 7
96
+
}
+136
cli/flake.nix
+136
cli/flake.nix
···
1
+
{
2
+
inputs = {
3
+
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
4
+
rust-overlay.url = "github:oxalica/rust-overlay";
5
+
flake-utils.url = "github:numtide/flake-utils";
6
+
};
7
+
8
+
outputs = { self, nixpkgs, rust-overlay, flake-utils }:
9
+
flake-utils.lib.eachDefaultSystem (system:
10
+
let
11
+
overlays = [ (import rust-overlay) ];
12
+
pkgs = import nixpkgs { inherit system overlays; };
13
+
14
+
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
15
+
targets = [
16
+
"x86_64-unknown-linux-musl"
17
+
"aarch64-unknown-linux-musl"
18
+
"x86_64-apple-darwin"
19
+
"aarch64-apple-darwin"
20
+
];
21
+
};
22
+
23
+
cargoLockConfig = {
24
+
lockFile = ./Cargo.lock;
25
+
outputHashes = {
26
+
"jacquard-0.9.5" = "sha256-75bas4VAYFcZAcBspSqS4vlJe8nmFn9ncTgeoT/OvnA=";
27
+
};
28
+
};
29
+
30
+
# Native build for current system
31
+
native = pkgs.rustPlatform.buildRustPackage {
32
+
pname = "wisp-cli";
33
+
version = "0.4.2";
34
+
src = ./.;
35
+
cargoLock = cargoLockConfig;
36
+
nativeBuildInputs = [ rustToolchain ];
37
+
};
38
+
39
+
# Cross-compilation targets (Linux from macOS needs zigbuild)
40
+
linuxTargets = let
41
+
zigbuildPkgs = pkgs;
42
+
in {
43
+
x86_64-linux = pkgs.stdenv.mkDerivation {
44
+
pname = "wisp-cli-x86_64-linux";
45
+
version = "0.4.2";
46
+
src = ./.;
47
+
48
+
nativeBuildInputs = [
49
+
rustToolchain
50
+
pkgs.cargo-zigbuild
51
+
pkgs.zig
52
+
];
53
+
54
+
buildPhase = ''
55
+
export HOME=$(mktemp -d)
56
+
cargo zigbuild --release --target x86_64-unknown-linux-musl
57
+
'';
58
+
59
+
installPhase = ''
60
+
mkdir -p $out/bin
61
+
cp target/x86_64-unknown-linux-musl/release/wisp-cli $out/bin/
62
+
'';
63
+
64
+
# Skip Nix's cargo vendor - we use network
65
+
dontConfigure = true;
66
+
dontFixup = true;
67
+
};
68
+
69
+
aarch64-linux = pkgs.stdenv.mkDerivation {
70
+
pname = "wisp-cli-aarch64-linux";
71
+
version = "0.4.2";
72
+
src = ./.;
73
+
74
+
nativeBuildInputs = [
75
+
rustToolchain
76
+
pkgs.cargo-zigbuild
77
+
pkgs.zig
78
+
];
79
+
80
+
buildPhase = ''
81
+
export HOME=$(mktemp -d)
82
+
cargo zigbuild --release --target aarch64-unknown-linux-musl
83
+
'';
84
+
85
+
installPhase = ''
86
+
mkdir -p $out/bin
87
+
cp target/aarch64-unknown-linux-musl/release/wisp-cli $out/bin/
88
+
'';
89
+
90
+
dontConfigure = true;
91
+
dontFixup = true;
92
+
};
93
+
};
94
+
95
+
in {
96
+
packages = {
97
+
default = native;
98
+
inherit native;
99
+
100
+
# macOS universal binary
101
+
macos-universal = pkgs.stdenv.mkDerivation {
102
+
pname = "wisp-cli-macos-universal";
103
+
version = "0.4.2";
104
+
src = ./.;
105
+
106
+
nativeBuildInputs = [ rustToolchain pkgs.darwin.lipo ];
107
+
108
+
buildPhase = ''
109
+
export HOME=$(mktemp -d)
110
+
cargo build --release --target aarch64-apple-darwin
111
+
cargo build --release --target x86_64-apple-darwin
112
+
'';
113
+
114
+
installPhase = ''
115
+
mkdir -p $out/bin
116
+
lipo -create \
117
+
target/aarch64-apple-darwin/release/wisp-cli \
118
+
target/x86_64-apple-darwin/release/wisp-cli \
119
+
-output $out/bin/wisp-cli
120
+
'';
121
+
122
+
dontConfigure = true;
123
+
dontFixup = true;
124
+
};
125
+
} // (if pkgs.stdenv.isDarwin then linuxTargets else {});
126
+
127
+
devShells.default = pkgs.mkShell {
128
+
buildInputs = [
129
+
rustToolchain
130
+
pkgs.cargo-zigbuild
131
+
pkgs.zig
132
+
];
133
+
};
134
+
}
135
+
);
136
+
}
-318
flake.lock
-318
flake.lock
···
1
-
{
2
-
"nodes": {
3
-
"crane": {
4
-
"flake": false,
5
-
"locked": {
6
-
"lastModified": 1758758545,
7
-
"narHash": "sha256-NU5WaEdfwF6i8faJ2Yh+jcK9vVFrofLcwlD/mP65JrI=",
8
-
"owner": "ipetkov",
9
-
"repo": "crane",
10
-
"rev": "95d528a5f54eaba0d12102249ce42f4d01f4e364",
11
-
"type": "github"
12
-
},
13
-
"original": {
14
-
"owner": "ipetkov",
15
-
"ref": "v0.21.1",
16
-
"repo": "crane",
17
-
"type": "github"
18
-
}
19
-
},
20
-
"dream2nix": {
21
-
"inputs": {
22
-
"nixpkgs": [
23
-
"nci",
24
-
"nixpkgs"
25
-
],
26
-
"purescript-overlay": "purescript-overlay",
27
-
"pyproject-nix": "pyproject-nix"
28
-
},
29
-
"locked": {
30
-
"lastModified": 1754978539,
31
-
"narHash": "sha256-nrDovydywSKRbWim9Ynmgj8SBm8LK3DI2WuhIqzOHYI=",
32
-
"owner": "nix-community",
33
-
"repo": "dream2nix",
34
-
"rev": "fbec3263cb4895ac86ee9506cdc4e6919a1a2214",
35
-
"type": "github"
36
-
},
37
-
"original": {
38
-
"owner": "nix-community",
39
-
"repo": "dream2nix",
40
-
"type": "github"
41
-
}
42
-
},
43
-
"fenix": {
44
-
"inputs": {
45
-
"nixpkgs": [
46
-
"nixpkgs"
47
-
],
48
-
"rust-analyzer-src": "rust-analyzer-src"
49
-
},
50
-
"locked": {
51
-
"lastModified": 1762584108,
52
-
"narHash": "sha256-wZUW7dlXMXaRdvNbaADqhF8gg9bAfFiMV+iyFQiDv+Y=",
53
-
"owner": "nix-community",
54
-
"repo": "fenix",
55
-
"rev": "32f3ad3b6c690061173e1ac16708874975ec6056",
56
-
"type": "github"
57
-
},
58
-
"original": {
59
-
"owner": "nix-community",
60
-
"repo": "fenix",
61
-
"type": "github"
62
-
}
63
-
},
64
-
"flake-compat": {
65
-
"flake": false,
66
-
"locked": {
67
-
"lastModified": 1696426674,
68
-
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
69
-
"owner": "edolstra",
70
-
"repo": "flake-compat",
71
-
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
72
-
"type": "github"
73
-
},
74
-
"original": {
75
-
"owner": "edolstra",
76
-
"repo": "flake-compat",
77
-
"type": "github"
78
-
}
79
-
},
80
-
"mk-naked-shell": {
81
-
"flake": false,
82
-
"locked": {
83
-
"lastModified": 1681286841,
84
-
"narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=",
85
-
"owner": "90-008",
86
-
"repo": "mk-naked-shell",
87
-
"rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd",
88
-
"type": "github"
89
-
},
90
-
"original": {
91
-
"owner": "90-008",
92
-
"repo": "mk-naked-shell",
93
-
"type": "github"
94
-
}
95
-
},
96
-
"nci": {
97
-
"inputs": {
98
-
"crane": "crane",
99
-
"dream2nix": "dream2nix",
100
-
"mk-naked-shell": "mk-naked-shell",
101
-
"nixpkgs": [
102
-
"nixpkgs"
103
-
],
104
-
"parts": "parts",
105
-
"rust-overlay": "rust-overlay",
106
-
"treefmt": "treefmt"
107
-
},
108
-
"locked": {
109
-
"lastModified": 1762582646,
110
-
"narHash": "sha256-MMzE4xccG+8qbLhdaZoeFDUKWUOn3B4lhp5dZmgukmM=",
111
-
"owner": "90-008",
112
-
"repo": "nix-cargo-integration",
113
-
"rev": "0993c449377049fa8868a664e8290ac6658e0b9a",
114
-
"type": "github"
115
-
},
116
-
"original": {
117
-
"owner": "90-008",
118
-
"repo": "nix-cargo-integration",
119
-
"type": "github"
120
-
}
121
-
},
122
-
"nixpkgs": {
123
-
"locked": {
124
-
"lastModified": 1762361079,
125
-
"narHash": "sha256-lz718rr1BDpZBYk7+G8cE6wee3PiBUpn8aomG/vLLiY=",
126
-
"owner": "nixos",
127
-
"repo": "nixpkgs",
128
-
"rev": "ffcdcf99d65c61956d882df249a9be53e5902ea5",
129
-
"type": "github"
130
-
},
131
-
"original": {
132
-
"owner": "nixos",
133
-
"ref": "nixpkgs-unstable",
134
-
"repo": "nixpkgs",
135
-
"type": "github"
136
-
}
137
-
},
138
-
"parts": {
139
-
"inputs": {
140
-
"nixpkgs-lib": [
141
-
"nci",
142
-
"nixpkgs"
143
-
]
144
-
},
145
-
"locked": {
146
-
"lastModified": 1762440070,
147
-
"narHash": "sha256-xxdepIcb39UJ94+YydGP221rjnpkDZUlykKuF54PsqI=",
148
-
"owner": "hercules-ci",
149
-
"repo": "flake-parts",
150
-
"rev": "26d05891e14c88eb4a5d5bee659c0db5afb609d8",
151
-
"type": "github"
152
-
},
153
-
"original": {
154
-
"owner": "hercules-ci",
155
-
"repo": "flake-parts",
156
-
"type": "github"
157
-
}
158
-
},
159
-
"parts_2": {
160
-
"inputs": {
161
-
"nixpkgs-lib": [
162
-
"nixpkgs"
163
-
]
164
-
},
165
-
"locked": {
166
-
"lastModified": 1762440070,
167
-
"narHash": "sha256-xxdepIcb39UJ94+YydGP221rjnpkDZUlykKuF54PsqI=",
168
-
"owner": "hercules-ci",
169
-
"repo": "flake-parts",
170
-
"rev": "26d05891e14c88eb4a5d5bee659c0db5afb609d8",
171
-
"type": "github"
172
-
},
173
-
"original": {
174
-
"owner": "hercules-ci",
175
-
"repo": "flake-parts",
176
-
"type": "github"
177
-
}
178
-
},
179
-
"purescript-overlay": {
180
-
"inputs": {
181
-
"flake-compat": "flake-compat",
182
-
"nixpkgs": [
183
-
"nci",
184
-
"dream2nix",
185
-
"nixpkgs"
186
-
],
187
-
"slimlock": "slimlock"
188
-
},
189
-
"locked": {
190
-
"lastModified": 1728546539,
191
-
"narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=",
192
-
"owner": "thomashoneyman",
193
-
"repo": "purescript-overlay",
194
-
"rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4",
195
-
"type": "github"
196
-
},
197
-
"original": {
198
-
"owner": "thomashoneyman",
199
-
"repo": "purescript-overlay",
200
-
"type": "github"
201
-
}
202
-
},
203
-
"pyproject-nix": {
204
-
"inputs": {
205
-
"nixpkgs": [
206
-
"nci",
207
-
"dream2nix",
208
-
"nixpkgs"
209
-
]
210
-
},
211
-
"locked": {
212
-
"lastModified": 1752481895,
213
-
"narHash": "sha256-luVj97hIMpCbwhx3hWiRwjP2YvljWy8FM+4W9njDhLA=",
214
-
"owner": "pyproject-nix",
215
-
"repo": "pyproject.nix",
216
-
"rev": "16ee295c25107a94e59a7fc7f2e5322851781162",
217
-
"type": "github"
218
-
},
219
-
"original": {
220
-
"owner": "pyproject-nix",
221
-
"repo": "pyproject.nix",
222
-
"type": "github"
223
-
}
224
-
},
225
-
"root": {
226
-
"inputs": {
227
-
"fenix": "fenix",
228
-
"nci": "nci",
229
-
"nixpkgs": "nixpkgs",
230
-
"parts": "parts_2"
231
-
}
232
-
},
233
-
"rust-analyzer-src": {
234
-
"flake": false,
235
-
"locked": {
236
-
"lastModified": 1762438844,
237
-
"narHash": "sha256-ApIKJf6CcMsV2nYBXhGF95BmZMO/QXPhgfSnkA/rVUo=",
238
-
"owner": "rust-lang",
239
-
"repo": "rust-analyzer",
240
-
"rev": "4bf516ee5a960c1e2eee9fedd9b1c9e976a19c86",
241
-
"type": "github"
242
-
},
243
-
"original": {
244
-
"owner": "rust-lang",
245
-
"ref": "nightly",
246
-
"repo": "rust-analyzer",
247
-
"type": "github"
248
-
}
249
-
},
250
-
"rust-overlay": {
251
-
"inputs": {
252
-
"nixpkgs": [
253
-
"nci",
254
-
"nixpkgs"
255
-
]
256
-
},
257
-
"locked": {
258
-
"lastModified": 1762569282,
259
-
"narHash": "sha256-vINZAJpXQTZd5cfh06Rcw7hesH7sGSvi+Tn+HUieJn8=",
260
-
"owner": "oxalica",
261
-
"repo": "rust-overlay",
262
-
"rev": "a35a6144b976f70827c2fe2f5c89d16d8f9179d8",
263
-
"type": "github"
264
-
},
265
-
"original": {
266
-
"owner": "oxalica",
267
-
"repo": "rust-overlay",
268
-
"type": "github"
269
-
}
270
-
},
271
-
"slimlock": {
272
-
"inputs": {
273
-
"nixpkgs": [
274
-
"nci",
275
-
"dream2nix",
276
-
"purescript-overlay",
277
-
"nixpkgs"
278
-
]
279
-
},
280
-
"locked": {
281
-
"lastModified": 1688756706,
282
-
"narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=",
283
-
"owner": "thomashoneyman",
284
-
"repo": "slimlock",
285
-
"rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c",
286
-
"type": "github"
287
-
},
288
-
"original": {
289
-
"owner": "thomashoneyman",
290
-
"repo": "slimlock",
291
-
"type": "github"
292
-
}
293
-
},
294
-
"treefmt": {
295
-
"inputs": {
296
-
"nixpkgs": [
297
-
"nci",
298
-
"nixpkgs"
299
-
]
300
-
},
301
-
"locked": {
302
-
"lastModified": 1762410071,
303
-
"narHash": "sha256-aF5fvoZeoXNPxT0bejFUBXeUjXfHLSL7g+mjR/p5TEg=",
304
-
"owner": "numtide",
305
-
"repo": "treefmt-nix",
306
-
"rev": "97a30861b13c3731a84e09405414398fbf3e109f",
307
-
"type": "github"
308
-
},
309
-
"original": {
310
-
"owner": "numtide",
311
-
"repo": "treefmt-nix",
312
-
"type": "github"
313
-
}
314
-
}
315
-
},
316
-
"root": "root",
317
-
"version": 7
318
-
}
-59
flake.nix
-59
flake.nix
···
1
-
{
2
-
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
3
-
inputs.nci.url = "github:90-008/nix-cargo-integration";
4
-
inputs.nci.inputs.nixpkgs.follows = "nixpkgs";
5
-
inputs.parts.url = "github:hercules-ci/flake-parts";
6
-
inputs.parts.inputs.nixpkgs-lib.follows = "nixpkgs";
7
-
inputs.fenix = {
8
-
url = "github:nix-community/fenix";
9
-
inputs.nixpkgs.follows = "nixpkgs";
10
-
};
11
-
12
-
outputs = inputs @ {
13
-
parts,
14
-
nci,
15
-
...
16
-
}:
17
-
parts.lib.mkFlake {inherit inputs;} {
18
-
systems = ["x86_64-linux" "aarch64-darwin"];
19
-
imports = [
20
-
nci.flakeModule
21
-
./crates.nix
22
-
];
23
-
perSystem = {
24
-
pkgs,
25
-
config,
26
-
...
27
-
}: let
28
-
crateOutputs = config.nci.outputs."wisp-cli";
29
-
mkRenamedPackage = name: pkg: isWindows: pkgs.runCommand name {} ''
30
-
mkdir -p $out/bin
31
-
if [ -f ${pkg}/bin/wisp-cli.exe ]; then
32
-
cp ${pkg}/bin/wisp-cli.exe $out/bin/${name}
33
-
elif [ -f ${pkg}/bin/wisp-cli ]; then
34
-
cp ${pkg}/bin/wisp-cli $out/bin/${name}
35
-
else
36
-
echo "Error: Could not find wisp-cli binary in ${pkg}/bin/"
37
-
ls -la ${pkg}/bin/ || true
38
-
exit 1
39
-
fi
40
-
'';
41
-
in {
42
-
devShells.default = crateOutputs.devShell;
43
-
packages.default = crateOutputs.packages.release;
44
-
packages.wisp-cli-x86_64-linux = mkRenamedPackage "wisp-cli-x86_64-linux" crateOutputs.packages.release false;
45
-
packages.wisp-cli-aarch64-linux = mkRenamedPackage "wisp-cli-aarch64-linux" crateOutputs.allTargets."aarch64-unknown-linux-gnu".packages.release false;
46
-
packages.wisp-cli-x86_64-windows = mkRenamedPackage "wisp-cli-x86_64-windows.exe" crateOutputs.allTargets."x86_64-pc-windows-gnu".packages.release true;
47
-
packages.wisp-cli-aarch64-darwin = mkRenamedPackage "wisp-cli-aarch64-darwin" crateOutputs.allTargets."aarch64-apple-darwin".packages.release false;
48
-
packages.all = pkgs.symlinkJoin {
49
-
name = "wisp-cli-all";
50
-
paths = [
51
-
config.packages.wisp-cli-x86_64-linux
52
-
config.packages.wisp-cli-aarch64-linux
53
-
config.packages.wisp-cli-x86_64-windows
54
-
config.packages.wisp-cli-aarch64-darwin
55
-
];
56
-
};
57
-
};
58
-
};
59
-
}