ci: generate graphql schema in GH action

This commit is contained in:
Elliot DeNolf
2023-02-01 15:17:48 -05:00
parent 678614b62b
commit 7720f452d3
5 changed files with 1551 additions and 0 deletions

View File

@@ -44,6 +44,9 @@ jobs:
- name: Generate Payload Types
run: yarn dev:generate-types fields
- name: Generate GraphQL schema file
run: yarn dev:generate-graphql-schema
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: E2E Tests

View File

@@ -38,6 +38,7 @@
"build:watch": "nodemon --watch 'src/**' --ext 'ts,tsx' --exec \"yarn build:tsc\"",
"dev": "nodemon",
"dev:generate-types": "ts-node -T ./test/generateTypes.ts",
"dev:generate-graphql-schema": "cross-env PAYLOAD_CONFIG_PATH=test/graphql-schema-gen/config.ts ts-node -T ./src/bin/generateGraphQLSchema.ts",
"pretest": "yarn build",
"test": "yarn test:int && yarn test:components && yarn test:e2e",
"test:int": "cross-env DISABLE_LOGGING=true jest --forceExit --detectOpenHandles",

View File

@@ -0,0 +1,19 @@
import path from 'path';
import fs from 'fs';
import { generateGraphQLSchema } from '../src/bin/generateGraphQLSchema';
const [testConfigDir] = process.argv.slice(2);
const testDir = path.resolve(__dirname, testConfigDir);
setPaths(testDir);
generateGraphQLSchema();
// Set config path and TS output path using test dir
function setPaths(dir) {
const configPath = path.resolve(dir, 'config.ts');
if (fs.existsSync(configPath)) {
process.env.PAYLOAD_CONFIG_PATH = configPath;
return true;
}
return false;
}

View File

@@ -0,0 +1,84 @@
import path from 'path';
import type { CollectionConfig } from '../../src/collections/config/types';
import { buildConfig } from '../buildConfig';
export interface Relation {
id: string;
name: string;
}
const openAccess = {
create: () => true,
read: () => true,
update: () => true,
delete: () => true,
};
const collectionWithName = (collectionSlug: string): CollectionConfig => {
return {
slug: collectionSlug,
access: openAccess,
fields: [
{
name: 'name',
type: 'text',
},
],
};
};
export const slug = 'posts';
export const relationSlug = 'relation';
export default buildConfig({
graphQL: {
schemaOutputFile: path.resolve(__dirname, 'generated-schema.graphql'),
},
collections: [
{
slug,
access: openAccess,
fields: [
{
name: 'title',
type: 'text',
},
{
name: 'description',
type: 'text',
},
{
name: 'number',
type: 'number',
},
// Relationship
{
name: 'relationField',
type: 'relationship',
relationTo: relationSlug,
},
// Relation hasMany
{
name: 'relationHasManyField',
type: 'relationship',
relationTo: relationSlug,
hasMany: true,
},
// Relation multiple relationTo
{
name: 'relationMultiRelationTo',
type: 'relationship',
relationTo: [relationSlug, 'dummy'],
},
// Relation multiple relationTo hasMany
{
name: 'relationMultiRelationToHasMany',
type: 'relationship',
relationTo: [relationSlug, 'dummy'],
hasMany: true,
},
],
},
collectionWithName(relationSlug),
collectionWithName('dummy'),
],
});

File diff suppressed because it is too large Load Diff