Switch to JSON Schema rather than protobuf
Some checks failed
Generate and Release Protos / release (push) Failing after 9s
Some checks failed
Generate and Release Protos / release (push) Failing after 9s
This commit is contained in:
@@ -16,34 +16,24 @@ jobs:
|
||||
- name: Get Version
|
||||
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'
|
||||
|
||||
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '18.18.x'
|
||||
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
|
||||
|
||||
18
buf.gen.yaml
18
buf.gen.yaml
@@ -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
|
||||
9
buf.yaml
9
buf.yaml
@@ -1,9 +0,0 @@
|
||||
version: v2
|
||||
modules:
|
||||
- path: protos
|
||||
lint:
|
||||
use:
|
||||
- DEFAULT
|
||||
breaking:
|
||||
use:
|
||||
- FILE
|
||||
54
schemas/data-ingress/pis-data.json
Normal file
54
schemas/data-ingress/pis-data.json
Normal 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
26
scripts/build.sh
Normal 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"
|
||||
Reference in New Issue
Block a user