cc-haha/desktop/scripts/prepare-ripgrep.test.ts
2026-07-14 22:11:22 +08:00

74 lines
2.2 KiB
TypeScript

import { afterEach, describe, expect, test } from 'vitest'
import { mkdtemp, rm, writeFile } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import path from 'node:path'
import {
getBundledRipgrepName,
getRipgrepAsset,
getRipgrepDownloadUrl,
prepareRipgrep,
RIPGREP_VERSION,
} from './prepare-ripgrep'
const tempDirs: string[] = []
afterEach(async () => {
await Promise.all(tempDirs.splice(0).map(dir =>
rm(dir, { recursive: true, force: true })))
})
const supportedTargets = [
'aarch64-apple-darwin',
'x86_64-apple-darwin',
'aarch64-pc-windows-msvc',
'x86_64-pc-windows-msvc',
'aarch64-unknown-linux-gnu',
'x86_64-unknown-linux-gnu',
]
describe('prepare-ripgrep target mapping', () => {
test('pins checksummed official assets for every desktop release target', () => {
for (const target of supportedTargets) {
const asset = getRipgrepAsset(target)
expect(asset.sha256).toMatch(/^[a-f0-9]{64}$/)
expect(asset.archiveName).toContain(`ripgrep-${RIPGREP_VERSION}-`)
expect(getRipgrepDownloadUrl(target)).toBe(
`https://github.com/BurntSushi/ripgrep/releases/download/${RIPGREP_VERSION}/${asset.archiveName}`,
)
}
})
test('uses a static musl archive for the x64 Linux release', () => {
expect(getRipgrepAsset('x86_64-unknown-linux-gnu').assetTriple).toBe(
'x86_64-unknown-linux-musl',
)
})
test('stages executables beside the matching sidecar', () => {
expect(getBundledRipgrepName('aarch64-apple-darwin')).toBe(
'rg',
)
expect(getBundledRipgrepName('x86_64-pc-windows-msvc')).toBe(
'rg.exe',
)
})
test('rejects unsupported targets', () => {
expect(() => getRipgrepAsset('armv7-unknown-linux-gnu')).toThrow(
'Unsupported target triple',
)
})
test('rejects a local archive that does not match the pinned checksum', async () => {
const fixtureDir = await mkdtemp(path.join(tmpdir(), 'cc-haha-ripgrep-test-'))
tempDirs.push(fixtureDir)
const archivePath = path.join(fixtureDir, 'ripgrep.tar.gz')
await writeFile(archivePath, 'not an official ripgrep archive')
await expect(prepareRipgrep({
targetTriple: 'aarch64-apple-darwin',
archivePath,
})).rejects.toThrow('SHA256 mismatch')
})
})