From 3365de6acb8a6559ecc37f133213849ca1f88b72 Mon Sep 17 00:00:00 2001 From: Michael Spinali Date: Sun, 15 Mar 2026 15:00:21 -0500 Subject: [PATCH 1/6] feat: SDK release pipeline, Go cross-compile, and publishing infrastructure - Add workflow_dispatch release pipeline for Swift (SPM + CocoaPods), Kotlin (Maven Central), React Native (npm OIDC), and Go (cross-compiled synchrod binaries) with checksums and GitHub Release auto-creation - Configure vanniktech maven-publish plugin for Central Portal publishing - Add auto-generated release notes config (.github/release.yml) - Add dynamic badges for all registries and build status - Add release helper Makefile targets - Wire logo into mkdocs site --- .github/release.yml | 28 +++ .github/workflows/release.yml | 311 ++++++++++++++++++++++++ Makefile | 24 ++ README.md | 10 +- clients/kotlin/build.gradle.kts | 1 + clients/kotlin/gradle.properties | 15 ++ clients/kotlin/synchro/build.gradle.kts | 36 ++- docs/assets/logo.svg | 7 + mkdocs.yml | 2 + 9 files changed, 423 insertions(+), 11 deletions(-) create mode 100644 .github/release.yml create mode 100644 .github/workflows/release.yml create mode 100644 docs/assets/logo.svg diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000..ef7398f5 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,28 @@ +changelog: + categories: + - title: Breaking Changes + labels: + - breaking + - title: Features + labels: + - enhancement + - feature + - title: Bug Fixes + labels: + - bug + - fix + - title: Documentation + labels: + - documentation + - docs + - title: Infrastructure + labels: + - ci + - infrastructure + - dependencies + - title: Other Changes + labels: + - "*" + exclude: + labels: + - skip-changelog diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..f57fb905 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,311 @@ +name: Release + +on: + workflow_dispatch: + inputs: + version: + description: 'Release version (e.g. 0.2.0, without v prefix)' + required: true + type: string + +permissions: + contents: write + id-token: write + +jobs: + # ── Validate version format ──────────────────────────────────────────── + prepare: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.validate.outputs.version }} + steps: + - name: Validate version + id: validate + run: | + VERSION="${{ inputs.version }}" + if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "::error::Version '$VERSION' does not match X.Y.Z pattern" + exit 1 + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "Version: $VERSION" + + # ── Go tests ─────────────────────────────────────────────────────────── + test-go: + needs: prepare + runs-on: ubuntu-latest + services: + postgres: + image: postgres:16 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: synchro_test + ports: + - 5432:5432 + options: >- + --health-cmd="pg_isready -U postgres" + --health-interval=5s + --health-timeout=5s + --health-retries=5 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Run Go tests + env: + TEST_DATABASE_URL: postgres://postgres:postgres@localhost:5432/synchro_test?sslmode=disable + run: go test -count=1 -p 1 ./... + + # ── Swift tests ──────────────────────────────────────────────────────── + test-swift: + needs: prepare + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - run: cd clients/swift && swift test + + # ── Kotlin tests ─────────────────────────────────────────────────────── + test-kotlin: + needs: prepare + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' + + - run: cd clients/kotlin && ./gradlew :synchro:test + + # ── React Native tests ──────────────────────────────────────────────── + test-rn: + needs: prepare + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: cd clients/react-native && yarn install --immutable + + - run: cd clients/react-native && npm test -- --testPathIgnorePatterns=e2e + + # ── Build Go binaries ───────────────────────────────────────────────── + build-go: + needs: [test-go, prepare] + runs-on: ubuntu-latest + env: + VERSION: ${{ needs.prepare.outputs.version }} + strategy: + matrix: + include: + - goos: linux + goarch: amd64 + - goos: linux + goarch: arm64 + - goos: darwin + goarch: amd64 + - goos: darwin + goarch: arm64 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Build synchrod + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: '0' + run: | + BINARY="synchrod-${{ matrix.goos }}-${{ matrix.goarch }}" + go build -ldflags="-s -w -X main.version=${VERSION}" -o "$BINARY" ./cmd/synchrod + + - uses: actions/upload-artifact@v4 + with: + name: "synchrod-${{ matrix.goos }}-${{ matrix.goarch }}" + path: "synchrod-${{ matrix.goos }}-${{ matrix.goarch }}" + + # ── Publish Swift SDK ────────────────────────────────────────────────── + release-swift: + needs: [test-go, test-swift, prepare] + runs-on: macos-latest + env: + VERSION: ${{ needs.prepare.outputs.version }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Fetch secrets from Doppler + uses: dopplerhq/secrets-fetch-action@v2 + with: + doppler-token: ${{ secrets.DOPPLER_TOKEN }} + inject-env-vars: true + + - name: Subtree split and push swift-sdk branch + run: | + git subtree split --prefix=clients/swift -b swift-sdk + git push origin swift-sdk --force + + - name: Tag swift-sdk branch + run: | + git checkout swift-sdk + git tag -f "$VERSION" + git push origin "$VERSION" --force + + - name: Publish to CocoaPods + env: + COCOAPODS_TRUNK_TOKEN: ${{ env.COCOAPODS_TRUNK_TOKEN }} + run: | + git checkout swift-sdk + sed -i '' "s/s.version.*=.*/s.version = \"$VERSION\"/" Synchro.podspec + pod trunk push Synchro.podspec --allow-warnings + + - name: Build Swift source archive + run: | + git checkout swift-sdk + zip -r "Synchro-swift-${VERSION}.zip" . -x '.git/*' + + - uses: actions/upload-artifact@v4 + with: + name: swift-archive + path: "Synchro-swift-${{ needs.prepare.outputs.version }}.zip" + + # ── Publish Kotlin SDK ───────────────────────────────────────────────── + release-kotlin: + needs: [test-kotlin, prepare] + runs-on: ubuntu-latest + env: + VERSION: ${{ needs.prepare.outputs.version }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' + + - name: Fetch secrets from Doppler + uses: dopplerhq/secrets-fetch-action@v2 + with: + doppler-token: ${{ secrets.DOPPLER_TOKEN }} + inject-env-vars: true + + - name: Import GPG key + run: | + echo "$GPG_PRIVATE_KEY" | gpg --batch --import + GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format short 2>/dev/null | grep sec | head -1 | sed 's/.*\///' | sed 's/ .*//') + echo "GPG_KEY_ID=$GPG_KEY_ID" >> "$GITHUB_ENV" + + - name: Publish to Maven Central + working-directory: clients/kotlin + env: + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ env.MAVEN_CENTRAL_USERNAME }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ env.MAVEN_CENTRAL_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ env.GPG_PRIVATE_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ env.GPG_PASSPHRASE }} + run: ./gradlew publishAndReleaseToMavenCentral -Pversion="$VERSION" + + - name: Collect AAR artifact + run: | + AAR_PATH=$(find clients/kotlin/synchro/build/outputs/aar -name '*.aar' | head -1) + cp "$AAR_PATH" "synchro-${VERSION}.aar" + + - uses: actions/upload-artifact@v4 + with: + name: kotlin-aar + path: "synchro-${{ needs.prepare.outputs.version }}.aar" + + # ── Publish React Native SDK ─────────────────────────────────────────── + release-npm: + needs: [release-swift, release-kotlin, test-rn, prepare] + runs-on: ubuntu-latest + env: + VERSION: ${{ needs.prepare.outputs.version }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: '20' + registry-url: 'https://registry.npmjs.org' + + - name: Install dependencies and build + working-directory: clients/react-native + run: | + yarn install --immutable + yarn prepare + + - name: Stamp version and publish + working-directory: clients/react-native + run: | + npm version "$VERSION" --no-git-tag-version + npm publish --access public --provenance + + - name: Pack tarball for release artifact + working-directory: clients/react-native + run: npm pack + + - uses: actions/upload-artifact@v4 + with: + name: npm-tarball + path: "clients/react-native/trainstar-synchro-react-native-${{ needs.prepare.outputs.version }}.tgz" + + # ── Create GitHub Release with all artifacts ─────────────────────────── + create-release: + needs: [release-swift, release-kotlin, release-npm, build-go, prepare] + runs-on: ubuntu-latest + env: + VERSION: ${{ needs.prepare.outputs.version }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Generate checksums + run: | + cd artifacts + sha256sum \ + synchrod-linux-amd64/synchrod-linux-amd64 \ + synchrod-linux-arm64/synchrod-linux-arm64 \ + synchrod-darwin-amd64/synchrod-darwin-amd64 \ + synchrod-darwin-arm64/synchrod-darwin-arm64 \ + swift-archive/Synchro-swift-${VERSION}.zip \ + kotlin-aar/synchro-${VERSION}.aar \ + npm-tarball/trainstar-synchro-react-native-${VERSION}.tgz \ + > checksums.txt + + - name: Create tag + run: | + git tag "v${VERSION}" + git push origin "v${VERSION}" + + - name: Create GitHub Release + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create "v${VERSION}" \ + --repo "$GITHUB_REPOSITORY" \ + --title "v${VERSION}" \ + --generate-notes \ + "artifacts/synchrod-linux-amd64/synchrod-linux-amd64#synchrod-linux-amd64" \ + "artifacts/synchrod-linux-arm64/synchrod-linux-arm64#synchrod-linux-arm64" \ + "artifacts/synchrod-darwin-amd64/synchrod-darwin-amd64#synchrod-darwin-amd64" \ + "artifacts/synchrod-darwin-arm64/synchrod-darwin-arm64#synchrod-darwin-arm64" \ + "artifacts/swift-archive/Synchro-swift-${VERSION}.zip" \ + "artifacts/kotlin-aar/synchro-${VERSION}.aar" \ + "artifacts/npm-tarball/trainstar-synchro-react-native-${VERSION}.tgz" \ + "artifacts/checksums.txt" diff --git a/Makefile b/Makefile index 2567d8fc..243501c8 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,10 @@ synchrod-test-start \ synchrod-test-stop \ synchrod-test-restart \ + release-check \ + release-swift-local \ + release-kotlin-local \ + release-npm-dry-run \ clean # Local infrastructure defaults. @@ -75,6 +79,10 @@ help: @echo " test-rn-e2e-android - Run React Native Detox E2E tests on Android" @echo " test-rn - Run React Native E2E tests on both platforms" @echo " test-integration - Run Go integration + WAL + Swift + Kotlin + RN integration against a live synchrod" + @echo " release-check - Run all SDK unit tests locally" + @echo " release-swift-local - Dry-run subtree split for Swift SDK" + @echo " release-kotlin-local - Publish Kotlin SDK to mavenLocal" + @echo " release-npm-dry-run - Dry-run npm pack for React Native SDK" @echo " clean - Remove local build/test artifacts" build: @@ -218,5 +226,21 @@ test-integration: $(TEST_ENV) $(MAKE) test-kotlin $(TEST_ENV) $(MAKE) test-rn +release-check: test-go-unit test-swift-unit test-kotlin-unit test-rn-unit + @echo "All SDK tests passed." + +release-swift-local: + git subtree split --prefix=clients/swift -b swift-sdk + @echo "Branch 'swift-sdk' created. Verify Package.swift is at root:" + @git show swift-sdk:Package.swift | head -5 + +release-kotlin-local: + cd clients/kotlin && ./gradlew :synchro:publishToMavenLocal + @echo "Published to mavenLocal. Check:" + @ls -la ~/.m2/repository/com/trainstar/synchro/ 2>/dev/null || echo "Not found in ~/.m2" + +release-npm-dry-run: + cd clients/react-native && npm pack --dry-run + clean: rm -rf bin/ "$(SYNCHROD_PID_FILE)" "$(SYNCHROD_LOG_FILE)" diff --git a/README.md b/README.md index 9c45da58..ab6116a4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,13 @@ # Synchro -[![Go](https://img.shields.io/badge/Go-1.22+-00ADD8?logo=go&logoColor=white)](https://go.dev) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![Release](https://img.shields.io/github/actions/workflow/status/trainstar/synchro/release.yml?label=release&logo=github)](https://github.com/trainstar/synchro/actions/workflows/release.yml) +[![Go](https://img.shields.io/github/go-mod/go-version/trainstar/synchro?logo=go&logoColor=white)](https://pkg.go.dev/github.com/trainstar/synchro) +[![Go Reference](https://pkg.go.dev/badge/github.com/trainstar/synchro.svg)](https://pkg.go.dev/github.com/trainstar/synchro) +[![npm](https://img.shields.io/npm/v/@trainstar/synchro-react-native?logo=npm&logoColor=white&label=npm)](https://www.npmjs.com/package/@trainstar/synchro-react-native) +[![Maven Central](https://img.shields.io/maven-central/v/com.trainstar/synchro?logo=apache-maven&logoColor=white&label=maven)](https://central.sonatype.com/artifact/com.trainstar/synchro) +[![CocoaPods](https://img.shields.io/cocoapods/v/Synchro?logo=cocoapods&logoColor=white)](https://cocoapods.org/pods/Synchro) +[![SPM](https://img.shields.io/github/v/tag/trainstar/synchro?filter=!v*&logo=swift&logoColor=white&label=SPM)](https://github.com/trainstar/synchro) +[![License](https://img.shields.io/github/license/trainstar/synchro)](LICENSE) [![Docs](https://img.shields.io/badge/docs-trainstar.github.io%2Fsynchro-blue)](https://trainstar.github.io/synchro) Offline-first sync for Go + PostgreSQL. Your tables. Your server. Minimal changes. diff --git a/clients/kotlin/build.gradle.kts b/clients/kotlin/build.gradle.kts index b345e233..0cca8f42 100644 --- a/clients/kotlin/build.gradle.kts +++ b/clients/kotlin/build.gradle.kts @@ -2,4 +2,5 @@ plugins { id("com.android.library") version "8.2.2" apply false id("org.jetbrains.kotlin.android") version "1.9.22" apply false id("org.jetbrains.kotlin.plugin.serialization") version "1.9.22" apply false + id("com.vanniktech.maven.publish") version "0.30.0" apply false } diff --git a/clients/kotlin/gradle.properties b/clients/kotlin/gradle.properties index 5bac8ac5..0b76d66e 100644 --- a/clients/kotlin/gradle.properties +++ b/clients/kotlin/gradle.properties @@ -1 +1,16 @@ android.useAndroidX=true + +# Publishing defaults (CI overrides version via -Pversion=X.Y.Z) +version=0.1.0 +GROUP=com.trainstar +POM_ARTIFACT_ID=synchro +POM_NAME=Synchro +POM_DESCRIPTION=Offline-first sync SDK for Android +POM_URL=https://github.com/trainstar/synchro +POM_SCM_URL=https://github.com/trainstar/synchro +POM_SCM_CONNECTION=scm:git:git://github.com/trainstar/synchro.git +POM_SCM_DEV_CONNECTION=scm:git:ssh://github.com/trainstar/synchro.git +POM_LICENCE_NAME=MIT License +POM_LICENCE_URL=https://opensource.org/licenses/MIT +POM_DEVELOPER_ID=trainstar +POM_DEVELOPER_NAME=Trainstar diff --git a/clients/kotlin/synchro/build.gradle.kts b/clients/kotlin/synchro/build.gradle.kts index 5c59e5fe..cac9d015 100644 --- a/clients/kotlin/synchro/build.gradle.kts +++ b/clients/kotlin/synchro/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("com.android.library") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.plugin.serialization") - `maven-publish` + id("com.vanniktech.maven.publish") } android { @@ -43,15 +43,33 @@ dependencies { testImplementation("androidx.test:core:1.5.0") } -afterEvaluate { - publishing { - publications { - create("release") { - from(components["release"]) - groupId = "com.trainstar" - artifactId = "synchro" - version = "0.1.0" +mavenPublishing { + publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.CENTRAL_PORTAL) + signAllPublications() + + coordinates("com.trainstar", "synchro", project.findProperty("version")?.toString() ?: "0.1.0") + + pom { + name.set("Synchro") + description.set("Offline-first sync SDK for Android") + url.set("https://github.com/trainstar/synchro") + + licenses { + license { + name.set("MIT License") + url.set("https://opensource.org/licenses/MIT") } } + developers { + developer { + id.set("trainstar") + name.set("Trainstar") + } + } + scm { + url.set("https://github.com/trainstar/synchro") + connection.set("scm:git:git://github.com/trainstar/synchro.git") + developerConnection.set("scm:git:ssh://github.com/trainstar/synchro.git") + } } } diff --git a/docs/assets/logo.svg b/docs/assets/logo.svg new file mode 100644 index 00000000..44e50731 --- /dev/null +++ b/docs/assets/logo.svg @@ -0,0 +1,7 @@ + + + + + +synchro + \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 5c1eecd4..d1be7eb0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -28,6 +28,8 @@ theme: - content.code.copy - content.tabs.link - toc.follow + logo: assets/logo.svg + favicon: assets/logo.svg icon: repo: fontawesome/brands/github From 5d1313e6ed08f5adcaeb90fbcbfa4d0fda915d28 Mon Sep 17 00:00:00 2001 From: Michael Spinali Date: Sun, 15 Mar 2026 15:05:01 -0500 Subject: [PATCH 2/6] feat: update README with logo, centered badges, and revised tagline --- README.md | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index ab6116a4..822b84ad 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,20 @@ -# Synchro - -[![Release](https://img.shields.io/github/actions/workflow/status/trainstar/synchro/release.yml?label=release&logo=github)](https://github.com/trainstar/synchro/actions/workflows/release.yml) -[![Go](https://img.shields.io/github/go-mod/go-version/trainstar/synchro?logo=go&logoColor=white)](https://pkg.go.dev/github.com/trainstar/synchro) -[![Go Reference](https://pkg.go.dev/badge/github.com/trainstar/synchro.svg)](https://pkg.go.dev/github.com/trainstar/synchro) -[![npm](https://img.shields.io/npm/v/@trainstar/synchro-react-native?logo=npm&logoColor=white&label=npm)](https://www.npmjs.com/package/@trainstar/synchro-react-native) -[![Maven Central](https://img.shields.io/maven-central/v/com.trainstar/synchro?logo=apache-maven&logoColor=white&label=maven)](https://central.sonatype.com/artifact/com.trainstar/synchro) -[![CocoaPods](https://img.shields.io/cocoapods/v/Synchro?logo=cocoapods&logoColor=white)](https://cocoapods.org/pods/Synchro) -[![SPM](https://img.shields.io/github/v/tag/trainstar/synchro?filter=!v*&logo=swift&logoColor=white&label=SPM)](https://github.com/trainstar/synchro) -[![License](https://img.shields.io/github/license/trainstar/synchro)](LICENSE) -[![Docs](https://img.shields.io/badge/docs-trainstar.github.io%2Fsynchro-blue)](https://trainstar.github.io/synchro) - -Offline-first sync for Go + PostgreSQL. Your tables. Your server. Minimal changes. +

