diff --git a/lexicons/README.md b/lexicons/README.md new file mode 100644 --- /dev/null +++ b/lexicons/README.md @@ -0,0 +1,53 @@ +# Vendored Lexicons + +This directory contains vendored copies of AT Protocol lexicon definitions for the Tangled.org service. + +## Source + +These lexicons are downloaded from the tangled.org core repository: +- **Source**: `https://tangled.org/tangled.org/core/raw/master/lexicons/` +- **Repository**: `https://tangled.org/tangled.org/core` +- **Last Updated**: 2026-02-09 + +## Structure + +- `sh/tangled/` - Tangled-specific lexicons + - `issue/` - Issue record types + - `pulls/` - Pull request record types + - `repo/` - Repository record types + - `label/` - Label/tag record types + - `pipeline/` - CI/CD pipeline types + - `actor/`, `feed/`, `graph/`, `git/`, `knot/`, `spindle/`, `string/` - Other types + +## Updating Lexicons + +When Tangled.org updates their lexicon schemas, run the update script: + +```bash +npm run update-lexicons +``` + +This script: +1. Downloads the latest lexicon files from tangled.org over HTTPS +2. Saves them to the `lexicons/` directory +3. Preserves the directory structure + +After updating lexicons: +1. Update the "Last Updated" date in this README +2. Regenerate client code: `npm run codegen` +3. Run tests to ensure compatibility: `npm test` +4. Commit both lexicon updates and generated code changes + +**Manual Update** (if script fails): +- Lexicons can be manually downloaded from: `https://tangled.org/tangled.org/core/raw/master/lexicons/` +- Example: `https://tangled.org/tangled.org/core/raw/master/lexicons/issue/issue.json` + +## Code Generation + +Client TypeScript code is generated from these lexicons using `@atproto/lex-cli`: + +```bash +npm run codegen +``` + +This generates type-safe client code in `src/lexicon/` which is committed to version control. diff --git a/scripts/update-lexicons.sh b/scripts/update-lexicons.sh new file mode 100644 --- /dev/null +++ b/scripts/update-lexicons.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Base URL for tangled.org core repository +BASE_URL="https://tangled.org/tangled.org/core/raw/master/lexicons" + +# Create lexicons directory +mkdir -p lexicons/sh/tangled + +# Function to download a lexicon file +download_lexicon() { + local path="$1" + local dest="lexicons/sh/tangled/$path" + local url="$BASE_URL/$path" + + echo "Downloading $path..." + mkdir -p "$(dirname "$dest")" + curl -fsSL "$url" -o "$dest" +} + +# Download all Tangled lexicons +echo "Fetching latest lexicons from tangled.org..." + +# Issue lexicons +download_lexicon "issue/issue.json" +download_lexicon "issue/comment.json" +download_lexicon "issue/state.json" +download_lexicon "issue/open.json" +download_lexicon "issue/closed.json" + +# Pull request lexicons +download_lexicon "pulls/pull.json" +download_lexicon "pulls/comment.json" +download_lexicon "pulls/state.json" +download_lexicon "pulls/open.json" +download_lexicon "pulls/closed.json" +download_lexicon "pulls/merged.json" + +# Repository lexicons +download_lexicon "repo/repo.json" +download_lexicon "repo/create.json" +download_lexicon "repo/delete.json" +download_lexicon "repo/archive.json" +download_lexicon "repo/collaborator.json" +download_lexicon "repo/blob.json" +download_lexicon "repo/tree.json" +download_lexicon "repo/log.json" +download_lexicon "repo/diff.json" +download_lexicon "repo/branch.json" +download_lexicon "repo/branches.json" +download_lexicon "repo/defaultBranch.json" +download_lexicon "repo/getDefaultBranch.json" +download_lexicon "repo/deleteBranch.json" +download_lexicon "repo/tag.json" +download_lexicon "repo/tags.json" +download_lexicon "repo/compare.json" +download_lexicon "repo/merge.json" +download_lexicon "repo/mergeCheck.json" +download_lexicon "repo/forkStatus.json" +download_lexicon "repo/forkSync.json" +download_lexicon "repo/artifact.json" +download_lexicon "repo/hiddenRef.json" +download_lexicon "repo/languages.json" +download_lexicon "repo/addSecret.json" +download_lexicon "repo/listSecrets.json" +download_lexicon "repo/removeSecret.json" + +# Label lexicons +download_lexicon "label/definition.json" +download_lexicon "label/op.json" + +# Pipeline lexicons +download_lexicon "pipeline/pipeline.json" +download_lexicon "pipeline/status.json" +download_lexicon "pipeline/cancelPipeline.json" + +# Top-level lexicons +download_lexicon "owner.json" +download_lexicon "publicKey.json" + +# Actor lexicons +download_lexicon "actor/profile.json" + +# Feed lexicons +download_lexicon "feed/reaction.json" +download_lexicon "feed/star.json" + +# Graph lexicons +download_lexicon "graph/follow.json" + +# Git lexicons +download_lexicon "git/refUpdate.json" + +# Knot lexicons +download_lexicon "knot/knot.json" +download_lexicon "knot/listKeys.json" +download_lexicon "knot/member.json" +download_lexicon "knot/version.json" + +# Spindle lexicons +download_lexicon "spindle/spindle.json" +download_lexicon "spindle/member.json" + +# String lexicons +download_lexicon "string/string.json" + +echo "" +echo "✓ Lexicons downloaded successfully" +echo " Run 'npm run codegen' to regenerate TypeScript types"