Skip to content

API/TS: Add regression tests and on-the-fly examples for #137 #1262

API/TS: Add regression tests and on-the-fly examples for #137

API/TS: Add regression tests and on-the-fly examples for #137 #1262

Workflow file for this run

name: CI
on:
push:
pull_request:
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Lint
run: make lint
- name: Test
run: make test
- name: Build
run: bun run build
security:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run security audit
run: bun audit
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Build and pack
run: |
bun install --frozen-lockfile
bun run build
bun pm pack
- name: Upload tarball
uses: actions/upload-artifact@v5
with:
name: package-tarball
path: "*.tgz"
package-managers:
runs-on: ubuntu-latest
needs: build
strategy:
fail-fast: false
matrix:
package-manager: [bun, npm, pnpm]
steps:
- name: Download tarball
uses: actions/download-artifact@v5
with:
name: package-tarball
- name: Setup Bun
if: matrix.package-manager == 'bun'
uses: oven-sh/setup-bun@v2
- name: Setup Node.js
if: matrix.package-manager != 'bun'
uses: actions/setup-node@v5
with:
node-version: "20"
- name: Setup pnpm
if: matrix.package-manager == 'pnpm'
uses: pnpm/action-setup@v5
with:
version: latest
- name: Install package
run: |
TARBALL=$(ls *.tgz)
mkdir /tmp/test-install && cd /tmp/test-install
echo '{}' > package.json
if [ "${{ matrix.package-manager }}" == "bun" ]; then
bun add "$OLDPWD/$TARBALL"
elif [ "${{ matrix.package-manager }}" == "npm" ]; then
npm install "$OLDPWD/$TARBALL"
else
pnpm add "$OLDPWD/$TARBALL"
fi
- name: Generate FHIR R4 type tree
working-directory: /tmp/test-install
run: |
cat > generate.ts <<'SCRIPT'
import { APIBuilder } from "@atomic-ehr/codegen";
const generate = async () => {
const builder = new APIBuilder()
.fromPackage("hl7.fhir.r4.core", "4.0.1")
.introspection({ typeTree: "./type-tree.json" })
.outputTo("./output");
const report = await builder.generate();
if (!report.success) {
console.error("Generation failed");
process.exit(1);
}
console.log("OK: type tree generated");
};
generate();
SCRIPT
if [ "${{ matrix.package-manager }}" == "bun" ]; then
bun generate.ts
elif [ "${{ matrix.package-manager }}" == "npm" ]; then
npx tsx generate.ts
else
pnpm dlx tsx generate.ts
fi
- name: Verify output
run: |
if [ ! -f /tmp/test-install/output/type-tree.json ]; then
echo "type-tree.json not found"
exit 1
fi
echo "type-tree.json exists ($(wc -c < /tmp/test-install/output/type-tree.json) bytes)"