Compare commits

...
Author SHA1 Message Date
james.maes 2a34d74bea Merge pull request 'test: make the Ollama connection-refused test deterministic' (#79) from fix/ollama-test-retry-flake into develop
node / node (push) Successful in 51s
build / node (push) Successful in 51s
2026-11-07 23:52:52 +00:00
James MaesandClaude Opus 5.5 324830218c test: zero the retry jitter instead of disabling retries
node / node (push) Successful in 52s
build / node (push) Successful in 52s
maxRetries: 0 dropped the transport-retry branches below the 79% branch
coverage threshold. Keep the default retries (and assert all 4 attempts) but
stub Math.random to 0 so the backoff is immediate and deterministic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 17:49:24 -06:00
James MaesandClaude Opus 5.5 5499a86936 test: make the Ollama connection-refused test single-attempt
node / node (push) Failing after 51s
build / node (push) Failing after 51s
The test used the default 3 retries, whose jittered backoff (up to 1+2+4 s)
can exceed the 5 s Vitest timeout, so it failed intermittently in CI. Use
maxRetries: 0 like the other single-attempt error tests; retry behavior is
covered by the retry tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 17:42:39 -06:00
james.maes 823adf3c2a Merge pull request 'ci: build on the shared ci-workflows workflow' (#78) from ci/ci-workflows into develop
node / node (push) Failing after 54s
build / node (push) Failing after 54s
2026-11-07 23:30:03 +00:00
James MaesandClaude Opus 5.5 2593993622 ci: build on the shared ci-workflows Node workflow
node / node (push) Successful in 56s
build / node (push) Successful in 56s
Add .gitea/workflows/build.yaml calling KofTwentyTwo/ci-workflows node.yaml@v1
with the repository's own gates, and remove the old CI configuration that
called the retired CircleCI orb / platform-ci system.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 17:27:59 -06:00
james.maes 2eb7aad21f Merge pull request 'ci: remove workflows that call the retired CI system' (#77) from retire/old-ci into develop 2026-11-07 13:30:34 +00:00
james.maesandClaude Opus 5.5 a00cc64edc ci: remove workflows that call the retired CI system
Owner decision 2026-11-07: only KofTwentyTwo/ci-workflows remains.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 13:30:32 +00:00
forge-recovery ca65cba959 ci: use the central original KOF container runner default
KofTwentyTwo/ci-policy: Shared Node CI / verify (push) Successful in 1m30s
KofTwentyTwo/ci-policy: Shared Node CI / gate (push) Successful in 8s
KofTwentyTwo/ci-policy: ci / node-8 (push) Successful in 1m40s
KofTwentyTwo/ci-policy: ci / fork-guard (push) Skipped
KofTwentyTwo/ci-policy: ci / go-0 (push) Skipped
KofTwentyTwo/ci-policy: ci / go-nix-1 (push) Skipped
KofTwentyTwo/ci-policy: ci / java-docker-4 (push) Skipped
KofTwentyTwo/ci-policy: ci / gradle-2 (push) Skipped
KofTwentyTwo/ci-policy: ci / ci-result (push) Successful in 4s
KofTwentyTwo/ci-policy: ci / gradle-3 (push) Skipped
KofTwentyTwo/ci-policy: ci / java-maven-5 (push) Skipped
Original Munitor Obsidian plugin / prepare (push) Successful in 1m53s
Original Munitor Obsidian plugin / allocate-version (push) Skipped
Original Munitor Obsidian plugin / build-and-test (push) Skipped
Original Munitor Obsidian plugin / code-quality (push) Skipped
Original Munitor Obsidian plugin / coverage (push) Skipped
KofTwentyTwo/ci-policy: ci / manifests-6 (push) Skipped
KofTwentyTwo/ci-policy: ci / nix-7 (push) Skipped
Original Munitor Obsidian plugin / security-scan (push) Skipped
Original Munitor Obsidian plugin / secrets-scan (push) Skipped
Original Munitor Obsidian plugin / release-assets (push) Skipped
Original Munitor Obsidian plugin / sast-scan (push) Skipped
Original Munitor Obsidian plugin / sbom (push) Skipped
Original Obsidian plugin build and release / plugin (push) Failing after 2m1s
Original Munitor Obsidian plugin / gate (push) Failing after 4s
KofTwentyTwo/ci-policy: ci / rust-10 (push) Skipped
KofTwentyTwo/ci-policy: ci / source-config-13 (push) Skipped
KofTwentyTwo/ci-policy: ci / source-config-14 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-2 (push) Skipped
KofTwentyTwo/ci-policy: ci / python-9 (push) Skipped
KofTwentyTwo/ci-policy: ci / rust-12 (push) Skipped
KofTwentyTwo/ci-policy: ci / rust-11 (push) Skipped
KofTwentyTwo/ci-policy: ci / source-config-15 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-4 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-0 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-1 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-3 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-6 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-5 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-7 (push) Skipped
KofTwentyTwo/ci-policy: ci / not-enrolled (push) Skipped
KofTwentyTwo/ci-policy: ci / content-validate-0 (push) Skipped
KofTwentyTwo/ci-policy: native / fork-deny (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-0 (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-1 (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-2 (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-3 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-4 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-5 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-6 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-7 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-8 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-9 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-10 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-11 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-12 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-13 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-14 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-15 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-16 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-18 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-19 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-17 (push) Skipped
KofTwentyTwo/ci-policy: Shared Node CI / secrets (push) Successful in 11s
KofTwentyTwo/ci-policy: native / native-result (push) Successful in 6s
2026-11-04 09:33:07 +00:00
forge-recoveryandCodex dffe635c55 ci: use the central original container runner default
KofTwentyTwo/ci-policy: native / native-result (pull_request) Successful in 3s
KofTwentyTwo/ci-policy: Shared Node CI / secrets (pull_request) Successful in 9s
KofTwentyTwo/ci-policy: Shared Node CI / verify (pull_request) Successful in 1m29s
KofTwentyTwo/ci-policy: Shared Node CI / gate (pull_request) Successful in 9s
KofTwentyTwo/ci-policy: ci / node-8 (pull_request) Successful in 1m41s
KofTwentyTwo/ci-policy: ci / ci-result (pull_request) Successful in 5s
Original Obsidian plugin build and release / plugin (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-maven-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / fork-guard (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-nix-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-docker-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / nix-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / manifests-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / python-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / not-enrolled (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / content-validate-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / fork-deny (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-16 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-17 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-18 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-19 (pull_request) Skipped
Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 09:28:47 +00:00
forge-recovery c7bf2373c2 ci: use original shared Obsidian plugin pipeline
KofTwentyTwo/ci-policy: ci / go-nix-1 (push) Skipped
KofTwentyTwo/ci-policy: ci / fork-guard (push) Skipped
KofTwentyTwo/ci-policy: ci / gradle-3 (push) Skipped
KofTwentyTwo/ci-policy: ci / go-0 (push) Skipped
KofTwentyTwo/ci-policy: ci / gradle-2 (push) Skipped
KofTwentyTwo/ci-policy: ci / java-docker-4 (push) Skipped
KofTwentyTwo/ci-policy: ci / java-maven-5 (push) Skipped
KofTwentyTwo/ci-policy: ci / manifests-6 (push) Skipped
KofTwentyTwo/ci-policy: ci / nix-7 (push) Skipped
KofTwentyTwo/ci-policy: ci / rust-10 (push) Skipped
KofTwentyTwo/ci-policy: ci / python-9 (push) Skipped
KofTwentyTwo/ci-policy: ci / rust-11 (push) Skipped
Original Munitor Obsidian plugin / gate (push) Canceled after 0s
KofTwentyTwo/ci-policy: ci / rust-12 (push) Skipped
KofTwentyTwo/ci-policy: ci / source-config-13 (push) Skipped
Original Munitor Obsidian plugin / release-assets (push) Canceled after 0s
Original Munitor Obsidian plugin / secrets-scan (push) Canceled after 0s
KofTwentyTwo/ci-policy: ci / source-config-14 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-0 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-1 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-3 (push) Skipped
Original Munitor Obsidian plugin / sbom (push) Canceled after 0s
Original Munitor Obsidian plugin / sast-scan (push) Canceled after 0s
Original Munitor Obsidian plugin / coverage (push) Canceled after 0s
KofTwentyTwo/ci-policy: ci / source-config-15 (push) Skipped
Original Munitor Obsidian plugin / security-scan (push) Canceled after 0s
KofTwentyTwo/ci-policy: ci / image-build-2 (push) Skipped
Original Munitor Obsidian plugin / code-quality (push) Canceled after 0s
Original Munitor Obsidian plugin / build-and-test (push) Canceled after 0s
Original Munitor Obsidian plugin / prepare (push) Canceled after 0s
Original Munitor Obsidian plugin / allocate-version (push) Canceled after 0s
KofTwentyTwo/ci-policy: ci / image-build-4 (push) Skipped
Original Obsidian plugin build and release / plugin (push) Canceled after 0s
KofTwentyTwo/ci-policy: ci / image-build-5 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-7 (push) Skipped
KofTwentyTwo/ci-policy: ci / not-enrolled (push) Skipped
KofTwentyTwo/ci-policy: ci / content-validate-0 (push) Skipped
KofTwentyTwo/ci-policy: ci / image-build-6 (push) Skipped
KofTwentyTwo/ci-policy: native / fork-deny (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-1 (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-2 (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-3 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-4 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-6 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-8 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-10 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-11 (push) Skipped
KofTwentyTwo/ci-policy: native / build-macos-0 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-5 (push) Skipped
KofTwentyTwo/ci-policy: native / build-windows-7 (push) Skipped
KofTwentyTwo/ci-policy: native / dotnet-9 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-14 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-15 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-16 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-17 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-19 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-12 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-13 (push) Skipped
KofTwentyTwo/ci-policy: native / swift-18 (push) Skipped
KofTwentyTwo/ci-policy: native / native-result (push) Successful in 3s
KofTwentyTwo/ci-policy: Shared Node CI / secrets (push) Successful in 11s
KofTwentyTwo/ci-policy: Shared Node CI / verify (push) Successful in 1m38s
KofTwentyTwo/ci-policy: Shared Node CI / gate (push) Successful in 8s
KofTwentyTwo/ci-policy: ci / node-8 (push) Successful in 1m48s
KofTwentyTwo/ci-policy: ci / ci-result (push) Successful in 5s
2026-11-04 08:22:26 +00:00
5 changed files with 27 additions and 58 deletions

No files matched your search

-8
View File
@@ -1,8 +0,0 @@
version: 2.1
setup: true
orbs:
munitor: kof22/munitor@dev:snapshot
workflows:
setup:
jobs:
- munitor/generate_pipeline
+13
View File
@@ -0,0 +1,13 @@
name: build
on:
push:
jobs:
node:
uses: self:KofTwentyTwo/ci-workflows/.gitea/workflows/node.yaml@v1
secrets: inherit
with:
node-version: '22'
# check = typecheck + vitest with the coverage thresholds enforced
commands: |
npm run build
npm run check
-23
View File
@@ -1,23 +0,0 @@
name: Original Obsidian plugin build and release
'on':
push:
branches:
- main
- develop
- feature/**
- hotfix/**
- release/**
pull_request: {}
workflow_dispatch: {}
permissions:
contents: write
actions: read
jobs:
plugin:
if: ${{ (github.head_ref || github.ref_name) == 'main' || (github.head_ref || github.ref_name) == 'develop' || startsWith((github.head_ref
|| github.ref_name), 'feature/') || startsWith((github.head_ref || github.ref_name), 'hotfix/') || startsWith((github.head_ref
|| github.ref_name), 'release/') }}
uses: self:KofTwentyTwo/platform-ci/.gitea/workflows/munitor-obsidian.yaml@kof-release-v1
with:
runner: linux-small
build-runner: browser-build
-23
View File
@@ -1,23 +0,0 @@
# obsidian-plugin pipeline ships only in the Munitor `dev:snapshot` orb
# build for now; v0.2.x stable releases don't include this template.
# Bump to a stable tag once Munitor ships obsidian-plugin in a tagged release.
pipeline: obsidian-plugin
orb_version: dev:snapshot
node_version: "20"
sast: true
sbom: true
test:
# `npm run check` = typecheck + vitest with coverage thresholds enforced.
# Vitest exits non-zero on threshold violation, failing the build (gate 1).
commands: ["npm run build", "npm run check"]
coverage:
tool: vitest
command: npm run test:coverage
# The orb's node_coverage job parses this summary and enforces
# min_instruction independently — second layer of defense in case the
# vitest threshold ever gets misconfigured. Ratchet up alongside
# vitest.config.ts thresholds.
summary_path: coverage/coverage-summary.json
min_instruction: "90"
contexts:
github: github
+14 -4
View File
@@ -1,4 +1,4 @@
import { describe, it, expect } from "vitest";
import { describe, it, expect, vi } from "vitest";
import { OllamaProvider } from "../../src/providers/ollama";
import type { HttpFn, HttpResponse, CompletionRequest } from "../../src/providers/service";
@@ -283,14 +283,24 @@ describe("OllamaProvider", () => {
});
it("throws connection refused message when Ollama is not running", async () => {
let attempts = 0;
const fn: HttpFn = async () => {
attempts++;
throw new Error("ECONNREFUSED");
};
const provider = new OllamaProvider(fn);
// Zero the retry jitter: the default 3 retries back off up to 1+2+4 s at random,
// which intermittently exceeded the 5 s test timeout.
const random = vi.spyOn(Math, "random").mockReturnValue(0);
await expect(
provider.complete(makeRequest()),
).rejects.toThrow("Cannot connect to Ollama at http://localhost:11434. Is Ollama running?");
try {
await expect(
provider.complete(makeRequest()),
).rejects.toThrow("Cannot connect to Ollama at http://localhost:11434. Is Ollama running?");
expect(attempts).toBe(4);
} finally {
random.mockRestore();
}
});
});