import { readFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { describe, expect, it } from 'vitest'; const workflow = readFileSync( resolve(process.cwd(), '.gitea/workflows/project-ci.yml'), 'utf8', ); function backendStepIndex(stepName: string) { const backendJobStart = workflow.indexOf(' backend-tests:'); const nativeShellJobStart = workflow.indexOf(' native-shell-tests:'); expect(backendJobStart).toBeGreaterThanOrEqual(0); expect(nativeShellJobStart).toBeGreaterThan(backendJobStart); return workflow .slice(backendJobStart, nativeShellJobStart) .indexOf(` - name: ${stepName}`); } describe('project CI workflow', () => { it('prepares locked server-rs dependencies before the first Cargo build gate', () => { const prepareDependencies = backendStepIndex( 'Prepare server-rs Rust dependencies', ); const checkBoundaries = backendStepIndex('Check server-rs boundaries'); const runWorkspaceTests = backendStepIndex('Run server-rs workspace tests'); expect(prepareDependencies).toBeGreaterThanOrEqual(0); expect(checkBoundaries).toBeGreaterThan(prepareDependencies); expect(runWorkspaceTests).toBeGreaterThan(checkBoundaries); expect(workflow).toContain('cargo fetch --locked'); expect(workflow).toContain('for attempt in $(seq 1 5); do'); }); });