+ Synchro +

+ +

+ Release + Go + Go Reference + npm + Maven Central + CocoaPods + SPM + License + Docs +

+ +Offline-first sync between PostgreSQL and native client SDKs for Swift, Kotlin, and React Native. Go server you can embed or deploy standalone. Your tables. Minimal changes. ## What You Need From 3dbcbabb5b9c7685feaa9ff8c391272fbc0366c6 Mon Sep 17 00:00:00 2001 From: Michael Spinali Date: Sun, 15 Mar 2026 15:06:20 -0500 Subject: [PATCH 3/6] fix: trim logo SVG whitespace, remove unpublished badges, center tagline --- README.md | 6 +----- docs/assets/logo.svg | 12 ++++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 822b84ad..26852edd 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,14 @@

- Release Go Go Reference npm - Maven Central - CocoaPods - SPM License Docs

-Offline-first sync between PostgreSQL and native client SDKs for Swift, Kotlin, and React Native. Go server you can embed or deploy standalone. Your tables. Minimal changes. +

Offline-first sync between PostgreSQL and native client SDKs for Swift, Kotlin, and React Native. Go server you can embed or deploy standalone. Your tables. Minimal changes.

## What You Need diff --git a/docs/assets/logo.svg b/docs/assets/logo.svg index 44e50731..be93bb72 100644 --- a/docs/assets/logo.svg +++ b/docs/assets/logo.svg @@ -1,7 +1,7 @@ - - - - + + + + -synchro - \ No newline at end of file +synchro + From bf996e721348166841839c1677b4a5986bbaaf66 Mon Sep 17 00:00:00 2001 From: Michael Spinali Date: Sun, 15 Mar 2026 15:08:33 -0500 Subject: [PATCH 4/6] fix: consolidate logo and badges into single block, reduce logo width --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 26852edd..b703f1e0 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@

