Skip to content

Latest commit

 

History

History
204 lines (169 loc) · 4.25 KB

File metadata and controls

204 lines (169 loc) · 4.25 KB

Usage Examples

This file contains various examples of how to use the JSON Validator TypeScript Action.

Example 1: Validate All JSON Files in Repository

name: Validate JSON Files
on: [push, pull_request]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: woeterman94/json-validator-typescript-action@v1

Example 2: Validate JSON Files in Specific Folder

name: Validate Configuration Files
on: [push, pull_request]

jobs:
  validate-config:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate config files
        uses: woeterman94/json-validator-typescript-action@v1
        with:
          folder: 'config'

Example 3: Validate JSON Files Against Schema

name: Validate Data Files
on: [push, pull_request]

jobs:
  validate-data:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate data files
        uses: woeterman94/json-validator-typescript-action@v1
        with:
          folder: 'data'
          schema: 'schemas/data.schema.json'

Example 4: Custom Ignore Patterns

name: Validate with Custom Ignore
on: [push, pull_request]

jobs:
  validate-custom:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate with custom ignore patterns
        uses: woeterman94/json-validator-typescript-action@v1
        with:
          folder: '.'
          ignore: |
            **/node_modules/**
            **/dist/**
            **/build/**
            **/.git/**
            **/test/**
            **/fixtures/**

Example 5: Multiple Folder Validation

name: Validate All JSON
on: [push, pull_request]

jobs:
  validate-multiple:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        folder: ['config', 'data', 'schemas']
    steps:
      - uses: actions/checkout@v4
      - name: Validate ${{ matrix.folder }}
        uses: woeterman94/json-validator-typescript-action@v1
        with:
          folder: ${{ matrix.folder }}

Example 6: With Outputs

name: Validate and Report
on: [push, pull_request]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate JSON files
        id: validation
        uses: woeterman94/json-validator-typescript-action@v1
        with:
          folder: '.'
      
      - name: Display results
        if: always()
        run: |
          echo "✅ Valid files: ${{ steps.validation.outputs.valid-files }}"
          echo "❌ Invalid files: ${{ steps.validation.outputs.invalid-files }}"

Example 7: Conditional Execution

name: Conditional Validation
on: 
  pull_request:
    paths:
      - '**.json'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate only if JSON files changed
        uses: woeterman94/json-validator-typescript-action@v1

Example 8: Report Invalid Files Without Failing

name: JSON Validation Report
on: [push, pull_request]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate JSON files (report only)
        uses: woeterman94/json-validator-typescript-action@v1
        with:
          folder: '.'
          fail-on-invalid: false

With fail-on-invalid: false, invalid files are reported but the action exits successfully. The output format is the same as when fail-on-invalid: true (the default).

JSON Schema Example

Here's an example JSON schema file that you can use:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1
    },
    "version": {
      "type": "string",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
    },
    "description": {
      "type": "string"
    },
    "author": {
      "type": "string"
    }
  },
  "required": ["name", "version"]
}

Testing Locally

To test the action locally before committing:

# Install dependencies
npm install

# Build the action
npm run build
npm run package

# Test with environment variables
export INPUT_FOLDER="path/to/folder"
export INPUT_SCHEMA="path/to/schema.json"  # optional
node dist/index.js