feat(ci): adding ymls to run proper CI on project - #4
Merged
Conversation
Add website/ workspace with 35 pages across getting-started, guides, api-reference, architecture, production, migration, development and troubleshooting. Wire docs:* scripts, ignore build outputs, and add lychee config for link checking.
Update Hooks table to the frozen public API shape, add Listener helpers section (addSyncEventListener / SYNC_EVENT_CHANNEL), extend Types & enums, and add Documentation section linking to the live Docusaurus site.
Document the 6-step lifecycle for adding or changing a Nitro method: edit spec, run nitrogen, implement Swift and Kotlin, re-export in facade, typecheck/lint/test, rebuild example.
…flows Wire release-it with conventional-changelog and add GitHub Actions for npm publish, beta prereleases, Docusaurus deploy, and docs link checks.
Add Queue/History/Config tabs wired to all 7 hooks, Android offline and boot permissions, and refresh README with an offline walkthrough.
Tab bar paddingTop already pads the status bar; SafeAreaView edges ['top'] in Queue/History/Config was re-applying it, creating an unwanted gap above the first card.
- generateId: replace uuid v7 with pure-JS v4 (Hermes lacks crypto.getRandomValues); drop uuid + @types/uuid deps - android: remove com.facebook.react plugin so Codegen stops dex-duplicating RN view-manager delegates into the AAR - example: replace react-navigation with a built-in tab switcher
gabriel-sisjr
force-pushed
the
feature/ci-improvements
branch
from
May 19, 2026 00:28
d076c5f to
618ac4a
Compare
- rename Swift impl class to HybridSyncProvider - migrate NSLock to withLock under @sendable closures - harden iOS test CI with destination fallback and xcbeautify - add yarn test:ios mirror and opt-in :testspecs - bump to v0.1.1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This branch consolidates six workstreams that were pending to close the
0.1.xrelease cycle: (a) a complete CI matrix with five parallel jobs, (b) an automation suite for publishing, prereleases, and docs deploys, (c) a fix for the broken iOS build caused by a C++ symbol collision between Nitro and Swift, plus the migration to Swift 6 strict concurrency, (d) unblocking the example app on Android with Hermes by removing the root cause of dex duplication, (e) a new Docusaurus documentation site with 35 pages, and (f) replacing the placeholder example with a real showcase wired to the 7 public hooks. Library version bumped from0.1.0to0.1.1.Motivation
SyncProviderand the C++ classmargelo::nitro::syncprovider::SyncProvidergenerated by Nitro, along with multiple concurrency errors under Swift 6 (NSLock.lock()/defer unlockinside@Sendableclosures).crypto.getRandomValues(breakinguuidv7), and applying thecom.facebook.reactplugin to the module caused:app:mergeLibDexDebugfailures due to duplicated*ManagerDelegateclasses in consumers.multiplyplaceholder and did not exercise the frozen public API.Changes
CI
.github/workflows/ci.yml:lint,test,build-library,build-android,build-ios.build-iosjob with a simulator fallback chain (iPhone 16 → iPhone 17 → iPhone 16 Pro), output viaxcbeautify, CocoaPods cache, and a simulator diagnostics step beforexcodebuild.publish.yml(stable npm release),prerelease.yml(beta channel),deploy-docs.yml(Docusaurus), anddocs-link-check.yml(lychee).*/buildandexample/ios/Podsexcluded).iOS native
SyncProvidertoHybridSyncProviderinios/SyncProvider.swiftto eliminate the collision withmargelo::nitro::syncprovider::SyncProvidergenerated by Nitro. TheiosModuleName(SyncProvider) and the JS lookup remain unchanged.nitro.jsonupdated:autolinking.SyncProvider.ios.implementationClassNamenow points toHybridSyncProvider.lock.lock()+defer { lock.unlock() }pattern tolock.withLock { ... }inside@Sendableclosures, satisfying Swift 6 strict concurrency, in the following files:ios/SyncProvider.swiftios/Background/BackgroundSyncManager.swiftios/Connectivity/ConnectivityMonitor.swiftios/Events/SyncEventEmitter.swiftios/HTTP/BackgroundURLSessionDelegate.swiftexample/ios/Podfileopts in via:testspecs => ['Tests']to enable native test execution throughxcodebuild test.yarn test:iosscript inpackage.jsonmirroring the CI command for local parity.Android & Hermes
apply plugin: 'com.facebook.react'fromandroid/build.gradle. Nitro usesyarn nitrogen(not React Codegen), and the plugin was scanning the hoistednode_modulesand bundling third-party*ManagerDelegateclasses into the library AAR, causing:app:mergeLibDexDebugduplication in consumer apps.generateIdmigrated fromuuidv7 to a pure-JS UUID v4 implementation, removing the dependency oncrypto.getRandomValues(absent in Hermes).uuidand@types/uuiddependencies removed frompackage.json.AndroidManifest.xmlreceived the permissions required for the offline + boot scenario (ACCESS_NETWORK_STATE,RECEIVE_BOOT_COMPLETED).Example app
multiplyplaceholder was replaced with a realSyncProvidershowcase, featuring three tabs (Queue,History,Config) wired to the 7 public hooks of the library (useConnection,useSyncQueue,useSyncStatus,useOfflineQueue,useSyncEvents,useSyncConfig,useAutoSync).react-navigationreplaced with an inline tab selector (zero additional navigation dependencies).SafeAreaView edges={['top']}from the Queue / History / Config screens, since the tab bar already applies the top padding.Documentation & website
website/workspace with Docusaurus and 35 pages organized intogetting-started,guides,api-reference,architecture,production,migration,development, andtroubleshooting.docs:*scripts in the rootpackage.jsonforstart,build, andserveof the site.addSyncEventListenerandSYNC_EVENT_CHANNEL, a Types & enums section, and links to the Docusaurus site.CONTRIBUTING.mdgained a "Critical Nitro Workflow" section documenting the 6-step cycle for adding or changing a Nitro method.context7.jsonadded for indexing by the Context7 MCP.docs-link-check.ymlworkflow.Release & metadata
release-itconfigured with@release-it/conventional-changelogfor automaticCHANGELOG.mdgeneration from conventional commits.publish.ymlandprerelease.ymlworkflows cover stable releases and the beta channel via GitHub Actions.package.jsonupdated:version0.1.0→0.1.1,descriptionrevised,keywordsexpanded, andhomepagepointing to the Docusaurus site.CHANGELOG.mdinitialized in the Keep-a-Changelog format.Public API impact
src/index.tsx, hooks, and types remain identical.iosModuleNameremainsSyncProvider. TheNitroModules.createHybridObject<SyncProvider>('SyncProvider')lookup is still valid.SyncProviderincom.margelo.nitro.syncprovider.SyncProvider→HybridSyncProvider); transparent to consumers.0.1.0→0.1.1(patch — fixes and tooling only, no contract changes).Validation checklist
yarn lintyarn typecheckyarn testyarn prepare(library build via bob)yarn turbo run build:androidyarn turbo run build:iosyarn example androidyarn example iosdocs-link-check.ymlworkflow green (lychee)