ci(codex): run adapter checks across OS matrix

This commit is contained in:
YeonGyu-Kim
2026-05-26 14:00:18 +09:00
parent f87eceadae
commit b886ca9ca4
5 changed files with 66 additions and 11 deletions
+27 -7
View File
@@ -33,12 +33,20 @@ jobs:
fi
test:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: "24"
- name: Build lsp-tools-mcp submodule
run: npm ci && npm run build
working-directory: packages/lsp-tools-mcp
@@ -61,12 +69,20 @@ jobs:
run: bun test
typecheck:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: "24"
- name: Build lsp-tools-mcp submodule
run: npm ci && npm run build
working-directory: packages/lsp-tools-mcp
@@ -91,8 +107,12 @@ jobs:
- name: Type check script tooling
run: bun run typecheck:script
windows-codex:
runs-on: windows-latest
codex-compatibility:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
@@ -116,12 +136,12 @@ jobs:
env:
BUN_INSTALL_ALLOW_SCRIPTS: "@ast-grep/cli @ast-grep/napi"
- name: Run Codex Windows compatibility tests
run: bun run test:windows-codex
- name: Run Codex compatibility tests
run: bun run test:codex
build:
runs-on: ubuntu-latest
needs: [test, typecheck, windows-codex]
needs: [test, typecheck, codex-compatibility]
permissions:
contents: write
steps:
+2 -1
View File
@@ -63,7 +63,8 @@
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/ast-grep-core/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json",
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
"test": "bun test",
"test:windows-codex": "bun test src/cli/install-codex/codex-cache.test.ts src/cli/install-codex/install-codex.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-local.test.mjs",
"test:codex": "bun test src/cli/install-codex/codex-cache.test.ts src/cli/install-codex/install-codex.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-local.test.mjs",
"test:windows-codex": "bun run test:codex",
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
},
"keywords": [
+2 -1
View File
@@ -6,6 +6,7 @@ import { fileURLToPath } from "node:url"
const repositoryRoot = fileURLToPath(new URL("..", import.meta.url))
const commandRoots = [".opencode/command", ".agents/command"] as const
const skillRoots = [".opencode/skills", ".agents/skills"] as const
const packDryRunTimeoutMs = 15_000
class PackDryRunError extends Error {
constructor(readonly exitCode: number, readonly stderr: string) {
@@ -130,5 +131,5 @@ describe("published package layout", () => {
// then
const missingPaths = expectedAssetPaths.filter((expectedPath) => !packedPaths.has(expectedPath))
expect(missingPaths).toEqual([])
})
}, packDryRunTimeoutMs)
})
+31 -1
View File
@@ -3,9 +3,11 @@
import { describe, expect, test } from "bun:test"
import { readFileSync } from "node:fs"
const ciWorkflowPath = new URL("../.github/workflows/ci.yml", import.meta.url)
const workflowChecks = [
{
path: new URL("../.github/workflows/ci.yml", import.meta.url),
path: ciWorkflowPath,
testRuns: [
"run: bun test",
"run: bun test src/shared/dist-bundle-bun-globals.test.ts",
@@ -28,4 +30,32 @@ describe("test workflows", () => {
}
}
})
test("exercise root checks across linux macos and windows", () => {
// #given
const workflow = readFileSync(ciWorkflowPath, "utf8")
// #when
const hasCrossOsMatrix = workflow.includes("os: [ubuntu-latest, macos-latest, windows-latest]")
const hasMatrixRunner = workflow.includes("runs-on: ${{ matrix.os }}")
// #then
expect(hasCrossOsMatrix, "CI root checks must cover Linux, macOS, and Windows").toBe(true)
expect(hasMatrixRunner, "CI root checks must run on the selected matrix OS").toBe(true)
})
test("runs codex compatibility checks on every supported os", () => {
// #given
const workflow = readFileSync(ciWorkflowPath, "utf8")
// #when
const hasCodexMatrixJob = workflow.includes("codex-compatibility:")
const hasCodexCommand = workflow.includes("run: bun run test:codex")
const buildNeedsCodexMatrix = workflow.includes("needs: [test, typecheck, codex-compatibility]")
// #then
expect(hasCodexMatrixJob, "CI must expose a Codex compatibility matrix job").toBe(true)
expect(hasCodexCommand, "Codex compatibility job must run the shared Codex test script").toBe(true)
expect(buildNeedsCodexMatrix, "Build must wait for Codex compatibility checks").toBe(true)
})
})
+4 -1
View File
@@ -1,3 +1,6 @@
/// <reference path="../../../bun-test.d.ts" />
/// <reference types="bun-types" />
import { describe, expect, test } from "bun:test"
import { mkdtemp, readFile, stat } from "node:fs/promises"
import { tmpdir } from "node:os"
@@ -9,7 +12,7 @@ describe("install-codex", () => {
// given
const codexHome = await mkdtemp(join(tmpdir(), "omo-codex-home-"))
const binDir = await mkdtemp(join(tmpdir(), "omo-codex-bin-"))
const repoRoot = "/Users/yeongyu/local-workspaces/omodex"
const repoRoot = process.cwd()
// when
const first = await runCodexInstaller({ codexHome, binDir, repoRoot, runCommand: async () => undefined })