- Synchro -

- -

+ Synchro

Go Go Reference npm From 0bdedfc435b38b55ce35b00e2656f4118997a51b Mon Sep 17 00:00:00 2001 From: Michael Spinali Date: Sun, 15 Mar 2026 15:10:25 -0500 Subject: [PATCH 5/6] fix: rename logo to bust GitHub camo cache --- README.md | 2 +- docs/assets/{logo.svg => synchro-logo.svg} | 0 mkdocs.yml | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename docs/assets/{logo.svg => synchro-logo.svg} (100%) diff --git a/README.md b/README.md index b703f1e0..f72f6249 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- Synchro

+ Synchro

Go Go Reference npm diff --git a/docs/assets/logo.svg b/docs/assets/synchro-logo.svg similarity index 100% rename from docs/assets/logo.svg rename to docs/assets/synchro-logo.svg diff --git a/mkdocs.yml b/mkdocs.yml index d1be7eb0..b288aba3 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -28,8 +28,8 @@ theme: - content.code.copy - content.tabs.link - toc.follow - logo: assets/logo.svg - favicon: assets/logo.svg + logo: assets/synchro-logo.svg + favicon: assets/synchro-logo.svg icon: repo: fontawesome/brands/github From 232869d1d3c97ce2ff2de265d4e89e38b1c36095 Mon Sep 17 00:00:00 2001 From: Michael Spinali Date: Sun, 15 Mar 2026 15:12:56 -0500 Subject: [PATCH 6/6] fix: increase logo width --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f72f6249..ec17277e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- Synchro

+ Synchro

Go Go Reference npm