mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 16:02:32 +00:00
45 lines
2.0 KiB
JavaScript
45 lines
2.0 KiB
JavaScript
import { readFileSync } from 'node:fs'
|
|
import { join, resolve } from 'node:path'
|
|
import { describe, expect, it } from 'vitest'
|
|
import { parse } from 'yaml'
|
|
|
|
const projectDir = resolve(import.meta.dirname, '../..')
|
|
|
|
const readWorkflow = (relativePath) => parse(readFileSync(join(projectDir, relativePath), 'utf8'))
|
|
|
|
// Every step that mirrors this repo's whole ref namespace onto a runner disk to
|
|
// prove a commit is reachable from a branch or tag before signing it.
|
|
const REF_MIRRORS = [
|
|
['.github/workflows/adhoc-mac-build.yml', 'build-adhoc-mac', 'Vet the requested ref'],
|
|
['.github/workflows/dev-channel-win-build.yml', 'build-win', 'Vet the requested inputs']
|
|
]
|
|
|
|
describe('ref-mirroring vet steps', () => {
|
|
it('keeps the full-history adhoc checkout on the same case-safe backend', () => {
|
|
const steps = readWorkflow('.github/workflows/adhoc-mac-build.yml').jobs['build-adhoc-mac']
|
|
.steps
|
|
const checkout = steps.find((step) => step.name === 'Checkout the requested ref')
|
|
expect(checkout.env.GIT_DEFAULT_REF_FORMAT).toBe('reftable')
|
|
expect(checkout.with.ref).toBe('${{ steps.vetted.outputs.sha }}')
|
|
expect(checkout.with['fetch-depth']).toBe(0)
|
|
expect(checkout.with['persist-credentials']).toBe(false)
|
|
})
|
|
|
|
// Why: macOS and Windows runner disks are case-insensitive, and this repo has
|
|
// branches that differ only in casing. The files backend cannot store both, and
|
|
// it fails the whole fetch rather than the one ref — so the vet step dies before
|
|
// any build runs. reftable keys refs in a table instead of file paths.
|
|
it.each(REF_MIRRORS)(
|
|
'%s creates its scratch repo with the reftable backend',
|
|
(path, job, step) => {
|
|
const run = readWorkflow(path).jobs[job].steps.find(
|
|
(candidate) => candidate.name === step
|
|
).run
|
|
|
|
expect(run).toContain('+refs/heads/*:refs/heads/*')
|
|
expect(run).toMatch(/git init\b[^\n]*--ref-format=reftable/)
|
|
expect(run).not.toMatch(/git init -q --bare "\$scratch"/)
|
|
}
|
|
)
|
|
})
|