name: Validate Skill

on:
  pull_request:
    paths:
      - skills/my-skill/SKILL.md
      - skills/my-skill/skill.json
      - skills/my-skill/apis.json
      - skills/my-skill/llms.txt
      - skills/my-skill/references/**
      - skills/my-skill/schemas/**
      - .github/workflows/validate-skill.yml

jobs:
  validate:
    concurrency:
      group: validate-skill-${{ github.event.pull_request.number || github.ref }}
      cancel-in-progress: true
    runs-on: ubuntu-latest
    permissions:
      contents: read
      issues: write
      pull-requests: write
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
      - name: Prepare skill package
        id: package
        shell: bash
        run: |
          SOURCE_DIR="skills/my-skill"
          PACKAGE_DIR="publish-package-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
          mkdir -p "${PACKAGE_DIR}/references" "${PACKAGE_DIR}/schemas"
          cp "${SOURCE_DIR}/SKILL.md" "${SOURCE_DIR}/skill.json" "${PACKAGE_DIR}/"
          if [[ -f "${SOURCE_DIR}/apis.json" ]]; then
            cp "${SOURCE_DIR}/apis.json" "${PACKAGE_DIR}/"
          fi
          if [[ -f "${SOURCE_DIR}/llms.txt" ]]; then
            cp "${SOURCE_DIR}/llms.txt" "${PACKAGE_DIR}/"
          fi
          if [[ -d "${SOURCE_DIR}/references" ]]; then
            shopt -s nullglob
            reference_files=("${SOURCE_DIR}"/references/*.md)
            if (( ${#reference_files[@]} > 0 )); then
              cp "${reference_files[@]}" "${PACKAGE_DIR}/references/"
            fi
          fi
          if [[ -f "${SOURCE_DIR}/schemas/skill.schema.json" ]]; then
            cp "${SOURCE_DIR}/schemas/skill.schema.json" "${PACKAGE_DIR}/schemas/"
          fi
          echo "dir=${PACKAGE_DIR}" >> "$GITHUB_OUTPUT"
      - name: Validate skill package
        uses: hashgraph-online/skill-publish@9742f4cab7ca48683d39dcd16f92ec7dfe565df7
        with:
          mode: validate
          skill-dir: ${{ steps.package.outputs.dir }}
          annotate: "false"
          preview-upload: "false"
          github-token: ${{ github.token }}
          comment-mode: "state-changes"
          comment-on-success: "true"
