Repository navigation
ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly - #131
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThe Android CI matrix now includes updated Swift versions, a Swift 6.4.x development snapshot, Android API levels 28 and 34, and labeled Codecov flags. Matrix jobs no longer fail fast. ChangesAndroid CI configuration
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
31243b0 to
a3db98d
Compare
Review: ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightlyOverviewReworks the Code quality & style
Potential issues / risks
Test coveragePure CI-configuration change -- no app/library test coverage implications. The real verification is the workflow run itself; worth confirming the Security considerationsNo security concerns -- the nightly artifact is still fetched from the trusted Overall this is a well-scoped, well-justified CI fix with a clear upstream reference for the root cause. Main follow-ups worth considering: confirm the empty-string SDK override behaves as expected, and note that the nightly pin will need periodic maintenance. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/syndikit.yml:
- Around line 306-309: Update the nightly Android matrix entries around the
Swift 6.4 snapshot and the corresponding swift-build invocation to define a
non-empty android-sdk-target whenever android-sdk-url is configured, then
forward that matrix value through swift-build alongside the existing SDK URL and
SDK ID inputs.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 38c14ec4-64ef-4e72-967b-f4049b44472d
📒 Files selected for processing (1)
.github/workflows/syndikit.yml
| - version: 6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a | ||
| label: "6.4" | ||
| sdk-url: https://download.swift.org/swift-6.4.x-branch/android-sdk/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android.artifactbundle.tar.gz | ||
| sdk-id: swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
curl -fsSL https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml \
| grep -A12 -B4 'android-sdk-target'
curl -fsSL https://raw.githubusercontent.com/skiptools/swift-android-action/main/action.yml \
| grep -A8 -B4 "custom-sdk-id.*installed-sdk"
curl -fsSI \
"https://download.swift.org/swift-6.4.x-branch/android-sdk/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android.artifactbundle.tar.gz"Repository: brightdigit/SyndiKit
Length of output: 4046
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
# Inspect the relevant workflow sections with line numbers.
sed -n '290,345p' .github/workflows/syndikit.yml | cat -n
# Pull the downstream action contract sections that mention Android SDK inputs.
curl -fsSL https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml \
| sed -n '1,220p' | grep -n -A6 -B4 'android-sdk-target\|custom-sdk-url\|installed-sdk\|custom-sdk-id'
# Also inspect the setup logic that consumes these inputs.
curl -fsSL https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml \
| grep -n -A12 -B6 'installed-sdk: \${{'Repository: brightdigit/SyndiKit
Length of output: 232
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
python3 - <<'PY'
import re, urllib.request
url = "https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml"
text = urllib.request.urlopen(url, timeout=20).read().decode()
for key in ["android-sdk-target", "custom-sdk-url", "custom-sdk-id", "installed-sdk"]:
print(f"\n## {key}")
for m in re.finditer(key, text):
start = max(0, m.start()-180)
end = min(len(text), m.end()+260)
print(text[start:end].replace("\r",""))
print("----")
break
PYRepository: brightdigit/SyndiKit
Length of output: 2444
Pass android-sdk-target through the nightly Android builds
The custom SDK inputs require a non-empty target whenever android-sdk-url is set, so add the target to the matrix entry and forward it to swift-build at lines 306-309 and 333-334.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/syndikit.yml around lines 306 - 309, Update the nightly
Android matrix entries around the Swift 6.4 snapshot and the corresponding
swift-build invocation to define a non-empty android-sdk-target whenever
android-sdk-url is configured, then forward that matrix value through
swift-build alongside the existing SDK URL and SDK ID inputs.
ReviewThis is a clean, well-scoped fix for the Android CI matrix — the NDK API 36 One behavior change worth double-checking, though:
Minor / docs drift: No code/logic changes, no test coverage implications beyond CI itself, and no security concerns — this is a workflow-only diff. |
The Swift Android SDK's bundled NDK sysroot for API 36 does not ship crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still asks ld.lld to link. That broke the Android leg of CI at API 36 (see android/ndk#1391). Rewrite the build-android matrix as a cross product of {Swift 6.3, Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and ID onto the swift entry so the 6.3 rows leave them empty. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E
a3db98d to
16ca705
Compare
Review: ci(android) — cap API level at 34, cover Swift 6.3 + 6.4-nightlyClean, well-motivated refactor. The move from a hand-enumerated One thing worth double-checking before merge:
Minor: No functional/security concerns — this is workflow-only config, and the trailing-whitespace cleanup in the removed |
ReviewClean, well-scoped change — single file, and the new cross-product matrix ( Things worth confirming
NitThe old No functional source changes in this PR (workflow-only), so most of code quality/test coverage/security categories don't apply here beyond the CI config itself. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## brightdigit-com-260621 #131 +/- ##
=======================================================
Coverage 79.07% 79.07%
=======================================================
Files 74 74
Lines 1553 1553
=======================================================
Hits 1228 1228
Misses 325 325
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
* Migrate to Swift 6.4: mise-based lint tooling, rebuilt CI, and source cleanups (#127) * Migrate lint/style/CI configs in 6 BrightDigit subrepo packages [skip ci] Apply the issue #54 config migration to the vendored BrightDigit libraries (SyndiKit, TransistorPublishPlugin, Contribute, ContributeWordPress, NPMPublishPlugin, YoutubePublishPlugin) using the MistKit/SundialKit library config variant: - .swiftlint.yml: strict library ruleset + no_unchecked_sendable custom rule - .swiftformat -> .swift-format: Apple swift-format JSON - .mise.toml: swift-format 604 (Swift 6.4-aligned), swiftlint, periphery - Scripts/lint.sh (mise-based, replaces Mint) + Scripts/header.sh - CI workflow -> brightdigit/swift-build@v1 (ubuntu + macos) + STRICT lint job - Remove obsolete .hound.yml Configs + CI only; source reformatting/headers deferred (matches main repo). SwiftTube and Spinetail skipped (slated for OpenAPI-generator migration). Committed in the monorepo only; no git subrepo push performed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: trigger pipeline (config migration) * packages CI: install curl + cache mise tools in lint job * CI: test vendored BrightDigit packages via monorepo matrix Add a `test-packages` matrix job to main.yaml that builds, tests, and lints the 6 vendored BrightDigit packages in-place. In the monorepo checkout every sibling already sits at its relative-path location, so each package resolves with zero dependency reconstruction — replacing the per-package setup-deps CI. - detect-changes: add `packages` paths-filter + `packages-changed` output - remove standalone workflows + orphaned setup-deps from the 4 rel-dep packages (ContributeWordPress, Transistor, NPM, Youtube); their standalone CI was synthetic (relative deps are committed) - keep SyndiKit + Contribute standalone CIs (genuinely standalone libraries) - bump all GitHub Actions to latest: checkout v6, cache v5, upload-artifact v7, download-artifact v8, dorny/paths-filter v4 (swift-build@v1 unchanged) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Conform v1.0.0 codebase to standardized lint configs Post-rebase cleanup after replaying the config migration onto v1.0.0: - Fix swiftlint/swift-format violations surfaced by the stricter standardized configs (explicit ACLs, formatting, XCTFail messages, XCTUnwrap instead of force-unwraps, doc-comment corrections) - Inline-disable intentional exceptions in source: iTunes* type names, RSS-spec webMaster, @unchecked Sendable fallback, large test fixtures - Split files violating one_declaration_per_file - Normalize license headers via Scripts/header.sh (straight quotes) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs: refresh DocC catalog for v1.0.0 - Update requirements to match Package.swift (Swift 5.10 / Xcode 15.3, iOS 13 / watchOS 6 / tvOS 13 / macOS 10.15 deployment targets) - Bump install snippet to from: "1.0.0" - Fix transposed JSONFeed column in the Feedable mapping table (siteURL -> homePageUrl, summary -> description) - Fix invalid Swift in code snippets (Data(contentsOf:) usage, missing paren in case pattern) - Fix typos and stale LICENSE link Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Migrate lint/style/CI configs to BrightDigit template patterns (#54) (#76) * Phase 4 — OpenAPI & dependency migration (#109) * SyndiKit CI: use jdx/mise-action for robust lint tool bootstrap Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: add macOS + Windows nightly-6.4 CI legs across all 5 standalone repos Extend ButtondownKit/Spinetail/SwiftTube/Contribute/SyndiKit standalone CI to the BrightDigit multi-platform template now that a self-hosted macOS runner with /Applications/Xcode-beta.app (Swift 6.4) is available: - build-macos: [self-hosted, macOS] + swift-build xcode=Xcode-beta. Blocking on all 5. Contribute & SyndiKit migrated off macos-15; their Ubuntu + lint legs migrated swift:6.3-noble -> swiftlang/swift:nightly-6.4.x-noble. - build-windows: hosted windows-2022/2025, swift.org nightly snapshot 6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-01-a. Gated to full-matrix runs via a single-package configure job. continue-on-error on the OpenAPI repos + Contribute (unverified deps); blocking on SyndiKit. - SyndiKit also gains build-macos-platforms (iOS/watchOS/tvOS on released Xcode_26.4 — not nightly 6.4). WASM + Android deferred: no nightly 6.4 support yet. WASM is a swift-build limitation (brightdigit/swift-build#115 — no input to override the auto-derived -RELEASE wasm SDK URL); Android is blocked upstream (no nightly 6.4 SDK). Each workflow documents re-adding them. Contribute WASM is permanently N/A (Yams on the Musl/wasm SDK). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: wire WASM + Android nightly-6.4 CI legs via swift-build SDK-bundle inputs Now that swift.org publishes nightly 6.4 SDK bundles on swift-6.4.x-branch and brightdigit/swift-build#116 adds inputs to install caller-supplied bundles, add: - build-wasm to ButtondownKit/Spinetail/SwiftTube/SyndiKit (NOT Contribute — Yams fails on the Musl/wasm SDK). Uses wasm-sdk-url + wasm-sdk-checksum pointing at the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_wasm artifactbundle, with WASI emulation + memory flags. - build-android to all 5 repos. Uses android-sdk-url + android-sdk-id (+ matching android-swift-version) for the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android artifactbundle via skiptools custom-sdk-url; build-only (android-run-tests: false). Both legs are full-matrix-gated and continue-on-error: they reference @v1 and are inert until swift-build#116 is released and the v1 tag moved, after which they should be confirmed green and promoted to blocking (SyndiKit first). Bump the snapshot SDK URLs/checksums periodically. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: run all Apple-platform suites on self-hosted Xcode-beta (Swift 6.4) Per the rule that Swift 6.4 builds use the self-hosted runners (the only macOS Swift 6.4 toolchain is /Applications/Xcode-beta.app = Xcode 27 / Swift 6.4): - Move SyndiKit + Contribute build-macos-platforms off hosted macos-26/Xcode_26.4 (which is only Swift 6.2) onto [self-hosted, macOS] + Xcode-beta. - Add build-macos-platforms (iOS/watchOS/tvOS) to ButtondownKit/Spinetail/SwiftTube on the same self-hosted runner — these are swift-tools-version:6.4, so hosted released-Xcode runners can't even parse their manifests. All use the iOS/watchOS/tvOS 27.0 simulator runtimes present on the runner (iPhone 17 Pro / Apple Watch Ultra 3 (49mm) / Apple TV 4K (3rd generation)), full-matrix-gated and continue-on-error (simulator-on-nightly is the most fragile leg; promote once green). lint now needs build-macos-platforms. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: give Windows its own (stricter) matrix tier Three CI tiers instead of two: small set (build-ubuntu/build-macos/lint, always) < full-matrix (macОS-platforms/wasm/android) < +Windows. configure now emits a second output, run-windows, equal to full-matrix MINUS PRs into semver branches. build-windows (the most expensive leg — hosted windows-2022/2025 ×2) gates on run-windows; the rest keep full-matrix. So PRs into semver branches still exercise the full non-Windows matrix but skip Windows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: test against swift-build feature branch + fold build-wasm into build-ubuntu - Point every brightdigit/swift-build@v1 reference at @sdk-url-checksum-nightly-6.4 (PR #116) TEMPORARILY so CI exercises the new wasm-sdk-url/android-sdk-url code before it ships in @v1. Revert to @v1 once #116 is merged + the v1 tag moved. - Fold build-wasm into build-ubuntu as a continue-on-error step in the same nightly-6.4.x-noble container (one spin-up; runs on every push/PR now, not just full-matrix). Removed the standalone build-wasm job from ButtondownKit/Spinetail/ SwiftTube/SyndiKit (Contribute has no wasm — Yams on Musl/wasm). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: only run push CI on main (drop integration branch from push trigger) Push events now trigger only on main (+ release tags). Feature/integration branches like brightdigit-com-260406 get CI through their PRs instead of a redundant branch-push run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: unify the 5 CI workflows to byte-identical (except name) - Windows is now blocking everywhere (dropped continue-on-error from build-windows in all 5, not just SyndiKit). - The only per-package functional difference — the wasm step (Contribute can't build Yams on wasm) — is externalized to the ENABLE_WASM repo variable: `if: ${{ vars.ENABLE_WASM != 'false' }}`. Set ENABLE_WASM=false on Contribute. - Normalized all comments to a shared template. Result: the five workflow files are byte-identical except the `name:` line; the only behavioral knob is each repo's ENABLE_WASM variable. Filed Contribute#10 to fix Yams-on-wasm and re-enable it there. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: remove continue-on-error from all 5 CI workflows Make the WASM step, the Apple-platforms job (iOS/watchOS/tvOS), and the Android job blocking across all five subrepos. Tidy the now-stale continue-on-error comment phrases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: gate watchOS leg on ENABLE_WATCHOS (disable where failing) watchOS-27 SDK rejects deps that infer an 8.0 deployment target (SwiftPM #10188, not fixable in-repo). Gate the build-macos-platforms watchOS leg on a new ENABLE_WATCHOS repo variable (mirrors ENABLE_WASM), keeping the 5 workflows byte-identical. ENABLE_WATCHOS=false is set on ButtondownKit/SwiftTube/ Contribute/Spinetail; SyndiKit (unaffected) keeps running watchOS. Tracked in brightdigit.com#119. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: build-ubuntu as a [standard, wasm, wasm-embedded] matrix Mirror brightdigit/MistKit: the configure job emits ubuntu-type (gated by ENABLE_WASM), and build-ubuntu fans out over it via fromJSON. Standard ('') always runs; wasm + wasm-embedded run unless ENABLE_WASM=false (e.g. Yams on Contribute). Both wasm variants share the nightly-6.4.x SDK bundle. Replaces the single folded WASM step. Byte-identical across all 5. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: make wasm/wasm-embedded legs build-only The wasm/embedded BUILD passes (OpenAPIURLSession is guarded out on WASI), but running the suite under WasmKit fails: Foundation resource bundles (test Fixtures) aren't mounted in the WASI sandbox, and embedded hits OpenAPIRuntime keypath-demangling limits at runtime. Neither is our bug. Build-only validates wasm/embedded compilation (the goal); the standard leg still runs the full suite + coverage. Mirrors the Android leg's build-only stance. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add tests for uncovered EntryID/SiteCollection/media-properties branches Covers the 9 patch-coverage gaps flagged on PR #127: - EntryID: init(string:)/init?(_:)/description/Codable for all four cases - SiteCollectionDirectoryBuilder: init() + directory(fromCollection:) - PodcastEpisodeProperties.init?(rssItem:) nil branch (no enclosure) - YouTubeIDProperties.init?(entry:) nil branch (non-YouTube Atom entry) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * CI: revert swift-build action to @v1 (temp sdk-url-checksum-nightly-6.4 branch deleted) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Align with BrightDigit v1.0.0 CI template and drop self-hosted DocC cruft Add the template's auxiliary workflows (check-unsafe-flags, cleanup-caches, swift-source-compat) and .swift-version. Trim the devcontainer matrix to the supported set (stable 5.10-6.3, nightly 6.4 only; root pinned to 6.3). Remove the now-stale Mintfile and the self-hosted DocC / XcodeGen stack (netlify.toml, Dockerfile, .dockerignore, .htaccess, project.yml, Scripts/docc.sh, Scripts/httpd.conf, Scripts/gh-md-toc) since docs are hosted via SPI. Refresh .swiftlint.yml excludes and CLAUDE.md to match the mise-based 6.4 tooling. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Bump github.com/coreoffice/xmlcoder from 0.18.1 to 0.18.2 Bumps [github.com/coreoffice/xmlcoder](https://github.com/CoreOffice/XMLCoder) from 0.18.1 to 0.18.2. - [Release notes](https://github.com/CoreOffice/XMLCoder/releases) - [Commits](CoreOffice/XMLCoder@0.18.1...0.18.2) --- updated-dependencies: - dependency-name: github.com/coreoffice/xmlcoder dependency-version: 0.18.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * Updates from brightdigit.com (#129) * Fix remaining subrepo CI failures * Cache lint tools and align Publish Ink pin * Wave 0 review feedback: CI hygiene, docs & agent tooling (#130) * Restore multi-version CI matrix and refresh devcontainers Rebuild SyndiKit.yml around a three-tier configure matrix on GitHub-hosted runners (no self-hosted): a single folded build-ubuntu across stable Swift 5.10-6.3 + nightly 6.4 (wasm/wasm-embedded on 6.3+6.4 only); macOS SPM on Swift 6.3 (Xcode 26.4) + 6.4 (Xcode 27 preview runner) with the full Apple platform matrix in the full tier; Windows and Android covering 6.3 + 6.4; and a restored source-compat suite. Reduced runs stay lean (noble x 6.3/6.4 + macOS SPM only). Devcontainers: default to Swift 6.3, add 6.2/6.3/6.4 (6.4 nightly image), remove the old 6.1/6.2 nightly folders. Refresh the stale CLAUDE.md CI section. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Keep swift-source-compat as a separate workflow Restore the standalone .github/workflows/swift-source-compat.yml (swift:5.10/ 6.0/6.1/6.2/6.3 + nightly-6.4) and drop the in-file source-compat-suite job from SyndiKit.yml; update CLAUDE.md accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly (#131) The Swift Android SDK's bundled NDK sysroot for API 36 does not ship crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still asks ld.lld to link. That broke the Android leg of CI at API 36 (see android/ndk#1391). Rewrite the build-android matrix as a cross product of {Swift 6.3, Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and ID onto the swift entry so the 6.3 rows leave them empty. Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E Co-authored-by: Claude <noreply@anthropic.com> * ci(macos): extract matrix JSON and bump Xcode 26.4 → 26.6 Move macOS CI matrix entries into .github/matrices/ for readability, and bump Apple platform simulator OS versions to 26.5 on the Xcode 26 legs. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix v1.0.0 CI badge: correct workflow filename case and stray ? The CI badge pointed at `syndikit.yml` (lowercase), but on the v1.0.0 branch the workflow file is `SyndiKit.yml` (PascalCase, matching the other Wave 0 repos), so the badge rendered "no status". Also drop the stray `?` in `&?branch=main`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* Migrate to Swift 6.4: mise-based lint tooling, rebuilt CI, and source cleanups (#127) * Migrate lint/style/CI configs in 6 BrightDigit subrepo packages [skip ci] Apply the issue #54 config migration to the vendored BrightDigit libraries (SyndiKit, TransistorPublishPlugin, Contribute, ContributeWordPress, NPMPublishPlugin, YoutubePublishPlugin) using the MistKit/SundialKit library config variant: - .swiftlint.yml: strict library ruleset + no_unchecked_sendable custom rule - .swiftformat -> .swift-format: Apple swift-format JSON - .mise.toml: swift-format 604 (Swift 6.4-aligned), swiftlint, periphery - Scripts/lint.sh (mise-based, replaces Mint) + Scripts/header.sh - CI workflow -> brightdigit/swift-build@v1 (ubuntu + macos) + STRICT lint job - Remove obsolete .hound.yml Configs + CI only; source reformatting/headers deferred (matches main repo). SwiftTube and Spinetail skipped (slated for OpenAPI-generator migration). Committed in the monorepo only; no git subrepo push performed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: trigger pipeline (config migration) * packages CI: install curl + cache mise tools in lint job * CI: test vendored BrightDigit packages via monorepo matrix Add a `test-packages` matrix job to main.yaml that builds, tests, and lints the 6 vendored BrightDigit packages in-place. In the monorepo checkout every sibling already sits at its relative-path location, so each package resolves with zero dependency reconstruction — replacing the per-package setup-deps CI. - detect-changes: add `packages` paths-filter + `packages-changed` output - remove standalone workflows + orphaned setup-deps from the 4 rel-dep packages (ContributeWordPress, Transistor, NPM, Youtube); their standalone CI was synthetic (relative deps are committed) - keep SyndiKit + Contribute standalone CIs (genuinely standalone libraries) - bump all GitHub Actions to latest: checkout v6, cache v5, upload-artifact v7, download-artifact v8, dorny/paths-filter v4 (swift-build@v1 unchanged) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Conform v1.0.0 codebase to standardized lint configs Post-rebase cleanup after replaying the config migration onto v1.0.0: - Fix swiftlint/swift-format violations surfaced by the stricter standardized configs (explicit ACLs, formatting, XCTFail messages, XCTUnwrap instead of force-unwraps, doc-comment corrections) - Inline-disable intentional exceptions in source: iTunes* type names, RSS-spec webMaster, @unchecked Sendable fallback, large test fixtures - Split files violating one_declaration_per_file - Normalize license headers via Scripts/header.sh (straight quotes) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs: refresh DocC catalog for v1.0.0 - Update requirements to match Package.swift (Swift 5.10 / Xcode 15.3, iOS 13 / watchOS 6 / tvOS 13 / macOS 10.15 deployment targets) - Bump install snippet to from: "1.0.0" - Fix transposed JSONFeed column in the Feedable mapping table (siteURL -> homePageUrl, summary -> description) - Fix invalid Swift in code snippets (Data(contentsOf:) usage, missing paren in case pattern) - Fix typos and stale LICENSE link Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Migrate lint/style/CI configs to BrightDigit template patterns (#54) (#76) * Phase 4 — OpenAPI & dependency migration (#109) * SyndiKit CI: use jdx/mise-action for robust lint tool bootstrap Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: add macOS + Windows nightly-6.4 CI legs across all 5 standalone repos Extend ButtondownKit/Spinetail/SwiftTube/Contribute/SyndiKit standalone CI to the BrightDigit multi-platform template now that a self-hosted macOS runner with /Applications/Xcode-beta.app (Swift 6.4) is available: - build-macos: [self-hosted, macOS] + swift-build xcode=Xcode-beta. Blocking on all 5. Contribute & SyndiKit migrated off macos-15; their Ubuntu + lint legs migrated swift:6.3-noble -> swiftlang/swift:nightly-6.4.x-noble. - build-windows: hosted windows-2022/2025, swift.org nightly snapshot 6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-01-a. Gated to full-matrix runs via a single-package configure job. continue-on-error on the OpenAPI repos + Contribute (unverified deps); blocking on SyndiKit. - SyndiKit also gains build-macos-platforms (iOS/watchOS/tvOS on released Xcode_26.4 — not nightly 6.4). WASM + Android deferred: no nightly 6.4 support yet. WASM is a swift-build limitation (brightdigit/swift-build#115 — no input to override the auto-derived -RELEASE wasm SDK URL); Android is blocked upstream (no nightly 6.4 SDK). Each workflow documents re-adding them. Contribute WASM is permanently N/A (Yams on the Musl/wasm SDK). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: wire WASM + Android nightly-6.4 CI legs via swift-build SDK-bundle inputs Now that swift.org publishes nightly 6.4 SDK bundles on swift-6.4.x-branch and brightdigit/swift-build#116 adds inputs to install caller-supplied bundles, add: - build-wasm to ButtondownKit/Spinetail/SwiftTube/SyndiKit (NOT Contribute — Yams fails on the Musl/wasm SDK). Uses wasm-sdk-url + wasm-sdk-checksum pointing at the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_wasm artifactbundle, with WASI emulation + memory flags. - build-android to all 5 repos. Uses android-sdk-url + android-sdk-id (+ matching android-swift-version) for the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android artifactbundle via skiptools custom-sdk-url; build-only (android-run-tests: false). Both legs are full-matrix-gated and continue-on-error: they reference @v1 and are inert until swift-build#116 is released and the v1 tag moved, after which they should be confirmed green and promoted to blocking (SyndiKit first). Bump the snapshot SDK URLs/checksums periodically. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: run all Apple-platform suites on self-hosted Xcode-beta (Swift 6.4) Per the rule that Swift 6.4 builds use the self-hosted runners (the only macOS Swift 6.4 toolchain is /Applications/Xcode-beta.app = Xcode 27 / Swift 6.4): - Move SyndiKit + Contribute build-macos-platforms off hosted macos-26/Xcode_26.4 (which is only Swift 6.2) onto [self-hosted, macOS] + Xcode-beta. - Add build-macos-platforms (iOS/watchOS/tvOS) to ButtondownKit/Spinetail/SwiftTube on the same self-hosted runner — these are swift-tools-version:6.4, so hosted released-Xcode runners can't even parse their manifests. All use the iOS/watchOS/tvOS 27.0 simulator runtimes present on the runner (iPhone 17 Pro / Apple Watch Ultra 3 (49mm) / Apple TV 4K (3rd generation)), full-matrix-gated and continue-on-error (simulator-on-nightly is the most fragile leg; promote once green). lint now needs build-macos-platforms. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: give Windows its own (stricter) matrix tier Three CI tiers instead of two: small set (build-ubuntu/build-macos/lint, always) < full-matrix (macОS-platforms/wasm/android) < +Windows. configure now emits a second output, run-windows, equal to full-matrix MINUS PRs into semver branches. build-windows (the most expensive leg — hosted windows-2022/2025 ×2) gates on run-windows; the rest keep full-matrix. So PRs into semver branches still exercise the full non-Windows matrix but skip Windows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: test against swift-build feature branch + fold build-wasm into build-ubuntu - Point every brightdigit/swift-build@v1 reference at @sdk-url-checksum-nightly-6.4 (PR #116) TEMPORARILY so CI exercises the new wasm-sdk-url/android-sdk-url code before it ships in @v1. Revert to @v1 once #116 is merged + the v1 tag moved. - Fold build-wasm into build-ubuntu as a continue-on-error step in the same nightly-6.4.x-noble container (one spin-up; runs on every push/PR now, not just full-matrix). Removed the standalone build-wasm job from ButtondownKit/Spinetail/ SwiftTube/SyndiKit (Contribute has no wasm — Yams on Musl/wasm). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: only run push CI on main (drop integration branch from push trigger) Push events now trigger only on main (+ release tags). Feature/integration branches like brightdigit-com-260406 get CI through their PRs instead of a redundant branch-push run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: unify the 5 CI workflows to byte-identical (except name) - Windows is now blocking everywhere (dropped continue-on-error from build-windows in all 5, not just SyndiKit). - The only per-package functional difference — the wasm step (Contribute can't build Yams on wasm) — is externalized to the ENABLE_WASM repo variable: `if: ${{ vars.ENABLE_WASM != 'false' }}`. Set ENABLE_WASM=false on Contribute. - Normalized all comments to a shared template. Result: the five workflow files are byte-identical except the `name:` line; the only behavioral knob is each repo's ENABLE_WASM variable. Filed Contribute#10 to fix Yams-on-wasm and re-enable it there. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: remove continue-on-error from all 5 CI workflows Make the WASM step, the Apple-platforms job (iOS/watchOS/tvOS), and the Android job blocking across all five subrepos. Tidy the now-stale continue-on-error comment phrases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: gate watchOS leg on ENABLE_WATCHOS (disable where failing) watchOS-27 SDK rejects deps that infer an 8.0 deployment target (SwiftPM #10188, not fixable in-repo). Gate the build-macos-platforms watchOS leg on a new ENABLE_WATCHOS repo variable (mirrors ENABLE_WASM), keeping the 5 workflows byte-identical. ENABLE_WATCHOS=false is set on ButtondownKit/SwiftTube/ Contribute/Spinetail; SyndiKit (unaffected) keeps running watchOS. Tracked in brightdigit.com#119. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: build-ubuntu as a [standard, wasm, wasm-embedded] matrix Mirror brightdigit/MistKit: the configure job emits ubuntu-type (gated by ENABLE_WASM), and build-ubuntu fans out over it via fromJSON. Standard ('') always runs; wasm + wasm-embedded run unless ENABLE_WASM=false (e.g. Yams on Contribute). Both wasm variants share the nightly-6.4.x SDK bundle. Replaces the single folded WASM step. Byte-identical across all 5. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: make wasm/wasm-embedded legs build-only The wasm/embedded BUILD passes (OpenAPIURLSession is guarded out on WASI), but running the suite under WasmKit fails: Foundation resource bundles (test Fixtures) aren't mounted in the WASI sandbox, and embedded hits OpenAPIRuntime keypath-demangling limits at runtime. Neither is our bug. Build-only validates wasm/embedded compilation (the goal); the standard leg still runs the full suite + coverage. Mirrors the Android leg's build-only stance. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add tests for uncovered EntryID/SiteCollection/media-properties branches Covers the 9 patch-coverage gaps flagged on PR #127: - EntryID: init(string:)/init?(_:)/description/Codable for all four cases - SiteCollectionDirectoryBuilder: init() + directory(fromCollection:) - PodcastEpisodeProperties.init?(rssItem:) nil branch (no enclosure) - YouTubeIDProperties.init?(entry:) nil branch (non-YouTube Atom entry) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * CI: revert swift-build action to @v1 (temp sdk-url-checksum-nightly-6.4 branch deleted) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Align with BrightDigit v1.0.0 CI template and drop self-hosted DocC cruft Add the template's auxiliary workflows (check-unsafe-flags, cleanup-caches, swift-source-compat) and .swift-version. Trim the devcontainer matrix to the supported set (stable 5.10-6.3, nightly 6.4 only; root pinned to 6.3). Remove the now-stale Mintfile and the self-hosted DocC / XcodeGen stack (netlify.toml, Dockerfile, .dockerignore, .htaccess, project.yml, Scripts/docc.sh, Scripts/httpd.conf, Scripts/gh-md-toc) since docs are hosted via SPI. Refresh .swiftlint.yml excludes and CLAUDE.md to match the mise-based 6.4 tooling. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Bump github.com/coreoffice/xmlcoder from 0.18.1 to 0.18.2 Bumps [github.com/coreoffice/xmlcoder](https://github.com/CoreOffice/XMLCoder) from 0.18.1 to 0.18.2. - [Release notes](https://github.com/CoreOffice/XMLCoder/releases) - [Commits](CoreOffice/XMLCoder@0.18.1...0.18.2) --- updated-dependencies: - dependency-name: github.com/coreoffice/xmlcoder dependency-version: 0.18.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * Updates from brightdigit.com (#129) * Fix remaining subrepo CI failures * Cache lint tools and align Publish Ink pin * Wave 0 review feedback: CI hygiene, docs & agent tooling (#130) * Restore multi-version CI matrix and refresh devcontainers Rebuild SyndiKit.yml around a three-tier configure matrix on GitHub-hosted runners (no self-hosted): a single folded build-ubuntu across stable Swift 5.10-6.3 + nightly 6.4 (wasm/wasm-embedded on 6.3+6.4 only); macOS SPM on Swift 6.3 (Xcode 26.4) + 6.4 (Xcode 27 preview runner) with the full Apple platform matrix in the full tier; Windows and Android covering 6.3 + 6.4; and a restored source-compat suite. Reduced runs stay lean (noble x 6.3/6.4 + macOS SPM only). Devcontainers: default to Swift 6.3, add 6.2/6.3/6.4 (6.4 nightly image), remove the old 6.1/6.2 nightly folders. Refresh the stale CLAUDE.md CI section. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Keep swift-source-compat as a separate workflow Restore the standalone .github/workflows/swift-source-compat.yml (swift:5.10/ 6.0/6.1/6.2/6.3 + nightly-6.4) and drop the in-file source-compat-suite job from SyndiKit.yml; update CLAUDE.md accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly (#131) The Swift Android SDK's bundled NDK sysroot for API 36 does not ship crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still asks ld.lld to link. That broke the Android leg of CI at API 36 (see android/ndk#1391). Rewrite the build-android matrix as a cross product of {Swift 6.3, Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and ID onto the swift entry so the 6.3 rows leave them empty. Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E Co-authored-by: Claude <noreply@anthropic.com> * ci(macos): extract matrix JSON and bump Xcode 26.4 → 26.6 Move macOS CI matrix entries into .github/matrices/ for readability, and bump Apple platform simulator OS versions to 26.5 on the Xcode 26 legs. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix v1.0.0 CI badge: correct workflow filename case and stray ? The CI badge pointed at `syndikit.yml` (lowercase), but on the v1.0.0 branch the workflow file is `SyndiKit.yml` (PascalCase, matching the other Wave 0 repos), so the badge rendered "no status". Also drop the stray `?` in `&?branch=main`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* Migrate to Swift 6.4: mise-based lint tooling, rebuilt CI, and source cleanups (#127) * Migrate lint/style/CI configs in 6 BrightDigit subrepo packages [skip ci] Apply the issue #54 config migration to the vendored BrightDigit libraries (SyndiKit, TransistorPublishPlugin, Contribute, ContributeWordPress, NPMPublishPlugin, YoutubePublishPlugin) using the MistKit/SundialKit library config variant: - .swiftlint.yml: strict library ruleset + no_unchecked_sendable custom rule - .swiftformat -> .swift-format: Apple swift-format JSON - .mise.toml: swift-format 604 (Swift 6.4-aligned), swiftlint, periphery - Scripts/lint.sh (mise-based, replaces Mint) + Scripts/header.sh - CI workflow -> brightdigit/swift-build@v1 (ubuntu + macos) + STRICT lint job - Remove obsolete .hound.yml Configs + CI only; source reformatting/headers deferred (matches main repo). SwiftTube and Spinetail skipped (slated for OpenAPI-generator migration). Committed in the monorepo only; no git subrepo push performed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: trigger pipeline (config migration) * packages CI: install curl + cache mise tools in lint job * CI: test vendored BrightDigit packages via monorepo matrix Add a `test-packages` matrix job to main.yaml that builds, tests, and lints the 6 vendored BrightDigit packages in-place. In the monorepo checkout every sibling already sits at its relative-path location, so each package resolves with zero dependency reconstruction — replacing the per-package setup-deps CI. - detect-changes: add `packages` paths-filter + `packages-changed` output - remove standalone workflows + orphaned setup-deps from the 4 rel-dep packages (ContributeWordPress, Transistor, NPM, Youtube); their standalone CI was synthetic (relative deps are committed) - keep SyndiKit + Contribute standalone CIs (genuinely standalone libraries) - bump all GitHub Actions to latest: checkout v6, cache v5, upload-artifact v7, download-artifact v8, dorny/paths-filter v4 (swift-build@v1 unchanged) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Conform v1.0.0 codebase to standardized lint configs Post-rebase cleanup after replaying the config migration onto v1.0.0: - Fix swiftlint/swift-format violations surfaced by the stricter standardized configs (explicit ACLs, formatting, XCTFail messages, XCTUnwrap instead of force-unwraps, doc-comment corrections) - Inline-disable intentional exceptions in source: iTunes* type names, RSS-spec webMaster, @unchecked Sendable fallback, large test fixtures - Split files violating one_declaration_per_file - Normalize license headers via Scripts/header.sh (straight quotes) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs: refresh DocC catalog for v1.0.0 - Update requirements to match Package.swift (Swift 5.10 / Xcode 15.3, iOS 13 / watchOS 6 / tvOS 13 / macOS 10.15 deployment targets) - Bump install snippet to from: "1.0.0" - Fix transposed JSONFeed column in the Feedable mapping table (siteURL -> homePageUrl, summary -> description) - Fix invalid Swift in code snippets (Data(contentsOf:) usage, missing paren in case pattern) - Fix typos and stale LICENSE link Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Migrate lint/style/CI configs to BrightDigit template patterns (#54) (#76) * Phase 4 — OpenAPI & dependency migration (#109) * SyndiKit CI: use jdx/mise-action for robust lint tool bootstrap Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: add macOS + Windows nightly-6.4 CI legs across all 5 standalone repos Extend ButtondownKit/Spinetail/SwiftTube/Contribute/SyndiKit standalone CI to the BrightDigit multi-platform template now that a self-hosted macOS runner with /Applications/Xcode-beta.app (Swift 6.4) is available: - build-macos: [self-hosted, macOS] + swift-build xcode=Xcode-beta. Blocking on all 5. Contribute & SyndiKit migrated off macos-15; their Ubuntu + lint legs migrated swift:6.3-noble -> swiftlang/swift:nightly-6.4.x-noble. - build-windows: hosted windows-2022/2025, swift.org nightly snapshot 6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-01-a. Gated to full-matrix runs via a single-package configure job. continue-on-error on the OpenAPI repos + Contribute (unverified deps); blocking on SyndiKit. - SyndiKit also gains build-macos-platforms (iOS/watchOS/tvOS on released Xcode_26.4 — not nightly 6.4). WASM + Android deferred: no nightly 6.4 support yet. WASM is a swift-build limitation (brightdigit/swift-build#115 — no input to override the auto-derived -RELEASE wasm SDK URL); Android is blocked upstream (no nightly 6.4 SDK). Each workflow documents re-adding them. Contribute WASM is permanently N/A (Yams on the Musl/wasm SDK). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: wire WASM + Android nightly-6.4 CI legs via swift-build SDK-bundle inputs Now that swift.org publishes nightly 6.4 SDK bundles on swift-6.4.x-branch and brightdigit/swift-build#116 adds inputs to install caller-supplied bundles, add: - build-wasm to ButtondownKit/Spinetail/SwiftTube/SyndiKit (NOT Contribute — Yams fails on the Musl/wasm SDK). Uses wasm-sdk-url + wasm-sdk-checksum pointing at the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_wasm artifactbundle, with WASI emulation + memory flags. - build-android to all 5 repos. Uses android-sdk-url + android-sdk-id (+ matching android-swift-version) for the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android artifactbundle via skiptools custom-sdk-url; build-only (android-run-tests: false). Both legs are full-matrix-gated and continue-on-error: they reference @v1 and are inert until swift-build#116 is released and the v1 tag moved, after which they should be confirmed green and promoted to blocking (SyndiKit first). Bump the snapshot SDK URLs/checksums periodically. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: run all Apple-platform suites on self-hosted Xcode-beta (Swift 6.4) Per the rule that Swift 6.4 builds use the self-hosted runners (the only macOS Swift 6.4 toolchain is /Applications/Xcode-beta.app = Xcode 27 / Swift 6.4): - Move SyndiKit + Contribute build-macos-platforms off hosted macos-26/Xcode_26.4 (which is only Swift 6.2) onto [self-hosted, macOS] + Xcode-beta. - Add build-macos-platforms (iOS/watchOS/tvOS) to ButtondownKit/Spinetail/SwiftTube on the same self-hosted runner — these are swift-tools-version:6.4, so hosted released-Xcode runners can't even parse their manifests. All use the iOS/watchOS/tvOS 27.0 simulator runtimes present on the runner (iPhone 17 Pro / Apple Watch Ultra 3 (49mm) / Apple TV 4K (3rd generation)), full-matrix-gated and continue-on-error (simulator-on-nightly is the most fragile leg; promote once green). lint now needs build-macos-platforms. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: give Windows its own (stricter) matrix tier Three CI tiers instead of two: small set (build-ubuntu/build-macos/lint, always) < full-matrix (macОS-platforms/wasm/android) < +Windows. configure now emits a second output, run-windows, equal to full-matrix MINUS PRs into semver branches. build-windows (the most expensive leg — hosted windows-2022/2025 ×2) gates on run-windows; the rest keep full-matrix. So PRs into semver branches still exercise the full non-Windows matrix but skip Windows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: test against swift-build feature branch + fold build-wasm into build-ubuntu - Point every brightdigit/swift-build@v1 reference at @sdk-url-checksum-nightly-6.4 (PR #116) TEMPORARILY so CI exercises the new wasm-sdk-url/android-sdk-url code before it ships in @v1. Revert to @v1 once #116 is merged + the v1 tag moved. - Fold build-wasm into build-ubuntu as a continue-on-error step in the same nightly-6.4.x-noble container (one spin-up; runs on every push/PR now, not just full-matrix). Removed the standalone build-wasm job from ButtondownKit/Spinetail/ SwiftTube/SyndiKit (Contribute has no wasm — Yams on Musl/wasm). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: only run push CI on main (drop integration branch from push trigger) Push events now trigger only on main (+ release tags). Feature/integration branches like brightdigit-com-260406 get CI through their PRs instead of a redundant branch-push run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: unify the 5 CI workflows to byte-identical (except name) - Windows is now blocking everywhere (dropped continue-on-error from build-windows in all 5, not just SyndiKit). - The only per-package functional difference — the wasm step (Contribute can't build Yams on wasm) — is externalized to the ENABLE_WASM repo variable: `if: ${{ vars.ENABLE_WASM != 'false' }}`. Set ENABLE_WASM=false on Contribute. - Normalized all comments to a shared template. Result: the five workflow files are byte-identical except the `name:` line; the only behavioral knob is each repo's ENABLE_WASM variable. Filed Contribute#10 to fix Yams-on-wasm and re-enable it there. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: remove continue-on-error from all 5 CI workflows Make the WASM step, the Apple-platforms job (iOS/watchOS/tvOS), and the Android job blocking across all five subrepos. Tidy the now-stale continue-on-error comment phrases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: gate watchOS leg on ENABLE_WATCHOS (disable where failing) watchOS-27 SDK rejects deps that infer an 8.0 deployment target (SwiftPM new ENABLE_WATCHOS repo variable (mirrors ENABLE_WASM), keeping the 5 workflows byte-identical. ENABLE_WATCHOS=false is set on ButtondownKit/SwiftTube/ Contribute/Spinetail; SyndiKit (unaffected) keeps running watchOS. Tracked in brightdigit.com#119. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: build-ubuntu as a [standard, wasm, wasm-embedded] matrix Mirror brightdigit/MistKit: the configure job emits ubuntu-type (gated by ENABLE_WASM), and build-ubuntu fans out over it via fromJSON. Standard ('') always runs; wasm + wasm-embedded run unless ENABLE_WASM=false (e.g. Yams on Contribute). Both wasm variants share the nightly-6.4.x SDK bundle. Replaces the single folded WASM step. Byte-identical across all 5. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Subrepos: make wasm/wasm-embedded legs build-only The wasm/embedded BUILD passes (OpenAPIURLSession is guarded out on WASI), but running the suite under WasmKit fails: Foundation resource bundles (test Fixtures) aren't mounted in the WASI sandbox, and embedded hits OpenAPIRuntime keypath-demangling limits at runtime. Neither is our bug. Build-only validates wasm/embedded compilation (the goal); the standard leg still runs the full suite + coverage. Mirrors the Android leg's build-only stance. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add tests for uncovered EntryID/SiteCollection/media-properties branches Covers the 9 patch-coverage gaps flagged on PR #127: - EntryID: init(string:)/init?(_:)/description/Codable for all four cases - SiteCollectionDirectoryBuilder: init() + directory(fromCollection:) - PodcastEpisodeProperties.init?(rssItem:) nil branch (no enclosure) - YouTubeIDProperties.init?(entry:) nil branch (non-YouTube Atom entry) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * CI: revert swift-build action to @v1 (temp sdk-url-checksum-nightly-6.4 branch deleted) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Align with BrightDigit v1.0.0 CI template and drop self-hosted DocC cruft Add the template's auxiliary workflows (check-unsafe-flags, cleanup-caches, swift-source-compat) and .swift-version. Trim the devcontainer matrix to the supported set (stable 5.10-6.3, nightly 6.4 only; root pinned to 6.3). Remove the now-stale Mintfile and the self-hosted DocC / XcodeGen stack (netlify.toml, Dockerfile, .dockerignore, .htaccess, project.yml, Scripts/docc.sh, Scripts/httpd.conf, Scripts/gh-md-toc) since docs are hosted via SPI. Refresh .swiftlint.yml excludes and CLAUDE.md to match the mise-based 6.4 tooling. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Bump github.com/coreoffice/xmlcoder from 0.18.1 to 0.18.2 Bumps [github.com/coreoffice/xmlcoder](https://github.com/CoreOffice/XMLCoder) from 0.18.1 to 0.18.2. - [Release notes](https://github.com/CoreOffice/XMLCoder/releases) - [Commits](CoreOffice/XMLCoder@0.18.1...0.18.2) --- updated-dependencies: - dependency-name: github.com/coreoffice/xmlcoder dependency-version: 0.18.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * Updates from brightdigit.com (#129) * Fix remaining subrepo CI failures * Cache lint tools and align Publish Ink pin * Wave 0 review feedback: CI hygiene, docs & agent tooling (#130) * Restore multi-version CI matrix and refresh devcontainers Rebuild SyndiKit.yml around a three-tier configure matrix on GitHub-hosted runners (no self-hosted): a single folded build-ubuntu across stable Swift 5.10-6.3 + nightly 6.4 (wasm/wasm-embedded on 6.3+6.4 only); macOS SPM on Swift 6.3 (Xcode 26.4) + 6.4 (Xcode 27 preview runner) with the full Apple platform matrix in the full tier; Windows and Android covering 6.3 + 6.4; and a restored source-compat suite. Reduced runs stay lean (noble x 6.3/6.4 + macOS SPM only). Devcontainers: default to Swift 6.3, add 6.2/6.3/6.4 (6.4 nightly image), remove the old 6.1/6.2 nightly folders. Refresh the stale CLAUDE.md CI section. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Keep swift-source-compat as a separate workflow Restore the standalone .github/workflows/swift-source-compat.yml (swift:5.10/ 6.0/6.1/6.2/6.3 + nightly-6.4) and drop the in-file source-compat-suite job from SyndiKit.yml; update CLAUDE.md accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly (#131) The Swift Android SDK's bundled NDK sysroot for API 36 does not ship crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still asks ld.lld to link. That broke the Android leg of CI at API 36 (see android/ndk#1391). Rewrite the build-android matrix as a cross product of {Swift 6.3, Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and ID onto the swift entry so the 6.3 rows leave them empty. Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E Co-authored-by: Claude <noreply@anthropic.com> * ci(macos): extract matrix JSON and bump Xcode 26.4 → 26.6 Move macOS CI matrix entries into .github/matrices/ for readability, and bump Apple platform simulator OS versions to 26.5 on the Xcode 26 legs. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix v1.0.0 CI badge: correct workflow filename case and stray ? The CI badge pointed at `syndikit.yml` (lowercase), but on the v1.0.0 branch the workflow file is `SyndiKit.yml` (PascalCase, matching the other Wave 0 repos), so the badge rendered "no status". Also drop the stray `?` in `&?branch=main`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
The Swift Android SDK's bundled NDK sysroot for API 36 does not ship
crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still
asks ld.lld to link. That broke the Android leg of CI at API 36 (see
android/ndk#1391).
Rewrite the build-android matrix as a cross product of {Swift 6.3,
Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and
ID onto the swift entry so the 6.3 rows leave them empty.
Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E
Summary by CodeRabbit