Switch to JSON Schema rather than protobuf
Some checks failed
Generate and Release Protos / release (push) Failing after 9s

This commit is contained in:
2026-01-07 17:23:56 +00:00
parent a17e7a5290
commit 04ed0ede29
5 changed files with 86 additions and 43 deletions

View File

@@ -17,11 +17,6 @@ jobs:
id: get_version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- uses: bufbuild/buf-action@v1.3
with:
setup_only: true
version: '1.63.0'
- uses: actions/setup-go@v5
with:
go-version: '1.23'
@@ -32,18 +27,13 @@ jobs:
registry-url: 'https://git.fjla.uk/api/packages/owlboard/npm'
scope: '@owlboard'
- name: Install Go Protoc Plugin
- name: Install Generators
run: |
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
npm install -g json-schema-to-typescript typescript
go install github.com/atombender/go-jsonschema/cmd/go-jsonschema@latest
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
- name: Install TS-Proto Plugin
run: |
npm install ts-proto typescript
echo "$PATH:$(pwd)/ts-proto" >> $GITHUB_PATH
- name: Generate Code
run: buf generate
- run: scripts/build.sh
- name: Build and Publish TS
working-directory: gen/ts

View File

@@ -1,18 +0,0 @@
version: v2
managed:
enabled: true
override:
- file_option: go_package_prefix
value: github.com/owlboard/backend-data-contracts
plugins:
- local: protoc-gen-go
out: gen/go
opt: paths=source_relative
- local: ./node_modules/ts-proto/protoc-gen-ts_proto
out: gen/ts
opt:
- esModuleInterop=true
- outputJsonMethods=true
- forceLong=string
- importSuffix=.js
- outputExtensions=true

View File

@@ -1,9 +0,0 @@
version: v2
modules:
- path: protos
lint:
use:
- DEFAULT
breaking:
use:
- FILE

View File

@@ -0,0 +1,54 @@
{
"$id": "https://schema.owlboard.info/data-ingress/pis-data.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "PisObjects",
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "PIS Code - Code that is entered in to the PIS system"
},
"toc": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"pattern": "^[a-zA-Z]+$",
"description": "Two letter TOC Code"
},
"crsStops": {
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"maxLength": 3,
"pattern": "^[a-zA-Z]+$"
},
"description": "List of 3ALPHA/CRS Codes"
},
"crsHash": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[0-9]+$",
"description": "Stringified 64-bit hash"
},
"tiplocStops": {
"type": "array",
"items": {
"type": "string",
"minLength": 4,
"maxLength": 7,
"pattern": "^[a-zA-Z0-9]+$"
},
"description": "List of TIPLOC Codes"
},
"tiplocHash": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[0-9]+$"
}
},
"required": ["code", "toc", "crsStops", "crsHash", "tiplocStops", "tiplocHash"],
"additionalProperties": false
}

26
scripts/build.sh Normal file
View File

@@ -0,0 +1,26 @@
#!/bin/bash
set -e
# Create clean output directories
rm -rf gen && mkdir -p gen/ts gen/go/models
# Find all .json files
FILES=$(find schemas -name "*.json")
# Initialize the TypeScript Barrel File
echo "// Auto-generated barrel file" > gen/ts/index.ts
for file in $FILES; do
# Get a clean name (e.g., data-ingress_pis-mapping)
clean_name=$(echo "${file#schemas/}" | sed 's/\//_/g' | sed 's/\.json//g')
# Output to one folder and add to index
npx --yes json-schema-to-typescript "$file" > "gen/ts/${clean_name}.ts"
echo "export * from './${clean_name}.js';" >> gen/ts/index.ts
# Generate Go
go-jsonschema -p models "$file" > "gen/go/models/${clean_name}.go"
done
echo "✅ Generated single TS package in gen/ts"
echo "✅ Generated single Go package in gen/go/models"